sc/qa/unit/datatransformation_test.cxx | 433 ++++++++++++++++------- sc/source/ui/dataprovider/datatransformation.cxx | 247 +++++-------- 2 files changed, 407 insertions(+), 273 deletions(-)
New commits: commit 4a00c79aafc6dde331cf4bb351d98226a9337171 Author: Vikas Mahato <vikasmaha...@gmail.com> AuthorDate: Tue Aug 21 23:58:58 2018 +0530 Commit: Eike Rathke <er...@redhat.com> CommitDate: Mon Oct 8 16:39:31 2018 +0200 Added date time transformations - follow-up Change-Id: I130feda7c835b067a542736ad6fadc79cabc4f41 Reviewed-on: https://gerrit.libreoffice.org/59413 Tested-by: Jenkins Reviewed-by: Eike Rathke <er...@redhat.com> diff --git a/sc/qa/unit/datatransformation_test.cxx b/sc/qa/unit/datatransformation_test.cxx index 97a8e49c79d8..f1aba85b82bc 100644 --- a/sc/qa/unit/datatransformation_test.cxx +++ b/sc/qa/unit/datatransformation_test.cxx @@ -16,7 +16,8 @@ #include <dataprovider.hxx> #include <datatransformation.hxx> #include <vcl/scheduler.hxx> - +#include <tools/datetime.hxx> +#include <tools/time.hxx> #include <memory> class ScDataTransformationTest : public ScBootstrapFixture @@ -543,269 +544,440 @@ void ScDataTransformationTest::testReplaceNull() void ScDataTransformationTest::testGetDateString() { - m_pDoc->SetValue(2, 0, 0, 43248.5624189815); - m_pDoc->SetValue(2, 1, 0, 42941.5624189815); - m_pDoc->SetValue(2, 2, 0, 42518.5624189815); + SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable(); + css::util::Date aDate1(25,1,2011); + css::util::Date aDate2(12,10,1994); + css::util::Date aDate3(23,9,1996); + css::util::Date aDate4(15,8,1947); + + double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate()); + double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate()); + double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate()); + double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate()); + + m_pDoc->SetValue(2, 0, 0, nDate1); + m_pDoc->SetValue(2, 1, 0, nDate2); + m_pDoc->SetValue(2, 2, 0, nDate3); + m_pDoc->SetValue(2, 3, 0, nDate4); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::DATE_STRING ); aTransform.Transform(*m_pDoc); - CPPUNIT_ASSERT_EQUAL(OUString("05/28/18"), m_pDoc->GetString(2, 0, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("07/25/17"), m_pDoc->GetString(2, 1, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("05/28/16"), m_pDoc->GetString(2, 2, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("01/25/11"), m_pDoc->GetString(2, 0, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("10/12/94"), m_pDoc->GetString(2, 1, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("09/23/96"), m_pDoc->GetString(2, 2, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("08/15/47"), m_pDoc->GetString(2, 3, 0)); } void ScDataTransformationTest::testGetYear() { - m_pDoc->SetValue(2, 0, 0, 20); - m_pDoc->SetValue(2, 1, 0, 3342.44); - m_pDoc->SetValue(2, 2, 0, 955.05); - m_pDoc->SetValue(2, 3, 0, 4890.22); + SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable(); + css::util::Date aDate1(25,1,2011); + css::util::Date aDate2(12,10,1994); + css::util::Date aDate3(23,9,1996); + css::util::Date aDate4(15,8,1947); + + double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate()); + double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate()); + double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate()); + double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate()); + + m_pDoc->SetValue(2, 0, 0, nDate1); + m_pDoc->SetValue(2, 1, 0, nDate2); + m_pDoc->SetValue(2, 2, 0, nDate3); + m_pDoc->SetValue(2, 3, 0, nDate4); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::YEAR ); aTransform.Transform(*m_pDoc); - CPPUNIT_ASSERT_DOUBLES_EQUAL(1900, m_pDoc->GetValue(2, 0, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(1909, m_pDoc->GetValue(2, 1, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(1902, m_pDoc->GetValue(2, 2, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(1913, m_pDoc->GetValue(2, 3, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(2011, m_pDoc->GetValue(2, 0, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(1994, m_pDoc->GetValue(2, 1, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(1996, m_pDoc->GetValue(2, 2, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(1947, m_pDoc->GetValue(2, 3, 0), 0); } void ScDataTransformationTest::testGetStartOfYear() { - m_pDoc->SetValue(2, 0, 0, 43248.5624189815); - m_pDoc->SetValue(2, 1, 0, 42941.5624189815); - m_pDoc->SetValue(2, 2, 0, 42518.5624189815); - m_pDoc->SetValue(2, 3, 0, 44217.5624189815); + SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable(); + css::util::Date aDate1(25,1,2011); + css::util::Date aDate2(12,10,1994); + css::util::Date aDate3(23,9,1996); + css::util::Date aDate4(15,8,1947); + + double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate()); + double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate()); + double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate()); + double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate()); + + m_pDoc->SetValue(2, 0, 0, nDate1); + m_pDoc->SetValue(2, 1, 0, nDate2); + m_pDoc->SetValue(2, 2, 0, nDate3); + m_pDoc->SetValue(2, 3, 0, nDate4); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::START_OF_YEAR ); aTransform.Transform(*m_pDoc); - CPPUNIT_ASSERT_EQUAL(OUString("01/01/18"), m_pDoc->GetString(2, 0, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("01/01/17"), m_pDoc->GetString(2, 1, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("01/01/16"), m_pDoc->GetString(2, 2, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("01/01/21"), m_pDoc->GetString(2, 3, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("01/01/11"), m_pDoc->GetString(2, 0, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("01/01/94"), m_pDoc->GetString(2, 1, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("01/01/96"), m_pDoc->GetString(2, 2, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("01/01/47"), m_pDoc->GetString(2, 3, 0)); } void ScDataTransformationTest::testGetEndOfYear() { - m_pDoc->SetValue(2, 0, 0, 43248.5624189815); - m_pDoc->SetValue(2, 1, 0, 42941.5624189815); - m_pDoc->SetValue(2, 2, 0, 42518.5624189815); - m_pDoc->SetValue(2, 3, 0, 44217.5624189815); + SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable(); + css::util::Date aDate1(25,1,2011); + css::util::Date aDate2(12,10,1994); + css::util::Date aDate3(23,9,1996); + css::util::Date aDate4(15,8,1947); + + double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate()); + double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate()); + double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate()); + double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate()); + + m_pDoc->SetValue(2, 0, 0, nDate1); + m_pDoc->SetValue(2, 1, 0, nDate2); + m_pDoc->SetValue(2, 2, 0, nDate3); + m_pDoc->SetValue(2, 3, 0, nDate4); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::END_OF_YEAR ); aTransform.Transform(*m_pDoc); - CPPUNIT_ASSERT_EQUAL(OUString("12/31/18"), m_pDoc->GetString(2, 0, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("12/31/17"), m_pDoc->GetString(2, 1, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("12/31/16"), m_pDoc->GetString(2, 2, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("12/31/21"), m_pDoc->GetString(2, 3, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("12/31/11"), m_pDoc->GetString(2, 0, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("12/31/94"), m_pDoc->GetString(2, 1, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("12/31/96"), m_pDoc->GetString(2, 2, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("12/31/47"), m_pDoc->GetString(2, 3, 0)); } void ScDataTransformationTest::testGetMonth() { - m_pDoc->SetValue(2, 0, 0, 20); - m_pDoc->SetValue(2, 1, 0, 3342.44); - m_pDoc->SetValue(2, 2, 0, 955.05); - m_pDoc->SetValue(2, 3, 0, 4890.22); + SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable(); + css::util::Date aDate1(25,1,2011); + css::util::Date aDate2(12,10,1994); + css::util::Date aDate3(23,9,1996); + css::util::Date aDate4(15,8,1947); + + double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate()); + double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate()); + double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate()); + double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate()); + + m_pDoc->SetValue(2, 0, 0, nDate1); + m_pDoc->SetValue(2, 1, 0, nDate2); + m_pDoc->SetValue(2, 2, 0, nDate3); + m_pDoc->SetValue(2, 3, 0, nDate4); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::MONTH ); aTransform.Transform(*m_pDoc); CPPUNIT_ASSERT_DOUBLES_EQUAL(1, m_pDoc->GetValue(2, 0, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(2, m_pDoc->GetValue(2, 1, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(8, m_pDoc->GetValue(2, 2, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(5, m_pDoc->GetValue(2, 3, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(10, m_pDoc->GetValue(2, 1, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(9, m_pDoc->GetValue(2, 2, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(8, m_pDoc->GetValue(2, 3, 0), 0); } void ScDataTransformationTest::testGetMonthName() { - m_pDoc->SetValue(2, 0, 0, 20); - m_pDoc->SetValue(2, 1, 0, 3342.44); - m_pDoc->SetValue(2, 2, 0, 955.05); - m_pDoc->SetValue(2, 3, 0, 4890.22); + SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable(); + css::util::Date aDate1(25,1,2011); + css::util::Date aDate2(12,10,1994); + css::util::Date aDate3(23,9,1996); + css::util::Date aDate4(15,8,1947); + + double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate()); + double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate()); + double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate()); + double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate()); + + m_pDoc->SetValue(2, 0, 0, nDate1); + m_pDoc->SetValue(2, 1, 0, nDate2); + m_pDoc->SetValue(2, 2, 0, nDate3); + m_pDoc->SetValue(2, 3, 0, nDate4); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::MONTH_NAME); aTransform.Transform(*m_pDoc); CPPUNIT_ASSERT_EQUAL(OUString("January"), m_pDoc->GetString(2, 0, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("February"), m_pDoc->GetString(2, 1, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("August"), m_pDoc->GetString(2, 2, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("May"), m_pDoc->GetString(2, 3, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("October"), m_pDoc->GetString(2, 1, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("September"), m_pDoc->GetString(2, 2, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("August"), m_pDoc->GetString(2, 3, 0)); } void ScDataTransformationTest::testGetStartOfMonth() { - m_pDoc->SetValue(2, 0, 0, 43248.5624189815); - m_pDoc->SetValue(2, 1, 0, 42941.562418981); - m_pDoc->SetValue(2, 2, 0, 42518.5624189815); - m_pDoc->SetValue(2, 3, 0, 44217.5624189815); + SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable(); + css::util::Date aDate1(25,1,2011); + css::util::Date aDate2(12,10,1994); + css::util::Date aDate3(23,9,1996); + css::util::Date aDate4(15,8,1947); + + double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate()); + double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate()); + double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate()); + double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate()); + + m_pDoc->SetValue(2, 0, 0, nDate1); + m_pDoc->SetValue(2, 1, 0, nDate2); + m_pDoc->SetValue(2, 2, 0, nDate3); + m_pDoc->SetValue(2, 3, 0, nDate4); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::START_OF_MONTH ); aTransform.Transform(*m_pDoc); - CPPUNIT_ASSERT_EQUAL(OUString("05/01/18"), m_pDoc->GetString(2, 0, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("07/01/17"), m_pDoc->GetString(2, 1, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("05/01/16"), m_pDoc->GetString(2, 2, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("01/01/21"), m_pDoc->GetString(2, 3, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("01/01/11"), m_pDoc->GetString(2, 0, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("10/01/94"), m_pDoc->GetString(2, 1, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("09/01/96"), m_pDoc->GetString(2, 2, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("08/01/47"), m_pDoc->GetString(2, 3, 0)); } void ScDataTransformationTest::testGetEndOfMonth() { - m_pDoc->SetValue(2, 0, 0, 43248.5624189815); - m_pDoc->SetValue(2, 1, 0, 42941.5624189815); - m_pDoc->SetValue(2, 2, 0, 42518.5624189815); - m_pDoc->SetValue(2, 3, 0, 44217.5624189815); + SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable(); + css::util::Date aDate1(25,1,2011); + css::util::Date aDate2(12,10,1994); + css::util::Date aDate3(23,9,1996); + css::util::Date aDate4(15,8,1947); + + double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate()); + double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate()); + double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate()); + double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate()); + + m_pDoc->SetValue(2, 0, 0, nDate1); + m_pDoc->SetValue(2, 1, 0, nDate2); + m_pDoc->SetValue(2, 2, 0, nDate3); + m_pDoc->SetValue(2, 3, 0, nDate4); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::END_OF_MONTH ); aTransform.Transform(*m_pDoc); - CPPUNIT_ASSERT_EQUAL(OUString("05/31/18"), m_pDoc->GetString(2, 0, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("07/31/17"), m_pDoc->GetString(2, 1, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("05/31/16"), m_pDoc->GetString(2, 2, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("01/31/21"), m_pDoc->GetString(2, 3, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("01/31/11"), m_pDoc->GetString(2, 0, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("10/31/94"), m_pDoc->GetString(2, 1, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("09/30/96"), m_pDoc->GetString(2, 2, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("08/31/47"), m_pDoc->GetString(2, 3, 0)); } void ScDataTransformationTest::testGetDay() { - m_pDoc->SetValue(2, 0, 0, 20); - m_pDoc->SetValue(2, 1, 0, 3342.44); - m_pDoc->SetValue(2, 2, 0, 955.05); - m_pDoc->SetValue(2, 3, 0, 4890.22); + SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable(); + css::util::Date aDate1(25,1,2011); + css::util::Date aDate2(12,10,1994); + css::util::Date aDate3(23,9,1996); + css::util::Date aDate4(15,8,1947); + + double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate()); + double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate()); + double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate()); + double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate()); + + m_pDoc->SetValue(2, 0, 0, nDate1); + m_pDoc->SetValue(2, 1, 0, nDate2); + m_pDoc->SetValue(2, 2, 0, nDate3); + m_pDoc->SetValue(2, 3, 0, nDate4); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::DAY ); aTransform.Transform(*m_pDoc); - CPPUNIT_ASSERT_DOUBLES_EQUAL(20, m_pDoc->GetValue(2, 0, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(24, m_pDoc->GetValue(2, 1, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(13, m_pDoc->GetValue(2, 2, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(22, m_pDoc->GetValue(2, 3, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(25, m_pDoc->GetValue(2, 0, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(12, m_pDoc->GetValue(2, 1, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(23, m_pDoc->GetValue(2, 2, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(15, m_pDoc->GetValue(2, 3, 0), 0); } void ScDataTransformationTest::testGetDayOfWeek() { - m_pDoc->SetValue(2, 0, 0, 20); - m_pDoc->SetValue(2, 1, 0, 3342.44); - m_pDoc->SetValue(2, 2, 0, 955.05); - m_pDoc->SetValue(2, 3, 0, 4890.22); + SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable(); + css::util::Date aDate1(25,1,2011); + css::util::Date aDate2(12,10,1994); + css::util::Date aDate3(23,9,1996); + css::util::Date aDate4(15,8,1947); + + double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate()); + double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate()); + double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate()); + double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate()); + + m_pDoc->SetValue(2, 0, 0, nDate1); + m_pDoc->SetValue(2, 1, 0, nDate2); + m_pDoc->SetValue(2, 2, 0, nDate3); + m_pDoc->SetValue(2, 3, 0, nDate4); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::DAY_OF_WEEK ); aTransform.Transform(*m_pDoc); - CPPUNIT_ASSERT_DOUBLES_EQUAL(5, m_pDoc->GetValue(2, 0, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(1, m_pDoc->GetValue(2, 0, 0), 0); CPPUNIT_ASSERT_DOUBLES_EQUAL(2, m_pDoc->GetValue(2, 1, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(2, m_pDoc->GetValue(2, 2, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(3, m_pDoc->GetValue(2, 3, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(0, m_pDoc->GetValue(2, 2, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(4, m_pDoc->GetValue(2, 3, 0), 0); } void ScDataTransformationTest::testGetDayOfYear() { - m_pDoc->SetValue(2, 0, 0, 20); - m_pDoc->SetValue(2, 1, 0, 3342.44); - m_pDoc->SetValue(2, 2, 0, 955.05); - m_pDoc->SetValue(2, 3, 0, 4890.22); + SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable(); + css::util::Date aDate1(25,1,2011); + css::util::Date aDate2(12,10,1994); + css::util::Date aDate3(23,9,1996); + css::util::Date aDate4(15,8,1947); + + double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate()); + double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate()); + double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate()); + double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate()); + + m_pDoc->SetValue(2, 0, 0, nDate1); + m_pDoc->SetValue(2, 1, 0, nDate2); + m_pDoc->SetValue(2, 2, 0, nDate3); + m_pDoc->SetValue(2, 3, 0, nDate4); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::DAY_OF_YEAR ); aTransform.Transform(*m_pDoc); - CPPUNIT_ASSERT_DOUBLES_EQUAL(20, m_pDoc->GetValue(2, 0, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(55, m_pDoc->GetValue(2, 1, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(225, m_pDoc->GetValue(2, 2, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(142, m_pDoc->GetValue(2, 3, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(25, m_pDoc->GetValue(2, 0, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(285, m_pDoc->GetValue(2, 1, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(267, m_pDoc->GetValue(2, 2, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(227, m_pDoc->GetValue(2, 3, 0), 0); } void ScDataTransformationTest::testGetQuarter() { - m_pDoc->SetValue(2, 0, 0, 20); - m_pDoc->SetValue(2, 1, 0, 3342.44); - m_pDoc->SetValue(2, 2, 0, 955.05); - m_pDoc->SetValue(2, 3, 0, 4890.22); + SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable(); + css::util::Date aDate1(25,1,2011); + css::util::Date aDate2(12,10,1994); + css::util::Date aDate3(23,9,1996); + css::util::Date aDate4(15,8,1947); + + double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate()); + double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate()); + double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate()); + double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate()); + + m_pDoc->SetValue(2, 0, 0, nDate1); + m_pDoc->SetValue(2, 1, 0, nDate2); + m_pDoc->SetValue(2, 2, 0, nDate3); + m_pDoc->SetValue(2, 3, 0, nDate4); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::QUARTER ); aTransform.Transform(*m_pDoc); CPPUNIT_ASSERT_DOUBLES_EQUAL(1, m_pDoc->GetValue(2, 0, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(1, m_pDoc->GetValue(2, 1, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(4, m_pDoc->GetValue(2, 1, 0), 0); CPPUNIT_ASSERT_DOUBLES_EQUAL(3, m_pDoc->GetValue(2, 2, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(2, m_pDoc->GetValue(2, 3, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(3, m_pDoc->GetValue(2, 3, 0), 0); } void ScDataTransformationTest::testGetStartOfQuarter() { - m_pDoc->SetValue(2, 0, 0, 43148.5624189815); - m_pDoc->SetValue(2, 1, 0, 43264.3055555556); - m_pDoc->SetValue(2, 2, 0, 43306.4946990741); - m_pDoc->SetValue(2, 3, 0, 43406.4946990741); + SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable(); + css::util::Date aDate1(25,1,2011); + css::util::Date aDate2(12,10,1994); + css::util::Date aDate3(23,9,1996); + css::util::Date aDate4(15,8,1947); + + double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate()); + double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate()); + double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate()); + double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate()); + + m_pDoc->SetValue(2, 0, 0, nDate1); + m_pDoc->SetValue(2, 1, 0, nDate2); + m_pDoc->SetValue(2, 2, 0, nDate3); + m_pDoc->SetValue(2, 3, 0, nDate4); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::START_OF_QUARTER ); aTransform.Transform(*m_pDoc); - CPPUNIT_ASSERT_EQUAL(OUString("01/01/18"), m_pDoc->GetString(2, 0, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("04/01/18"), m_pDoc->GetString(2, 1, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("07/01/18"), m_pDoc->GetString(2, 2, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("10/01/18"), m_pDoc->GetString(2, 3, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("01/01/11"), m_pDoc->GetString(2, 0, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("10/01/94"), m_pDoc->GetString(2, 1, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("07/01/96"), m_pDoc->GetString(2, 2, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("07/01/47"), m_pDoc->GetString(2, 3, 0)); } void ScDataTransformationTest::testGetEndOfQuarter() { - m_pDoc->SetValue(2, 0, 0, 43148.5624189815); - m_pDoc->SetValue(2, 1, 0, 43264.3055555556); - m_pDoc->SetValue(2, 2, 0, 43306.4946990741); - m_pDoc->SetValue(2, 3, 0, 43406.4946990741); + SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable(); + css::util::Date aDate1(25,1,2011); + css::util::Date aDate2(12,10,1994); + css::util::Date aDate3(23,9,1996); + css::util::Date aDate4(15,8,1947); + + double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate()); + double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate()); + double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate()); + double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate()); + + m_pDoc->SetValue(2, 0, 0, nDate1); + m_pDoc->SetValue(2, 1, 0, nDate2); + m_pDoc->SetValue(2, 2, 0, nDate3); + m_pDoc->SetValue(2, 3, 0, nDate4); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::END_OF_QUARTER ); aTransform.Transform(*m_pDoc); - CPPUNIT_ASSERT_EQUAL(OUString("03/31/18"), m_pDoc->GetString(2, 0, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("06/30/18"), m_pDoc->GetString(2, 1, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("09/30/18"), m_pDoc->GetString(2, 2, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("12/31/18"), m_pDoc->GetString(2, 3, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("03/31/11"), m_pDoc->GetString(2, 0, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("12/31/94"), m_pDoc->GetString(2, 1, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("09/30/96"), m_pDoc->GetString(2, 2, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("09/30/47"), m_pDoc->GetString(2, 3, 0)); } void ScDataTransformationTest::testGetTime() { - m_pDoc->SetValue(2, 0, 0, 20.562419); - m_pDoc->SetValue(2, 1, 0, 43249.3077546296); - m_pDoc->SetValue(2, 2, 0, 43249.3990740741); - m_pDoc->SetValue(2, 3, 0, 43249.4234837963); + tools::Time aTime1(5,30,12); + tools::Time aTime2(7,23,9); + tools::Time aTime3(9,34,40); + tools::Time aTime4(22,9,49); + + m_pDoc->SetValue(2, 0, 0, aTime1.GetTimeInDays()); + m_pDoc->SetValue(2, 1, 0, aTime2.GetTimeInDays()); + m_pDoc->SetValue(2, 2, 0, aTime3.GetTimeInDays()); + m_pDoc->SetValue(2, 3, 0, aTime4.GetTimeInDays()); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::TIME ); aTransform.Transform(*m_pDoc); - CPPUNIT_ASSERT_EQUAL(OUString("01:29:53 PM"), m_pDoc->GetString(2, 0, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("05:30:12 AM"), m_pDoc->GetString(2, 0, 0)); CPPUNIT_ASSERT_EQUAL(OUString("07:23:09 AM"), m_pDoc->GetString(2, 1, 0)); CPPUNIT_ASSERT_EQUAL(OUString("09:34:40 AM"), m_pDoc->GetString(2, 2, 0)); - CPPUNIT_ASSERT_EQUAL(OUString("10:09:49 AM"), m_pDoc->GetString(2, 3, 0)); + CPPUNIT_ASSERT_EQUAL(OUString("10:09:49 PM"), m_pDoc->GetString(2, 3, 0)); } void ScDataTransformationTest::testGetHour() { - m_pDoc->SetValue(2, 0, 0, 20.562419); - m_pDoc->SetValue(2, 1, 0, 43249.3077546296); - m_pDoc->SetValue(2, 2, 0, 43249.3990740741); - m_pDoc->SetValue(2, 3, 0, 43249.4234837963); + tools::Time aTime1(5,30,12); + tools::Time aTime2(7,23,9); + tools::Time aTime3(9,34,40); + tools::Time aTime4(22,9,49); + + m_pDoc->SetValue(2, 0, 0, aTime1.GetTimeInDays()); + m_pDoc->SetValue(2, 1, 0, aTime2.GetTimeInDays()); + m_pDoc->SetValue(2, 2, 0, aTime3.GetTimeInDays()); + m_pDoc->SetValue(2, 3, 0, aTime4.GetTimeInDays()); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::HOUR ); aTransform.Transform(*m_pDoc); - CPPUNIT_ASSERT_DOUBLES_EQUAL(13, m_pDoc->GetValue(2, 0, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(5, m_pDoc->GetValue(2, 0, 0), 0); CPPUNIT_ASSERT_DOUBLES_EQUAL(7, m_pDoc->GetValue(2, 1, 0), 0); CPPUNIT_ASSERT_DOUBLES_EQUAL(9, m_pDoc->GetValue(2, 2, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(10, m_pDoc->GetValue(2, 3, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(22, m_pDoc->GetValue(2, 3, 0), 0); } void ScDataTransformationTest::testGetMinute() { - m_pDoc->SetValue(2, 0, 0, 20.562419); - m_pDoc->SetValue(2, 1, 0, 43249.3077546296); - m_pDoc->SetValue(2, 2, 0, 43249.3990740741); - m_pDoc->SetValue(2, 3, 0, 43249.4234837963); + tools::Time aTime1(5,30,12); + tools::Time aTime2(7,23,9); + tools::Time aTime3(9,34,40); + tools::Time aTime4(22,9,49); + + m_pDoc->SetValue(2, 0, 0, aTime1.GetTimeInDays()); + m_pDoc->SetValue(2, 1, 0, aTime2.GetTimeInDays()); + m_pDoc->SetValue(2, 2, 0, aTime3.GetTimeInDays()); + m_pDoc->SetValue(2, 3, 0, aTime4.GetTimeInDays()); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::MINUTE ); aTransform.Transform(*m_pDoc); - CPPUNIT_ASSERT_DOUBLES_EQUAL(29, m_pDoc->GetValue(2, 0, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(30, m_pDoc->GetValue(2, 0, 0), 0); CPPUNIT_ASSERT_DOUBLES_EQUAL(23, m_pDoc->GetValue(2, 1, 0), 0); CPPUNIT_ASSERT_DOUBLES_EQUAL(34, m_pDoc->GetValue(2, 2, 0), 0); CPPUNIT_ASSERT_DOUBLES_EQUAL(9, m_pDoc->GetValue(2, 3, 0), 0); @@ -813,16 +985,21 @@ void ScDataTransformationTest::testGetMinute() void ScDataTransformationTest::testGetSecond() { - m_pDoc->SetValue(2, 0, 0, 20.562419); - m_pDoc->SetValue(2, 1, 0, 43249.3077546296); - m_pDoc->SetValue(2, 2, 0, 43249.3990740741); - m_pDoc->SetValue(2, 3, 0, 43249.4234837963); + tools::Time aTime1(5,30,53); + tools::Time aTime2(7,23,10); + tools::Time aTime3(9,34,40); + tools::Time aTime4(22,9,49); + + m_pDoc->SetValue(2, 0, 0, aTime1.GetTimeInDays()); + m_pDoc->SetValue(2, 1, 0, aTime2.GetTimeInDays()); + m_pDoc->SetValue(2, 2, 0, aTime3.GetTimeInDays()); + m_pDoc->SetValue(2, 3, 0, aTime4.GetTimeInDays()); sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::SECOND ); aTransform.Transform(*m_pDoc); CPPUNIT_ASSERT_DOUBLES_EQUAL(53, m_pDoc->GetValue(2, 0, 0), 0); - CPPUNIT_ASSERT_DOUBLES_EQUAL(9, m_pDoc->GetValue(2, 1, 0), 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(10, m_pDoc->GetValue(2, 1, 0), 0); CPPUNIT_ASSERT_DOUBLES_EQUAL(40, m_pDoc->GetValue(2, 2, 0), 0); CPPUNIT_ASSERT_DOUBLES_EQUAL(49, m_pDoc->GetValue(2, 3, 0), 0); } diff --git a/sc/source/ui/dataprovider/datatransformation.cxx b/sc/source/ui/dataprovider/datatransformation.cxx index 0c4e64a83f3e..4295e63d2bf7 100644 --- a/sc/source/ui/dataprovider/datatransformation.cxx +++ b/sc/source/ui/dataprovider/datatransformation.cxx @@ -14,63 +14,16 @@ #include <cmath> #include <tools/datetime.hxx> #include <svl/zforlist.hxx> -namespace { - -int getHour(double nDateTime) -{ - long nDays = std::trunc(nDateTime); - double nTime = nDateTime - nDays; - return std::trunc(nTime*24); -} - -int getMinute(double nDateTime) -{ - long nDays = std::trunc(nDateTime); - double nTime = nDateTime - nDays; - nTime = nTime*24; - nTime = nTime - std::trunc(nTime); - return std::trunc(nTime*60); -} - -int getSecond(double nDateTime) -{ - double nDays = std::trunc(nDateTime); - double nTime = nDateTime - nDays; - nTime = nTime*24; - nTime = nTime - std::trunc(nTime); - nTime = nTime*60; - nTime = nTime - std::trunc(nTime); - return std::trunc(nTime*60); -} +#include <globalnames.hxx> -OUString getTwoDigitString(OUString sString) -{ - if(sString.getLength() == 1) - sString = "0" + sString; - return sString; -} +namespace { -DateTime getDate(double nDateTime, SvNumberFormatter* pFormatter) +Date getDate(double nDateTime, SvNumberFormatter* pFormatter) { - sal_Int32 nDays = std::trunc(nDateTime); - Date aDate = pFormatter->GetNullDate(); - aDate.AddDays(nDays + 1); + Date aDate = pFormatter->GetNullDate(); + aDate.AddDays(static_cast<sal_Int32>(::rtl::math::approxFloor(nDateTime))); return aDate; } - -OUString getTimeString(double nDateTime) -{ - OUString sHour = OUString::number(getHour(nDateTime)); - sHour = getTwoDigitString(sHour); - - OUString sMinute = OUString::number(getMinute(nDateTime)); - sMinute = getTwoDigitString(sMinute); - - OUString sSecond = OUString::number(getSecond(nDateTime)); - sSecond = getTwoDigitString(sSecond); - - return sHour + ":" + sMinute + ":" + sSecond; -} } namespace sc { @@ -781,20 +734,17 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const { case DATETIME_TRANSFORMATION_TYPE::DATE_STRING: { + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); + SvNumFormatType nFormatType = SvNumFormatType::DATE; + LanguageType eLanguage = ScGlobal::eLnge; + sal_uInt32 nFormat = pFormatter->GetStandardFormat( nFormatType, eLanguage ); for (SCROW nRow = 0; nRow <= nEndRow; ++nRow) { CellType eType; rDoc.GetCellType(rCol, nRow, 0, eType); if (eType == CELLTYPE_VALUE) { - double nVal = rDoc.GetValue(rCol, nRow, 0); - - SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); - SvNumFormatType nFormatType = SvNumFormatType::DATE; - LanguageType eLanguage = ScGlobal::eLnge; ScAddress aAddress(rCol, nRow, 0); - sal_uLong nFormat = pFormatter->GetStandardFormat( nFormatType, eLanguage ); - rDoc.SetValue(rCol, nRow, 0, nVal); rDoc.SetNumberFormat(aAddress, nFormat); } } @@ -802,6 +752,7 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const break; case DATETIME_TRANSFORMATION_TYPE::YEAR: { + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); for (SCROW nRow = 0; nRow <= nEndRow; ++nRow) { CellType eType; @@ -809,7 +760,6 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const if (eType == CELLTYPE_VALUE) { double nVal = rDoc.GetValue(rCol, nRow, 0); - SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); Date aDate = getDate(nVal, pFormatter); rDoc.SetValue(rCol, nRow, 0, aDate.GetYear()); } @@ -818,6 +768,10 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const break; case DATETIME_TRANSFORMATION_TYPE::START_OF_YEAR: { + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); + SvNumFormatType nFormatType = SvNumFormatType::DATE; + LanguageType eLanguage = ScGlobal::eLnge; + sal_uInt32 nFormat = pFormatter->GetStandardFormat( nFormatType, eLanguage ); for (SCROW nRow = 0; nRow <= nEndRow; ++nRow) { CellType eType; @@ -825,17 +779,12 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const if (eType == CELLTYPE_VALUE) { double nVal = rDoc.GetValue(rCol, nRow, 0); - - SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); Date aDate = getDate(nVal, pFormatter); - nVal -= aDate.GetDayOfYear() - 2; - nVal = std::trunc(nVal); - SvNumFormatType nFormatType = SvNumFormatType::DATE; - LanguageType eLanguage = ScGlobal::eLnge; - ScAddress aAddress(rCol, nRow, 0); - sal_uLong nFormat = pFormatter->GetStandardFormat( nFormatType, eLanguage ); + aDate.SetDay(1); + aDate.SetMonth(1); + nVal = aDate - pFormatter->GetNullDate(); + ScAddress aAddress(rCol, nRow, 0); rDoc.SetValue(rCol, nRow, 0, nVal); - rDoc.SetNumberFormat(aAddress, nFormat); } } @@ -843,6 +792,11 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const break; case DATETIME_TRANSFORMATION_TYPE::END_OF_YEAR: { + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); + SvNumFormatType nFormatType = SvNumFormatType::DATE; + LanguageType eLanguage = ScGlobal::eLnge; + sal_uInt32 nFormat = pFormatter->GetStandardFormat( nFormatType, eLanguage ); + for (SCROW nRow = 0; nRow <= nEndRow; ++nRow) { CellType eType; @@ -850,17 +804,12 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const if (eType == CELLTYPE_VALUE) { double nVal = rDoc.GetValue(rCol, nRow, 0); - - SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); Date aDate = getDate(nVal, pFormatter); - nVal += ( aDate.GetDaysInYear() - aDate.GetDayOfYear() + 1); - nVal = std::trunc(nVal); - SvNumFormatType nFormatType = SvNumFormatType::DATE; - LanguageType eLanguage = ScGlobal::eLnge; + aDate.SetMonth(12); + aDate.SetDay(31); + nVal = aDate - pFormatter->GetNullDate(); ScAddress aAddress(rCol, nRow, 0); - sal_uLong nFormat = pFormatter->GetStandardFormat( nFormatType, eLanguage ); rDoc.SetValue(rCol, nRow, 0, nVal); - rDoc.SetNumberFormat(aAddress, nFormat); } } @@ -868,6 +817,7 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const break; case DATETIME_TRANSFORMATION_TYPE::MONTH: { + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); for (SCROW nRow = 0; nRow <= nEndRow; ++nRow) { CellType eType; @@ -875,7 +825,6 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const if (eType == CELLTYPE_VALUE) { double nVal = rDoc.GetValue(rCol, nRow, 0); - SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); Date aDate = getDate(nVal, pFormatter); rDoc.SetValue(rCol, nRow, 0, aDate.GetMonth()); } @@ -884,25 +833,29 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const break; case DATETIME_TRANSFORMATION_TYPE::MONTH_NAME: { + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); + LanguageType eLanguage = ScGlobal::eLnge; for (SCROW nRow = 0; nRow <= nEndRow; ++nRow) { CellType eType; rDoc.GetCellType(rCol, nRow, 0, eType); if (eType == CELLTYPE_VALUE) { - OUString aMonths[] = {"January", "February", "March", "April", "May", - "June", "July", "August", "September", "October", "November", "December"}; - double nVal = rDoc.GetValue(rCol, nRow, 0); - SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); - Date aDate = getDate(nVal, pFormatter); - rDoc.SetString(rCol, nRow, 0, aMonths[aDate.GetMonth() - 1]); + Color* pColor = nullptr; + OUString aResult; + pFormatter->GetPreviewStringGuess("MMMM", nVal, aResult, &pColor, eLanguage); + rDoc.SetString(rCol, nRow, 0, aResult); } } } break; case DATETIME_TRANSFORMATION_TYPE::START_OF_MONTH: { + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); + SvNumFormatType nFormatType = SvNumFormatType::DATE; + LanguageType eLanguage = ScGlobal::eLnge; + sal_uInt32 nFormat = pFormatter->GetStandardFormat( nFormatType, eLanguage ); for (SCROW nRow = 0; nRow <= nEndRow; ++nRow) { CellType eType; @@ -910,16 +863,11 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const if (eType == CELLTYPE_VALUE) { double nVal = rDoc.GetValue(rCol, nRow, 0); - SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); - SvNumFormatType nFormatType = SvNumFormatType::DATE; - LanguageType eLanguage = ScGlobal::eLnge; ScAddress aAddress(rCol, nRow, 0); - sal_uLong nFormat = pFormatter->GetStandardFormat( nFormatType, eLanguage ); - Date aDate = getDate(nVal, pFormatter); - Date aStart(1,aDate.GetMonth(), aDate.GetYear()); - int nDays = aDate.GetDayOfYear() - aStart.GetDayOfYear() - 1; - rDoc.SetValue(rCol, nRow, 0, nVal - nDays); + aDate.SetDay(1); + nVal = aDate - pFormatter->GetNullDate(); + rDoc.SetValue(rCol, nRow, 0, nVal); rDoc.SetNumberFormat(aAddress, nFormat); } } @@ -927,6 +875,10 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const break; case DATETIME_TRANSFORMATION_TYPE::END_OF_MONTH: { + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); + SvNumFormatType nFormatType = SvNumFormatType::DATE; + LanguageType eLanguage = ScGlobal::eLnge; + sal_uInt32 nFormat = pFormatter->GetStandardFormat( nFormatType, eLanguage ); for (SCROW nRow = 0; nRow <= nEndRow; ++nRow) { CellType eType; @@ -934,17 +886,11 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const if (eType == CELLTYPE_VALUE) { double nVal = rDoc.GetValue(rCol, nRow, 0); - SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); - SvNumFormatType nFormatType = SvNumFormatType::DATE; - LanguageType eLanguage = ScGlobal::eLnge; ScAddress aAddress(rCol, nRow, 0); - sal_uLong nFormat = pFormatter->GetStandardFormat( nFormatType, eLanguage ); - Date aDate = getDate(nVal, pFormatter); - Date aEnd(aDate.GetDaysInMonth(),aDate.GetMonth(), aDate.GetYear()); - - int nDays = aEnd.GetDayOfYear() - aDate.GetDayOfYear() + 1; - rDoc.SetValue(rCol, nRow, 0, nVal + nDays); + aDate.SetDay(aDate.GetDaysInMonth()); + nVal = aDate - pFormatter->GetNullDate(); + rDoc.SetValue(rCol, nRow, 0, nVal); rDoc.SetNumberFormat(aAddress, nFormat); } } @@ -952,6 +898,7 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const break; case DATETIME_TRANSFORMATION_TYPE::DAY: { + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); for (SCROW nRow = 0; nRow <= nEndRow; ++nRow) { CellType eType; @@ -959,7 +906,6 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const if (eType == CELLTYPE_VALUE) { double nVal = rDoc.GetValue(rCol, nRow, 0); - SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); Date aDate = getDate(nVal, pFormatter); rDoc.SetValue(rCol, nRow, 0, aDate.GetDay()); } @@ -968,6 +914,7 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const break; case DATETIME_TRANSFORMATION_TYPE::DAY_OF_WEEK: { + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); for (SCROW nRow = 0; nRow <= nEndRow; ++nRow) { CellType eType; @@ -975,7 +922,6 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const if (eType == CELLTYPE_VALUE) { double nVal = rDoc.GetValue(rCol, nRow, 0); - SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); Date aDate = getDate(nVal, pFormatter); rDoc.SetValue(rCol, nRow, 0, aDate.GetDayOfWeek()); } @@ -984,6 +930,7 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const break; case DATETIME_TRANSFORMATION_TYPE::DAY_OF_YEAR: { + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); for (SCROW nRow = 0; nRow <= nEndRow; ++nRow) { CellType eType; @@ -991,7 +938,6 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const if (eType == CELLTYPE_VALUE) { double nVal = rDoc.GetValue(rCol, nRow, 0); - SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); Date aDate = getDate(nVal, pFormatter); rDoc.SetValue(rCol, nRow, 0, aDate.GetDayOfYear()); } @@ -1000,6 +946,7 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const break; case DATETIME_TRANSFORMATION_TYPE::QUARTER: { + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); for (SCROW nRow = 0; nRow <= nEndRow; ++nRow) { CellType eType; @@ -1007,10 +954,9 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const if (eType == CELLTYPE_VALUE) { double nVal = rDoc.GetValue(rCol, nRow, 0); - SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); Date aDate = getDate(nVal, pFormatter); - int nMonth = 1 + aDate.GetMonth(); + int nMonth = aDate.GetMonth(); if(nMonth >= 1 && nMonth <=3) rDoc.SetValue(rCol, nRow, 0, 1); @@ -1032,6 +978,10 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const break; case DATETIME_TRANSFORMATION_TYPE::START_OF_QUARTER: { + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); + SvNumFormatType nFormatType = SvNumFormatType::DATE; + LanguageType eLanguage = ScGlobal::eLnge; + sal_uInt32 nFormat = pFormatter->GetStandardFormat( nFormatType, eLanguage ); for (SCROW nRow = 0; nRow <= nEndRow; ++nRow) { CellType eType; @@ -1039,44 +989,40 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const if (eType == CELLTYPE_VALUE) { double nVal = rDoc.GetValue(rCol, nRow, 0); - SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); - SvNumFormatType nFormatType = SvNumFormatType::DATE; - LanguageType eLanguage = ScGlobal::eLnge; ScAddress aAddress(rCol, nRow, 0); - sal_uLong nFormat = pFormatter->GetStandardFormat( nFormatType, eLanguage ); Date aDate = getDate(nVal, pFormatter); int nMonth = aDate.GetMonth(); if(nMonth >= 1 && nMonth <=3) { - Date aQuarterDate(1,1,aDate.GetYear()); - int days = aDate.GetDayOfYear() - aQuarterDate.GetDayOfYear() - 1; - nVal -= days; + aDate.SetDay(1); + aDate.SetMonth(1); + nVal = aDate - pFormatter->GetNullDate(); rDoc.SetValue(rCol, nRow, 0, nVal); rDoc.SetNumberFormat(aAddress, nFormat); } else if(nMonth >= 4 && nMonth <=6) { - Date aQuarterDate(1,4,aDate.GetYear()); - int days = aDate.GetDayOfYear() - aQuarterDate.GetDayOfYear() - 1; - nVal -= days; + aDate.SetDay(1); + aDate.SetMonth(4); + nVal = aDate - pFormatter->GetNullDate(); rDoc.SetValue(rCol, nRow, 0, nVal); rDoc.SetNumberFormat(aAddress, nFormat); } else if(nMonth >= 7 && nMonth <=9) { - Date aQuarterDate(1,7,aDate.GetYear()); - int days = aDate.GetDayOfYear() - aQuarterDate.GetDayOfYear() - 1; - nVal -= days; + aDate.SetDay(1); + aDate.SetMonth(7); + nVal = aDate - pFormatter->GetNullDate(); rDoc.SetValue(rCol, nRow, 0, nVal); rDoc.SetNumberFormat(aAddress, nFormat); } else if(nMonth >= 10 && nMonth <=12) { - Date aQuarterDate(1,10,aDate.GetYear()); - int days = aDate.GetDayOfYear() - aQuarterDate.GetDayOfYear() - 1; - nVal -= days; + aDate.SetDay(1); + aDate.SetMonth(10); + nVal = aDate - pFormatter->GetNullDate(); rDoc.SetValue(rCol, nRow, 0, nVal); rDoc.SetNumberFormat(aAddress, nFormat); } @@ -1088,55 +1034,53 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const break; case DATETIME_TRANSFORMATION_TYPE::END_OF_QUARTER: { + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); + SvNumFormatType nFormatType = SvNumFormatType::DATE; + LanguageType eLanguage = ScGlobal::eLnge; + sal_uInt32 nFormat = pFormatter->GetStandardFormat( nFormatType, eLanguage ); for (SCROW nRow = 0; nRow <= nEndRow; ++nRow) { - SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); - SvNumFormatType nFormatType = SvNumFormatType::DATE; - LanguageType eLanguage = ScGlobal::eLnge; ScAddress aAddress(rCol, nRow, 0); - sal_uLong nFormat = pFormatter->GetStandardFormat( nFormatType, eLanguage ); CellType eType; rDoc.GetCellType(rCol, nRow, 0, eType); if (eType == CELLTYPE_VALUE) { double nVal = rDoc.GetValue(rCol, nRow, 0); - nVal = std::trunc(nVal); Date aDate = getDate(nVal, pFormatter); - int nMonth = aDate.GetMonth(); if(nMonth >= 1 && nMonth <=3) { - Date aQuarterDate(31,3,aDate.GetYear()); - int days = aQuarterDate.GetDayOfYear() - aDate.GetDayOfYear() + 1; - nVal += days; + aDate.SetDay(31); + aDate.SetMonth(3); + nVal = aDate - pFormatter->GetNullDate(); rDoc.SetValue(rCol, nRow, 0, nVal); rDoc.SetNumberFormat(aAddress, nFormat); } else if(nMonth >= 4 && nMonth <=6) { - Date aQuarterDate(30,6,aDate.GetYear()); - int days = aQuarterDate.GetDayOfYear() - aDate.GetDayOfYear() + 1; - nVal += days; + aDate.SetDay(30); + aDate.SetMonth(6); + nVal = aDate - pFormatter->GetNullDate(); rDoc.SetValue(rCol, nRow, 0, nVal); rDoc.SetNumberFormat(aAddress, nFormat); } else if(nMonth >= 7 && nMonth <=9) { - Date aQuarterDate(30,9,aDate.GetYear()); - int days = aQuarterDate.GetDayOfYear() - aDate.GetDayOfYear() + 1; - nVal += days; + aDate.SetDay(30); + aDate.SetMonth(9); + nVal = aDate - pFormatter->GetNullDate(); rDoc.SetValue(rCol, nRow, 0, nVal); rDoc.SetNumberFormat(aAddress, nFormat); } else if(nMonth >= 10 && nMonth <=12) { - Date aQuarterDate(31,12,aDate.GetYear()); - int days = aQuarterDate.GetDayOfYear() - aDate.GetDayOfYear() + 1; - nVal += days; + aDate.SetDay(31); + aDate.SetMonth(12); + nVal = aDate - pFormatter->GetNullDate(); rDoc.SetValue(rCol, nRow, 0, nVal); rDoc.SetNumberFormat(aAddress, nFormat); } @@ -1149,14 +1093,18 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const break; case DATETIME_TRANSFORMATION_TYPE::TIME: { + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); + SvNumFormatType nFormatType = SvNumFormatType::TIME; + LanguageType eLanguage = ScGlobal::eLnge; + sal_uInt32 nFormat = pFormatter->GetStandardFormat(nFormatType, eLanguage); for (SCROW nRow = 0; nRow <= nEndRow; ++nRow) { + ScAddress aAddress(rCol, nRow, 0); CellType eType; rDoc.GetCellType(rCol, nRow, 0, eType); if (eType == CELLTYPE_VALUE) { - double nVal = rDoc.GetValue(rCol, nRow, 0); - rDoc.SetString(rCol, nRow, 0, getTimeString(nVal)); + rDoc.SetNumberFormat(aAddress, nFormat); } } } @@ -1170,7 +1118,10 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const if (eType == CELLTYPE_VALUE) { double nVal = rDoc.GetValue(rCol, nRow, 0); - rDoc.SetValue(rCol, nRow, 0, getHour(nVal)); + sal_uInt16 nHour, nMinute, nSecond; + double fFractionOfSecond; + tools::Time::GetClock( nVal, nHour, nMinute, nSecond, fFractionOfSecond, 0); + rDoc.SetValue(rCol, nRow, 0, nHour); } } } @@ -1184,7 +1135,10 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const if (eType == CELLTYPE_VALUE) { double nVal = rDoc.GetValue(rCol, nRow, 0); - rDoc.SetValue(rCol, nRow, 0, getMinute(nVal)); + sal_uInt16 nHour, nMinute, nSecond; + double fFractionOfSecond; + tools::Time::GetClock( nVal, nHour, nMinute, nSecond, fFractionOfSecond, 0); + rDoc.SetValue(rCol, nRow, 0, nMinute); } } } @@ -1198,7 +1152,10 @@ void DateTimeTransformation::Transform(ScDocument& rDoc) const if (eType == CELLTYPE_VALUE) { double nVal = rDoc.GetValue(rCol, nRow, 0); - rDoc.SetValue(rCol, nRow, 0, getSecond(nVal)); + sal_uInt16 nHour, nMinute, nSecond; + double fFractionOfSecond; + tools::Time::GetClock( nVal, nHour, nMinute, nSecond, fFractionOfSecond, 0); + rDoc.SetValue(rCol, nRow, 0, nSecond); } } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits