[Libreoffice-commits] core.git: 5 commits - basic/source i18npool/inc i18npool/source i18npool/util include/unotools offapi/com offapi/UnoApi_offapi.mk svl/qa svl/source unotools/source
Eike Rathke
erack at redhat.com
Mon Jan 26 09:14:08 PST 2015
basic/source/runtime/methods1.cxx | 20
i18npool/inc/calendarImpl.hxx | 14
i18npool/inc/calendar_gregorian.hxx | 4
i18npool/source/calendar/calendarImpl.cxx | 23
i18npool/source/calendar/calendar_gregorian.cxx | 34 +
i18npool/source/registerservices/registerservices.cxx | 3
i18npool/util/i18npool.component | 1
include/unotools/calendarwrapper.hxx | 18
offapi/UnoApi_offapi.mk | 2
offapi/com/sun/star/i18n/LocaleCalendar2.idl | 27
offapi/com/sun/star/i18n/XCalendar.idl | 12
offapi/com/sun/star/i18n/XCalendar4.idl | 57 +
svl/qa/unit/svl.cxx | 561 +++++++++++++++++-
svl/source/numbers/zforfind.cxx | 6
unotools/source/i18n/calendarwrapper.cxx | 47 -
15 files changed, 726 insertions(+), 103 deletions(-)
New commits:
commit 58da9ef3f19643e20b9b22c3a3f0855c62c0d199
Author: Eike Rathke <erack at redhat.com>
Date: Mon Jan 26 17:59:04 2015 +0100
merge existing date input tests to new unit test, tdf#63230
diff --git a/svl/qa/unit/svl.cxx b/svl/qa/unit/svl.cxx
index 4a9a080..76c3f3f 100644
--- a/svl/qa/unit/svl.cxx
+++ b/svl/qa/unit/svl.cxx
@@ -57,7 +57,6 @@ public:
void testSharedString();
void testSharedStringPool();
void testSharedStringPoolPurge();
- void testFdo44286();
void testFdo60915();
void testI116701();
void testDateInput();
@@ -67,7 +66,6 @@ public:
CPPUNIT_TEST(testSharedString);
CPPUNIT_TEST(testSharedStringPool);
CPPUNIT_TEST(testSharedStringPoolPurge);
- CPPUNIT_TEST(testFdo44286);
CPPUNIT_TEST(testFdo60915);
CPPUNIT_TEST(testI116701);
CPPUNIT_TEST(testDateInput);
@@ -407,32 +405,6 @@ void Test::checkPreviewString(SvNumberFormatter& aFormatter,
CPPUNIT_ASSERT_EQUAL(sExpected, sStr);
}
-void Test::testFdo44286()
-{
- LanguageType eLang = LANGUAGE_ENGLISH_US;
- OUString sCode = "YYYY-MM-DD", sExpected;
- double fPreviewNumber;
- SvNumberFormatter aFormatter(m_xContext, eLang);
- {
- icu::TimeZone::adoptDefault(icu::TimeZone::createTimeZone("America/Sao_Paulo"));
- sExpected = "1902-04-22";
- fPreviewNumber = 843;
- checkPreviewString(aFormatter, sCode, fPreviewNumber, eLang, sExpected);
- }
- {
- icu::TimeZone::adoptDefault(icu::TimeZone::createTimeZone("Europe/Berlin"));
- sExpected = "1790-07-27";
- fPreviewNumber = -39967;
- checkPreviewString(aFormatter, sCode, fPreviewNumber, eLang, sExpected);
- }
- {
- icu::TimeZone::adoptDefault(icu::TimeZone::createTimeZone("US/Mountain"));
- sExpected = "1790-07-26";
- fPreviewNumber = -39968;
- checkPreviewString(aFormatter, sCode, fPreviewNumber, eLang, sExpected);
- }
-}
-
void Test::testFdo60915()
{
LanguageType eLang = LANGUAGE_THAI;
@@ -524,6 +496,8 @@ void Test::testDateInput()
"Europe/Tallinn", "1790-03-01", // i#105864
"Australia/Perth", "2004-04-11", // i#17222
"America/Sao_Paulo", "1902-04-22", // tdf#44286
+ "Europe/Berlin", "1790-07-27",
+ "US/Mountain", "1790-07-26",
// Data from https://bugs.documentfoundation.org/show_bug.cgi?id=63230
// https://bugs.documentfoundation.org/attachment.cgi?id=79051
commit ce20ba5d3d6c6a88e0fd469f8bfe07e6decb3b26
Author: Eike Rathke <erack at redhat.com>
Date: Mon Jan 26 17:51:15 2015 +0100
add older problems to unit test, tdf#63230
Check that various older problems remain fixed.
diff --git a/svl/qa/unit/svl.cxx b/svl/qa/unit/svl.cxx
index 21be933..4a9a080 100644
--- a/svl/qa/unit/svl.cxx
+++ b/svl/qa/unit/svl.cxx
@@ -518,9 +518,15 @@ void Test::testI116701()
void Test::testDateInput()
{
- // Data from https://bugs.documentfoundation.org/show_bug.cgi?id=63230
- // attachment https://bugs.documentfoundation.org/attachment.cgi?id=79051
const char* aData[][2] = {
+ "Europe/Paris", "1938-10-07", // i#76623
+ "Europe/Moscow", "1919-07-01", // i#86094
+ "Europe/Tallinn", "1790-03-01", // i#105864
+ "Australia/Perth", "2004-04-11", // i#17222
+ "America/Sao_Paulo", "1902-04-22", // tdf#44286
+
+ // Data from https://bugs.documentfoundation.org/show_bug.cgi?id=63230
+ // https://bugs.documentfoundation.org/attachment.cgi?id=79051
"Africa/Accra", "1800-01-01",
"Africa/Accra", "1800-04-10",
"Africa/Addis_Ababa", "1870-01-01",
commit 9a5f4b3b8374da48369ab71e03fbf7713ef198f9
Author: Eike Rathke <erack at redhat.com>
Date: Mon Jan 26 17:21:57 2015 +0100
add unit test for tdf#63230
All problematic dates of
https://bugs.documentfoundation.org/attachment.cgi?id=79051
Muchas gracias to Isamu Mogi!
diff --git a/svl/qa/unit/svl.cxx b/svl/qa/unit/svl.cxx
index dd856fb..21be933 100644
--- a/svl/qa/unit/svl.cxx
+++ b/svl/qa/unit/svl.cxx
@@ -60,6 +60,7 @@ public:
void testFdo44286();
void testFdo60915();
void testI116701();
+ void testDateInput();
CPPUNIT_TEST_SUITE(Test);
CPPUNIT_TEST(testNumberFormat);
@@ -69,6 +70,7 @@ public:
CPPUNIT_TEST(testFdo44286);
CPPUNIT_TEST(testFdo60915);
CPPUNIT_TEST(testI116701);
+ CPPUNIT_TEST(testDateInput);
CPPUNIT_TEST_SUITE_END();
private:
@@ -78,6 +80,7 @@ private:
double fPreviewNumber,
LanguageType eLang,
OUString& sExpected);
+ void checkDateInput( SvNumberFormatter& rFormatter, const char* pTimezone, const char* pIsoDate );
boost::scoped_ptr<icu::TimeZone> m_pDefaultTimeZone;
};
@@ -513,6 +516,528 @@ void Test::testI116701()
checkPreviewString(aFormatter, sCode, fPreviewNumber, eLang, sExpected);
}
+void Test::testDateInput()
+{
+ // Data from https://bugs.documentfoundation.org/show_bug.cgi?id=63230
+ // attachment https://bugs.documentfoundation.org/attachment.cgi?id=79051
+ const char* aData[][2] = {
+ "Africa/Accra", "1800-01-01",
+ "Africa/Accra", "1800-04-10",
+ "Africa/Addis_Ababa", "1870-01-01",
+ "Africa/Addis_Ababa", "1936-05-05",
+ "Africa/Algiers", "1956-01-29",
+ "Africa/Algiers", "1981-05-01",
+ "Africa/Asmara", "1936-05-05",
+ "Africa/Asmera", "1936-05-05",
+ "Africa/Bujumbura", "1890-01-01",
+ "Africa/Casablanca", "1984-03-16",
+ "Africa/Ceuta", "1984-03-16",
+ "Africa/Dar_es_Salaam", "1931-01-01",
+ "Africa/Dar_es_Salaam", "1961-01-01",
+ "Africa/Djibouti", "1911-07-01",
+ "Africa/Douala", "1912-01-01",
+ "Africa/El_Aaiun", "1934-01-01",
+ "Africa/Freetown", "1913-06-01",
+ "Africa/Gaborone", "1885-01-01",
+ "Africa/Johannesburg", "1903-03-01",
+ "Africa/Kampala", "1928-07-01",
+ "Africa/Kampala", "1948-01-01",
+ "Africa/Kampala", "1957-01-01",
+ "Africa/Lagos", "1919-09-01",
+ "Africa/Libreville", "1912-01-01",
+ "Africa/Luanda", "1911-05-26",
+ "Africa/Lubumbashi", "1897-11-09",
+ "Africa/Lusaka", "1903-03-01",
+ "Africa/Malabo", "1963-12-15",
+ "Africa/Maseru", "1903-03-01",
+ "Africa/Mogadishu", "1957-01-01",
+ "Africa/Monrovia", "1919-03-01",
+ "Africa/Nairobi", "1928-07-01",
+ "Africa/Nairobi", "1940-01-01",
+ "Africa/Nairobi", "1960-01-01",
+ "Africa/Niamey", "1960-01-01",
+ "Africa/Porto-Novo", "1934-02-26",
+ "Africa/Tripoli", "1920-01-01",
+ "Africa/Tripoli", "1959-01-01",
+ "Africa/Tripoli", "1990-05-04",
+ "Africa/Tunis", "1911-03-11",
+ "Africa/Windhoek", "1892-02-08",
+ "Africa/Windhoek", "1903-03-01",
+ "America/Antigua", "1912-03-02",
+ "America/Argentina/Buenos_Aires", "1894-10-31",
+ "America/Argentina/Catamarca", "1991-10-20",
+ "America/Argentina/Catamarca", "2004-06-01",
+ "America/Argentina/ComodRivadavia", "1991-10-20",
+ "America/Argentina/ComodRivadavia", "2004-06-01",
+ "America/Argentina/Cordoba", "1991-10-20",
+ "America/Argentina/Jujuy", "1991-10-06",
+ "America/Argentina/La_Rioja", "2004-06-01",
+ "America/Argentina/Mendoza", "1992-10-18",
+ "America/Argentina/Mendoza", "2004-05-23",
+ "America/Argentina/Rio_Gallegos", "2004-06-01",
+ "America/Argentina/Salta", "1991-10-20",
+ "America/Argentina/San_Juan", "2004-05-31",
+ "America/Argentina/San_Luis", "2004-05-31",
+ "America/Argentina/San_Luis", "2008-01-21",
+ "America/Argentina/Tucuman", "1991-10-20",
+ "America/Argentina/Tucuman", "2004-06-01",
+ "America/Argentina/Ushuaia", "2004-05-30",
+ "America/Asuncion", "1931-10-10",
+ "America/Asuncion", "1974-04-01",
+ "America/Bahia", "1914-01-01",
+ "America/Bahia_Banderas", "1930-11-15",
+ "America/Bahia_Banderas", "1931-10-01",
+ "America/Bahia_Banderas", "1942-04-24",
+ "America/Bahia_Banderas", "1949-01-14",
+ "America/Barbados", "1932-01-01",
+ "America/Belize", "1912-04-01",
+ "America/Blanc-Sablon", "1884-01-01",
+ "America/Bogota", "1914-11-23",
+ "America/Buenos_Aires", "1894-10-31",
+ "America/Cambridge_Bay", "2000-11-05",
+ "America/Campo_Grande", "1914-01-01",
+ "America/Caracas", "1912-02-12",
+ "America/Catamarca", "1991-10-20",
+ "America/Catamarca", "2004-06-01",
+ "America/Cayenne", "1911-07-01",
+ "America/Chihuahua", "1930-11-15",
+ "America/Chihuahua", "1931-10-01",
+ "America/Cordoba", "1991-10-20",
+ "America/Costa_Rica", "1921-01-15",
+ "America/Cuiaba", "1914-01-01",
+ "America/Danmarkshavn", "1916-07-28",
+ "America/Detroit", "1905-01-01",
+ "America/Eirunepe", "1914-01-01",
+ "America/El_Salvador", "1921-01-01",
+ "America/Ensenada", "1924-01-01",
+ "America/Ensenada", "1930-11-15",
+ "America/Fortaleza", "1914-01-01",
+ "America/Glace_Bay", "1902-06-15",
+ "America/Grand_Turk", "1890-01-01",
+ "America/Guyana", "1991-01-01",
+ "America/Havana", "1890-01-01",
+ "America/Hermosillo", "1930-11-15",
+ "America/Hermosillo", "1931-10-01",
+ "America/Hermosillo", "1942-04-24",
+ "America/Hermosillo", "1949-01-14",
+ "America/Jujuy", "1991-10-06",
+ "America/Lima", "1890-01-01",
+ "America/Maceio", "1914-01-01",
+ "America/Managua", "1890-01-01",
+ "America/Managua", "1934-06-23",
+ "America/Managua", "1975-02-16",
+ "America/Managua", "1992-09-24",
+ "America/Managua", "1997-01-01",
+ "America/Mazatlan", "1930-11-15",
+ "America/Mazatlan", "1931-10-01",
+ "America/Mazatlan", "1942-04-24",
+ "America/Mazatlan", "1949-01-14",
+ "America/Mendoza", "1992-10-18",
+ "America/Mendoza", "2004-05-23",
+ "America/Merida", "1982-12-02",
+ "America/Mexico_City", "1930-11-15",
+ "America/Mexico_City", "1931-10-01",
+ "America/Miquelon", "1911-05-15",
+ "America/Moncton", "1883-12-09",
+ "America/Montevideo", "1942-12-14",
+ "America/Montreal", "1884-01-01",
+ "America/Ojinaga", "1930-11-15",
+ "America/Ojinaga", "1931-10-01",
+ "America/Panama", "1890-01-01",
+ "America/Paramaribo", "1911-01-01",
+ "America/Porto_Acre", "1914-01-01",
+ "America/Recife", "1914-01-01",
+ "America/Regina", "1905-09-01",
+ "America/Rio_Branco", "1914-01-01",
+ "America/Rosario", "1991-10-20",
+ "America/Santa_Isabel", "1924-01-01",
+ "America/Santa_Isabel", "1930-11-15",
+ "America/Santarem", "1914-01-01",
+ "America/Santiago", "1910-01-01",
+ "America/Santiago", "1919-07-01",
+ "America/Santo_Domingo", "1890-01-01",
+ "America/Scoresbysund", "1916-07-28",
+ "America/Scoresbysund", "1981-03-29",
+ "America/Tegucigalpa", "1921-04-01",
+ "America/Thunder_Bay", "1895-01-01",
+ "America/Tijuana", "1924-01-01",
+ "America/Tijuana", "1930-11-15",
+ "Antarctica/Casey", "1969-01-01",
+ "Antarctica/Casey", "2009-10-18",
+ "Antarctica/Davis", "1957-01-13",
+ "Antarctica/Davis", "1969-02-01",
+ "Antarctica/Davis", "2010-03-11",
+ "Antarctica/DumontDUrville", "1947-01-01",
+ "Antarctica/DumontDUrville", "1956-11-01",
+ "Antarctica/Macquarie", "1911-01-01",
+ "Antarctica/Mawson", "1954-02-13",
+ "Antarctica/McMurdo", "1956-01-01",
+ "Antarctica/Palmer", "1982-05-01",
+ "Antarctica/South_Pole", "1956-01-01",
+ "Antarctica/Syowa", "1957-01-29",
+ "Antarctica/Vostok", "1957-12-16",
+ "Arctic/Longyearbyen", "1895-01-01",
+ "Asia/Almaty", "1930-06-21",
+ "Asia/Anadyr", "1924-05-02",
+ "Asia/Anadyr", "1930-06-21",
+ "Asia/Anadyr", "1992-01-19",
+ "Asia/Anadyr", "2011-03-27",
+ "Asia/Aqtau", "1924-05-02",
+ "Asia/Aqtau", "1930-06-21",
+ "Asia/Aqtau", "1981-10-01",
+ "Asia/Aqtau", "2005-03-15",
+ "Asia/Aqtobe", "1924-05-02",
+ "Asia/Aqtobe", "1930-06-21",
+ "Asia/Ashgabat", "1924-05-02",
+ "Asia/Ashgabat", "1930-06-21",
+ "Asia/Ashgabat", "1992-01-19",
+ "Asia/Ashkhabad", "1924-05-02",
+ "Asia/Ashkhabad", "1930-06-21",
+ "Asia/Ashkhabad", "1992-01-19",
+ "Asia/Baghdad", "1918-01-01",
+ "Asia/Bahrain", "1920-01-01",
+ "Asia/Baku", "1957-03-01",
+ "Asia/Bangkok", "1920-04-01",
+ "Asia/Bishkek", "1924-05-02",
+ "Asia/Bishkek", "1930-06-21",
+ "Asia/Brunei", "1933-01-01",
+ "Asia/Calcutta", "1941-10-01",
+ "Asia/Choibalsan", "1978-01-01",
+ "Asia/Chongqing", "1980-05-01",
+ "Asia/Chungking", "1980-05-01",
+ "Asia/Colombo", "1880-01-01",
+ "Asia/Colombo", "1906-01-01",
+ "Asia/Colombo", "1996-05-25",
+ "Asia/Dacca", "1941-10-01",
+ "Asia/Dacca", "1942-09-01",
+ "Asia/Dhaka", "1941-10-01",
+ "Asia/Dhaka", "1942-09-01",
+ "Asia/Dili", "2000-09-17",
+ "Asia/Dubai", "1920-01-01",
+ "Asia/Dushanbe", "1924-05-02",
+ "Asia/Dushanbe", "1930-06-21",
+ "Asia/Harbin", "1928-01-01",
+ "Asia/Harbin", "1940-01-01",
+ "Asia/Ho_Chi_Minh", "1912-05-01",
+ "Asia/Hong_Kong", "1904-10-30",
+ "Asia/Hong_Kong", "1941-12-25",
+ "Asia/Hovd", "1978-01-01",
+ "Asia/Irkutsk", "1920-01-25",
+ "Asia/Irkutsk", "1930-06-21",
+ "Asia/Irkutsk", "1992-01-19",
+ "Asia/Irkutsk", "2011-03-27",
+ "Asia/Istanbul", "1880-01-01",
+ "Asia/Istanbul", "1910-10-01",
+ "Asia/Istanbul", "1978-10-15",
+ "Asia/Jakarta", "1932-11-01",
+ "Asia/Jakarta", "1942-03-23",
+ "Asia/Jakarta", "1948-05-01",
+ "Asia/Jayapura", "1944-09-01",
+ "Asia/Kabul", "1945-01-01",
+ "Asia/Kamchatka", "1922-11-10",
+ "Asia/Kamchatka", "1930-06-21",
+ "Asia/Kamchatka", "1992-01-19",
+ "Asia/Kamchatka", "2011-03-27",
+ "Asia/Karachi", "1907-01-01",
+ "Asia/Kashgar", "1928-01-01",
+ "Asia/Kashgar", "1980-05-01",
+ "Asia/Kathmandu", "1986-01-01",
+ "Asia/Katmandu", "1986-01-01",
+ "Asia/Kolkata", "1941-10-01",
+ "Asia/Krasnoyarsk", "1930-06-21",
+ "Asia/Krasnoyarsk", "1992-01-19",
+ "Asia/Krasnoyarsk", "2011-03-27",
+ "Asia/Kuala_Lumpur", "1901-01-01",
+ "Asia/Kuala_Lumpur", "1905-06-01",
+ "Asia/Kuala_Lumpur", "1941-09-01",
+ "Asia/Kuala_Lumpur", "1942-02-16",
+ "Asia/Kuala_Lumpur", "1982-01-01",
+ "Asia/Kuching", "1926-03-01",
+ "Asia/Kuching", "1933-01-01",
+ "Asia/Kuching", "1942-02-16",
+ "Asia/Macao", "1912-01-01",
+ "Asia/Macau", "1912-01-01",
+ "Asia/Magadan", "1930-06-21",
+ "Asia/Magadan", "1992-01-19",
+ "Asia/Magadan", "2011-03-27",
+ "Asia/Makassar", "1932-11-01",
+ "Asia/Makassar", "1942-02-09",
+ "Asia/Manila", "1942-05-01",
+ "Asia/Muscat", "1920-01-01",
+ "Asia/Novokuznetsk", "1920-01-06",
+ "Asia/Novokuznetsk", "1930-06-21",
+ "Asia/Novokuznetsk", "1992-01-19",
+ "Asia/Novokuznetsk", "2011-03-27",
+ "Asia/Novosibirsk", "1930-06-21",
+ "Asia/Novosibirsk", "1992-01-19",
+ "Asia/Novosibirsk", "2011-03-27",
+ "Asia/Omsk", "1919-11-14",
+ "Asia/Omsk", "1930-06-21",
+ "Asia/Omsk", "1992-01-19",
+ "Asia/Omsk", "2011-03-27",
+ "Asia/Oral", "1924-05-02",
+ "Asia/Oral", "1930-06-21",
+ "Asia/Oral", "2005-03-15",
+ "Asia/Phnom_Penh", "1906-06-09",
+ "Asia/Phnom_Penh", "1912-05-01",
+ "Asia/Pontianak", "1932-11-01",
+ "Asia/Pontianak", "1942-01-29",
+ "Asia/Pontianak", "1948-05-01",
+ "Asia/Pontianak", "1964-01-01",
+ "Asia/Pyongyang", "1890-01-01",
+ "Asia/Pyongyang", "1904-12-01",
+ "Asia/Pyongyang", "1932-01-01",
+ "Asia/Pyongyang", "1961-08-10",
+ "Asia/Qatar", "1920-01-01",
+ "Asia/Qyzylorda", "1930-06-21",
+ "Asia/Qyzylorda", "1992-01-19",
+ "Asia/Rangoon", "1920-01-01",
+ "Asia/Rangoon", "1942-05-01",
+ "Asia/Saigon", "1912-05-01",
+ "Asia/Sakhalin", "1945-08-25",
+ "Asia/Sakhalin", "1992-01-19",
+ "Asia/Sakhalin", "2011-03-27",
+ "Asia/Samarkand", "1930-06-21",
+ "Asia/Seoul", "1890-01-01",
+ "Asia/Seoul", "1904-12-01",
+ "Asia/Seoul", "1932-01-01",
+ "Asia/Seoul", "1961-08-10",
+ "Asia/Seoul", "1968-10-01",
+ "Asia/Singapore", "1905-06-01",
+ "Asia/Singapore", "1941-09-01",
+ "Asia/Singapore", "1942-02-16",
+ "Asia/Singapore", "1982-01-01",
+ "Asia/Tashkent", "1924-05-02",
+ "Asia/Tashkent", "1930-06-21",
+ "Asia/Tbilisi", "1924-05-02",
+ "Asia/Tbilisi", "1957-03-01",
+ "Asia/Tbilisi", "2005-03-27",
+ "Asia/Tehran", "1946-01-01",
+ "Asia/Tehran", "1977-11-01",
+ "Asia/Thimbu", "1987-10-01",
+ "Asia/Thimphu", "1987-10-01",
+ "Asia/Ujung_Pandang", "1932-11-01",
+ "Asia/Ujung_Pandang", "1942-02-09",
+ "Asia/Ulaanbaatar", "1978-01-01",
+ "Asia/Ulan_Bator", "1978-01-01",
+ "Asia/Urumqi", "1928-01-01",
+ "Asia/Urumqi", "1980-05-01",
+ "Asia/Vientiane", "1906-06-09",
+ "Asia/Vientiane", "1912-05-01",
+ "Asia/Vladivostok", "1922-11-15",
+ "Asia/Vladivostok", "1930-06-21",
+ "Asia/Vladivostok", "1992-01-19",
+ "Asia/Vladivostok", "2011-03-27",
+ "Asia/Yakutsk", "1930-06-21",
+ "Asia/Yakutsk", "1992-01-19",
+ "Asia/Yakutsk", "2011-03-27",
+ "Asia/Yekaterinburg", "1930-06-21",
+ "Asia/Yekaterinburg", "1992-01-19",
+ "Asia/Yekaterinburg", "2011-03-27",
+ "Asia/Yerevan", "1924-05-02",
+ "Asia/Yerevan", "1957-03-01",
+ "Atlantic/Azores", "1884-01-01",
+ "Atlantic/Azores", "1911-05-24",
+ "Atlantic/Cape_Verde", "1907-01-01",
+ "Atlantic/Jan_Mayen", "1895-01-01",
+ "Atlantic/Reykjavik", "1837-01-01",
+ "Atlantic/Stanley", "1912-03-12",
+ "Australia/Adelaide", "1899-05-01",
+ "Australia/Broken_Hill", "1895-02-01",
+ "Australia/Broken_Hill", "1899-05-01",
+ "Australia/Currie", "1895-09-01",
+ "Australia/Darwin", "1895-02-01",
+ "Australia/Darwin", "1899-05-01",
+ "Australia/Eucla", "1895-12-01",
+ "Australia/Hobart", "1895-09-01",
+ "Australia/LHI", "1981-03-01",
+ "Australia/Lindeman", "1895-01-01",
+ "Australia/Lord_Howe", "1981-03-01",
+ "Australia/Melbourne", "1895-02-01",
+ "Australia/North", "1895-02-01",
+ "Australia/North", "1899-05-01",
+ "Australia/Perth", "1895-12-01",
+ "Australia/South", "1899-05-01",
+ "Australia/Tasmania", "1895-09-01",
+ "Australia/Victoria", "1895-02-01",
+ "Australia/West", "1895-12-01",
+ "Australia/Yancowinna", "1895-02-01",
+ "Australia/Yancowinna", "1899-05-01",
+ "Brazil/Acre", "1914-01-01",
+ "Canada/East-Saskatchewan", "1905-09-01",
+ "Canada/Saskatchewan", "1905-09-01",
+ "Chile/Continental", "1910-01-01",
+ "Chile/Continental", "1919-07-01",
+ "Chile/EasterIsland", "1932-09-01",
+ "Cuba", "1890-01-01",
+ "Eire", "1880-08-02",
+ "Europe/Amsterdam", "1937-07-01",
+ "Europe/Andorra", "1946-09-30",
+ "Europe/Athens", "1916-07-28",
+ "Europe/Athens", "1944-04-04",
+ "Europe/Berlin", "1893-04-01",
+ "Europe/Bratislava", "1891-10-01",
+ "Europe/Brussels", "1914-11-08",
+ "Europe/Bucharest", "1931-07-24",
+ "Europe/Chisinau", "1931-07-24",
+ "Europe/Copenhagen", "1894-01-01",
+ "Europe/Dublin", "1880-08-02",
+ "Europe/Helsinki", "1921-05-01",
+ "Europe/Istanbul", "1880-01-01",
+ "Europe/Istanbul", "1910-10-01",
+ "Europe/Istanbul", "1978-10-15",
+ "Europe/Kaliningrad", "1945-01-01",
+ "Europe/Kaliningrad", "1946-01-01",
+ "Europe/Kaliningrad", "2011-03-27",
+ "Europe/Kiev", "1930-06-21",
+ "Europe/Kiev", "1943-11-06",
+ "Europe/Luxembourg", "1904-06-01",
+ "Europe/Malta", "1893-11-02",
+ "Europe/Mariehamn", "1921-05-01",
+ "Europe/Minsk", "1924-05-02",
+ "Europe/Minsk", "1930-06-21",
+ "Europe/Minsk", "2011-03-27",
+ "Europe/Moscow", "1916-07-03",
+ "Europe/Moscow", "1930-06-21",
+ "Europe/Moscow", "1992-01-19",
+ "Europe/Moscow", "2011-03-27",
+ "Europe/Oslo", "1895-01-01",
+ "Europe/Prague", "1891-10-01",
+ "Europe/Riga", "1926-05-11",
+ "Europe/Riga", "1940-08-05",
+ "Europe/Riga", "1944-10-13",
+ "Europe/Rome", "1893-11-01",
+ "Europe/Samara", "1930-06-21",
+ "Europe/Samara", "1991-10-20",
+ "Europe/Samara", "2011-03-27",
+ "Europe/San_Marino", "1893-11-01",
+ "Europe/Simferopol", "1930-06-21",
+ "Europe/Simferopol", "1994-05-01",
+ "Europe/Sofia", "1880-01-01",
+ "Europe/Sofia", "1894-11-30",
+ "Europe/Tallinn", "1919-07-01",
+ "Europe/Tallinn", "1921-05-01",
+ "Europe/Tallinn", "1940-08-06",
+ "Europe/Tiraspol", "1931-07-24",
+ "Europe/Uzhgorod", "1945-06-29",
+ "Europe/Vaduz", "1894-06-01",
+ "Europe/Vatican", "1893-11-01",
+ "Europe/Vilnius", "1917-01-01",
+ "Europe/Vilnius", "1920-07-12",
+ "Europe/Vilnius", "1940-08-03",
+ "Europe/Volgograd", "1920-01-03",
+ "Europe/Volgograd", "1930-06-21",
+ "Europe/Volgograd", "1991-03-31",
+ "Europe/Volgograd", "2011-03-27",
+ "Europe/Zaporozhye", "1930-06-21",
+ "Europe/Zaporozhye", "1943-10-25",
+ "Europe/Zurich", "1894-06-01",
+ "Hongkong", "1904-10-30",
+ "Hongkong", "1941-12-25",
+ "Iceland", "1837-01-01",
+ "Indian/Chagos", "1907-01-01",
+ "Indian/Chagos", "1996-01-01",
+ "Indian/Cocos", "1900-01-01",
+ "Indian/Comoro", "1911-07-01",
+ "Indian/Kerguelen", "1950-01-01",
+ "Indian/Mahe", "1906-06-01",
+ "Indian/Maldives", "1960-01-01",
+ "Indian/Mauritius", "1907-01-01",
+ "Indian/Reunion", "1911-06-01",
+ "Iran", "1946-01-01",
+ "Iran", "1977-11-01",
+ "Libya", "1920-01-01",
+ "Libya", "1959-01-01",
+ "Libya", "1990-05-04",
+ "Mexico/BajaNorte", "1924-01-01",
+ "Mexico/BajaNorte", "1930-11-15",
+ "Mexico/BajaSur", "1930-11-15",
+ "Mexico/BajaSur", "1931-10-01",
+ "Mexico/BajaSur", "1942-04-24",
+ "Mexico/BajaSur", "1949-01-14",
+ "Mexico/General", "1930-11-15",
+ "Mexico/General", "1931-10-01",
+ "NZ-CHAT", "1957-01-01",
+ "Pacific/Apia", "1911-01-01",
+ "Pacific/Chatham", "1957-01-01",
+ "Pacific/Easter", "1932-09-01",
+ "Pacific/Enderbury", "1901-01-01",
+ "Pacific/Fiji", "1915-10-26",
+ "Pacific/Funafuti", "1901-01-01",
+ "Pacific/Galapagos", "1986-01-01",
+ "Pacific/Gambier", "1912-10-01",
+ "Pacific/Guadalcanal", "1912-10-01",
+ "Pacific/Guam", "1901-01-01",
+ "Pacific/Kiritimati", "1901-01-01",
+ "Pacific/Kosrae", "1901-01-01",
+ "Pacific/Kosrae", "1969-10-01",
+ "Pacific/Majuro", "1969-10-01",
+ "Pacific/Marquesas", "1912-10-01",
+ "Pacific/Nauru", "1921-01-15",
+ "Pacific/Nauru", "1944-08-15",
+ "Pacific/Nauru", "1979-05-01",
+ "Pacific/Niue", "1901-01-01",
+ "Pacific/Niue", "1951-01-01",
+ "Pacific/Norfolk", "1901-01-01",
+ "Pacific/Norfolk", "1951-01-01",
+ "Pacific/Pago_Pago", "1911-01-01",
+ "Pacific/Palau", "1901-01-01",
+ "Pacific/Pohnpei", "1901-01-01",
+ "Pacific/Ponape", "1901-01-01",
+ "Pacific/Port_Moresby", "1895-01-01",
+ "Pacific/Rarotonga", "1978-11-12",
+ "Pacific/Saipan", "1969-10-01",
+ "Pacific/Samoa", "1911-01-01",
+ "Pacific/Tahiti", "1912-10-01",
+ "Pacific/Tarawa", "1901-01-01",
+ "Pacific/Tongatapu", "1901-01-01",
+ "Pacific/Tongatapu", "1941-01-01",
+ "Pacific/Wake", "1901-01-01",
+ "ROK", "1890-01-01",
+ "ROK", "1904-12-01",
+ "ROK", "1932-01-01",
+ "ROK", "1961-08-10",
+ "ROK", "1968-10-01",
+ "Singapore", "1905-06-01",
+ "Singapore", "1941-09-01",
+ "Singapore", "1942-02-16",
+ "Singapore", "1982-01-01",
+ "Turkey", "1880-01-01",
+ "Turkey", "1910-10-01",
+ "Turkey", "1978-10-15",
+ "US/Michigan", "1905-01-01",
+ "US/Samoa", "1911-01-01",
+ "W-SU", "1916-07-03",
+ "W-SU", "1930-06-21",
+ "W-SU", "1992-01-19",
+ "W-SU", "2011-03-27"
+ };
+
+ LanguageType eLang = LANGUAGE_ENGLISH_US;
+ SvNumberFormatter aFormatter(m_xContext, eLang);
+
+ for (size_t i=0; i < SAL_N_ELEMENTS(aData); ++i)
+ {
+ checkDateInput( aFormatter, aData[i][0], aData[i][1]);
+ }
+}
+
+void Test::checkDateInput( SvNumberFormatter& rFormatter, const char* pTimezone, const char* pIsoDate )
+{
+ icu::TimeZone::adoptDefault( icu::TimeZone::createTimeZone( pTimezone));
+ OUString aDate( OUString::createFromAscii(pIsoDate));
+ sal_uInt32 nIndex = 0;
+ double fVal = 0.0;
+ bool bVal = rFormatter.IsNumberFormat( aDate, nIndex, fVal);
+ CPPUNIT_ASSERT_MESSAGE("Date not recognized.", bVal);
+ CPPUNIT_ASSERT_MESSAGE("Format parsed is not date.",
+ ((rFormatter.GetType(nIndex) & NUMBERFORMAT_DATE) == NUMBERFORMAT_DATE));
+ OUString aOutString;
+ Color *pColor;
+ rFormatter.GetOutputString( fVal, nIndex, aOutString, &pColor);
+ CPPUNIT_ASSERT_EQUAL( aDate, aOutString);
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
}
commit c72cd80f4503f54f6c79cdc1ab03b0654663f488
Author: Eike Rathke <erack at redhat.com>
Date: Sat Jan 24 02:15:44 2015 +0100
use XCalendar4 local date/time in CalendarWrapper, tdf#63230
Replaces the three-step timezone+DST correction. Hopefully ICU does take these
into account, but this needs to be double-rechecked and if necessary
correction be implemented at XCalendar4::setLocalDateTime()
See also
http://userguide.icu-project.org/datetime/calendar#TOC-Ambiguous-Wall-Clock-Time-Resolution
Interpreting as standard time for non-existing times sounds like what we need
and covers the dreaded "00:00-01:00 doesn't exist" case that decremented the
day and was fixed here with the now removed workaround.
diff --git a/unotools/source/i18n/calendarwrapper.cxx b/unotools/source/i18n/calendarwrapper.cxx
index 6d082f2..27c1b47 100644
--- a/unotools/source/i18n/calendarwrapper.cxx
+++ b/unotools/source/i18n/calendarwrapper.cxx
@@ -165,42 +165,7 @@ void CalendarWrapper::setLocalDateTime( double fTimeInDays )
{
if ( xC.is() )
{
- // First set a nearby value to obtain the timezone and DST offset.
- // This is necessary to let ICU choose the corresponding
- // OlsonTimeZone transitions. Since ICU incorporates also
- // historical data even the timezone may differ for different
- // dates! (Which was the cause for #i76623# when the timezone of a
- // previously set date was used.) Timezone may also include
- // seconds, so use milliseconds field as well.
- xC->setDateTime( fTimeInDays );
- sal_Int32 nZone1 = getZoneOffsetInMillis();
- sal_Int32 nDST1 = getDSTOffsetInMillis();
- double fLoc = fTimeInDays - (double)(nZone1 + nDST1) / MILLISECONDS_PER_DAY;
- xC->setDateTime( fLoc );
- sal_Int32 nZone2 = getZoneOffsetInMillis();
- sal_Int32 nDST2 = getDSTOffsetInMillis();
- // If DSTs differ after calculation, we crossed boundaries. Do it
- // again, this time using the DST corrected initial value for the
- // real local time.
- // See also localtime/gmtime conversion pitfalls at
- // http://www.erack.de/download/timetest.c
- if ( nDST1 != nDST2 )
- {
- fLoc = fTimeInDays - (double)(nZone2 + nDST2) / MILLISECONDS_PER_DAY;
- xC->setDateTime( fLoc );
- // #i17222# If the DST onset rule says to switch from 00:00 to
- // 01:00 and we tried to set onsetDay 00:00 with DST, the
- // result was onsetDay-1 23:00 and no DST, which is not what we
- // want. So once again without DST, resulting in onsetDay
- // 01:00 and DST. Yes, this seems to be weird, but logically
- // correct.
- sal_Int32 nDST3 = getDSTOffsetInMillis();
- if ( nDST2 != nDST3 && !nDST3 )
- {
- fLoc = fTimeInDays - (double)(nZone2 + nDST3) / MILLISECONDS_PER_DAY;
- xC->setDateTime( fLoc );
- }
- }
+ xC->setLocalDateTime( fTimeInDays );
}
}
catch (const Exception& e)
@@ -215,11 +180,7 @@ double CalendarWrapper::getLocalDateTime() const
{
if ( xC.is() )
{
- double fTimeInDays = xC->getDateTime();
- sal_Int32 nZone = getZoneOffsetInMillis();
- sal_Int32 nDST = getDSTOffsetInMillis();
- fTimeInDays += (double)(nZone + nDST) / MILLISECONDS_PER_DAY;
- return fTimeInDays;
+ return xC->getLocalDateTime();
}
}
catch (const Exception& e)
commit cd528c3099ffec4f34565820b923d6385478e44b
Author: Eike Rathke <erack at redhat.com>
Date: Fri Jan 23 23:10:41 2015 +0100
implement css::i18n::XCalendar4 and LocaleCalendar2 service, tdf#63230
Implementation only, new local date/time routines not used yet from the
outside in this step.
diff --git a/basic/source/runtime/methods1.cxx b/basic/source/runtime/methods1.cxx
index 3877ca6..11c8bd6 100644
--- a/basic/source/runtime/methods1.cxx
+++ b/basic/source/runtime/methods1.cxx
@@ -57,7 +57,7 @@
#include <com/sun/star/uno/Sequence.hxx>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/i18n/LocaleCalendar.hpp>
+#include <com/sun/star/i18n/LocaleCalendar2.hpp>
#include <com/sun/star/sheet/XFunctionAccess.hpp>
#include <boost/scoped_array.hpp>
@@ -67,13 +67,13 @@ using namespace com::sun::star::lang;
using namespace com::sun::star::sheet;
using namespace com::sun::star::uno;
-static Reference< XCalendar3 > getLocaleCalendar( void )
+static Reference< XCalendar4 > getLocaleCalendar( void )
{
- static Reference< XCalendar3 > xCalendar;
+ static Reference< XCalendar4 > xCalendar;
if( !xCalendar.is() )
{
Reference< XComponentContext > xContext = getProcessComponentContext();
- xCalendar = LocaleCalendar::create(xContext);
+ xCalendar = LocaleCalendar2::create(xContext);
}
static com::sun::star::lang::Locale aLastLocale;
@@ -1857,7 +1857,7 @@ RTLFUNC(MonthName)
return;
}
- Reference< XCalendar3 > xCalendar = getLocaleCalendar();
+ Reference< XCalendar4 > xCalendar = getLocaleCalendar();
if( !xCalendar.is() )
{
StarBASIC::Error( SbERR_INTERNAL_ERROR );
@@ -1897,7 +1897,7 @@ RTLFUNC(WeekdayName)
return;
}
- Reference< XCalendar3 > xCalendar = getLocaleCalendar();
+ Reference< XCalendar4 > xCalendar = getLocaleCalendar();
if( !xCalendar.is() )
{
StarBASIC::Error( SbERR_INTERNAL_ERROR );
@@ -2246,7 +2246,7 @@ RTLFUNC(DateDiff)
}
if( nFirstDay == 0 )
{
- Reference< XCalendar3 > xCalendar = getLocaleCalendar();
+ Reference< XCalendar4 > xCalendar = getLocaleCalendar();
if( !xCalendar.is() )
{
StarBASIC::Error( SbERR_INTERNAL_ERROR );
@@ -2304,7 +2304,7 @@ double implGetDateOfFirstDayInFirstWeek
if( nFirstWeek < 0 || nFirstWeek > 3 )
nError = SbERR_BAD_ARGUMENT;
- Reference< XCalendar3 > xCalendar;
+ Reference< XCalendar4 > xCalendar;
if( nFirstDay == 0 || nFirstWeek == 0 )
{
xCalendar = getLocaleCalendar();
@@ -2505,7 +2505,7 @@ RTLFUNC(FormatDateTime)
}
}
- Reference< XCalendar3 > xCalendar = getLocaleCalendar();
+ Reference< XCalendar4 > xCalendar = getLocaleCalendar();
if( !xCalendar.is() )
{
StarBASIC::Error( SbERR_INTERNAL_ERROR );
@@ -3329,7 +3329,7 @@ sal_Int16 implGetWeekDay( double aDate, bool bFirstDayParam, sal_Int16 nFirstDay
}
if( nFirstDay == 0 )
{
- Reference< XCalendar3 > xCalendar = getLocaleCalendar();
+ Reference< XCalendar4 > xCalendar = getLocaleCalendar();
if( !xCalendar.is() )
{
#if HAVE_FEATURE_SCRIPTING
diff --git a/i18npool/inc/calendarImpl.hxx b/i18npool/inc/calendarImpl.hxx
index 7ec10de..0f67c1e 100644
--- a/i18npool/inc/calendarImpl.hxx
+++ b/i18npool/inc/calendarImpl.hxx
@@ -19,7 +19,7 @@
#ifndef INCLUDED_I18NPOOL_INC_CALENDARIMPL_HXX
#define INCLUDED_I18NPOOL_INC_CALENDARIMPL_HXX
-#include <com/sun/star/i18n/XCalendar3.hpp>
+#include <com/sun/star/i18n/XCalendar4.hpp>
#include <com/sun/star/i18n/CalendarDisplayCode.hpp>
#include <com/sun/star/i18n/CalendarFieldIndex.hpp>
#include <com/sun/star/i18n/CalendarDisplayIndex.hpp>
@@ -36,7 +36,7 @@ namespace com { namespace sun { namespace star { namespace i18n {
class CalendarImpl : public cppu::WeakImplHelper2
<
- com::sun::star::i18n::XCalendar3,
+ com::sun::star::i18n::XCalendar4,
com::sun::star::lang::XServiceInfo
>
{
@@ -84,6 +84,10 @@ public:
virtual com::sun::star::uno::Sequence < CalendarItem2 > SAL_CALL getGenitiveMonths2() throw(com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
virtual com::sun::star::uno::Sequence < CalendarItem2 > SAL_CALL getPartitiveMonths2() throw(com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+ // XCalendar4
+ virtual void SAL_CALL setLocalDateTime(double TimeInDays) throw(com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+ virtual double SAL_CALL getLocalDateTime() throw(com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
//XServiceInfo
virtual OUString SAL_CALL getImplementationName() throw(com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw(com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
@@ -91,14 +95,14 @@ public:
private:
struct lookupTableItem {
- lookupTableItem(const OUString& _uniqueID, com::sun::star::uno::Reference < com::sun::star::i18n::XCalendar3 >& _xCalendar) :
+ lookupTableItem(const OUString& _uniqueID, com::sun::star::uno::Reference < com::sun::star::i18n::XCalendar4 >& _xCalendar) :
uniqueID(_uniqueID), xCalendar(_xCalendar) {}
OUString uniqueID;
- com::sun::star::uno::Reference < com::sun::star::i18n::XCalendar3 > xCalendar;
+ com::sun::star::uno::Reference < com::sun::star::i18n::XCalendar4 > xCalendar;
};
std::vector<lookupTableItem*> lookupTable;
com::sun::star::uno::Reference < com::sun::star::uno::XComponentContext > m_xContext;
- com::sun::star::uno::Reference < com::sun::star::i18n::XCalendar3 > xCalendar;
+ com::sun::star::uno::Reference < com::sun::star::i18n::XCalendar4 > xCalendar;
};
} } } }
diff --git a/i18npool/inc/calendar_gregorian.hxx b/i18npool/inc/calendar_gregorian.hxx
index ea06b00..f270779 100644
--- a/i18npool/inc/calendar_gregorian.hxx
+++ b/i18npool/inc/calendar_gregorian.hxx
@@ -85,6 +85,10 @@ public:
virtual com::sun::star::uno::Sequence < CalendarItem2 > SAL_CALL getGenitiveMonths2() throw(com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
virtual com::sun::star::uno::Sequence < CalendarItem2 > SAL_CALL getPartitiveMonths2() throw(com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+ // XCalendar4
+ virtual void SAL_CALL setLocalDateTime(double TimeInDays) throw(com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+ virtual double SAL_CALL getLocalDateTime() throw(com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
//XServiceInfo
virtual OUString SAL_CALL getImplementationName() throw(com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw(com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
diff --git a/i18npool/source/calendar/calendarImpl.cxx b/i18npool/source/calendar/calendarImpl.cxx
index 4780ce6..68cf9c2 100644
--- a/i18npool/source/calendar/calendarImpl.cxx
+++ b/i18npool/source/calendar/calendarImpl.cxx
@@ -57,7 +57,7 @@ CalendarImpl::loadDefaultCalendar( const Locale& rLocale ) throw(RuntimeExceptio
void SAL_CALL
CalendarImpl::loadCalendar(const OUString& uniqueID, const Locale& rLocale ) throw (RuntimeException, std::exception)
{
- Reference < XCalendar3 > xOldCalendar( xCalendar ); // backup
+ Reference < XCalendar4 > xOldCalendar( xCalendar ); // backup
sal_Int32 i;
for (i = 0; i < sal::static_int_cast<sal_Int32>(lookupTable.size()); i++) {
@@ -155,6 +155,24 @@ CalendarImpl::getDateTime() throw(RuntimeException, std::exception)
throw ERROR ;
}
+void SAL_CALL
+CalendarImpl::setLocalDateTime( double fTimeInDays ) throw(RuntimeException, std::exception)
+{
+ if (xCalendar.is())
+ xCalendar->setLocalDateTime( fTimeInDays );
+ else
+ throw ERROR ;
+}
+
+double SAL_CALL
+CalendarImpl::getLocalDateTime() throw(RuntimeException, std::exception)
+{
+ if (xCalendar.is())
+ return xCalendar->getLocalDateTime();
+ else
+ throw ERROR ;
+}
+
OUString SAL_CALL
CalendarImpl::getUniqueID() throw(RuntimeException, std::exception)
{
@@ -352,8 +370,9 @@ CalendarImpl::supportsService(const OUString& rServiceName) throw( RuntimeExcept
Sequence< OUString > SAL_CALL
CalendarImpl::getSupportedServiceNames(void) throw( RuntimeException, std::exception )
{
- Sequence< OUString > aRet(1);
+ Sequence< OUString > aRet(2);
aRet[0] = "com.sun.star.i18n.LocaleCalendar";
+ aRet[1] = "com.sun.star.i18n.LocaleCalendar2";
return aRet;
}
diff --git a/i18npool/source/calendar/calendar_gregorian.cxx b/i18npool/source/calendar/calendar_gregorian.cxx
index a634c52..d2f513c 100644
--- a/i18npool/source/calendar/calendar_gregorian.cxx
+++ b/i18npool/source/calendar/calendar_gregorian.cxx
@@ -317,6 +317,40 @@ Calendar_gregorian::getDateTime() throw(RuntimeException, std::exception)
return fR / U_MILLIS_PER_DAY;
}
+void SAL_CALL
+Calendar_gregorian::setLocalDateTime( double fTimeInDays ) throw(RuntimeException, std::exception)
+{
+ // See setDateTime() for why the rounding.
+ double fM = fTimeInDays * U_MILLIS_PER_DAY;
+ double fR = rtl::math::round( fM );
+ SAL_INFO_IF( fM != fR, "i18npool",
+ "Calendar_gregorian::setLocalDateTime: " << std::fixed << fM << " rounded to " << fR);
+ int32_t nZoneOffset, nDSTOffset;
+ UErrorCode status;
+ body->getTimeZone().getOffset( fR, TRUE, nZoneOffset, nDSTOffset, status = U_ZERO_ERROR );
+ if ( !U_SUCCESS(status) ) throw ERROR;
+ body->setTime( fR - (nZoneOffset + nDSTOffset), status = U_ZERO_ERROR );
+ if ( !U_SUCCESS(status) ) throw ERROR;
+ getValue();
+}
+
+double SAL_CALL
+Calendar_gregorian::getLocalDateTime() throw(RuntimeException, std::exception)
+{
+ if (fieldSet) {
+ setValue();
+ getValue();
+ }
+ UErrorCode status;
+ double fTime = body->getTime( status = U_ZERO_ERROR );
+ if ( !U_SUCCESS(status) ) throw ERROR;
+ int32_t nZoneOffset = body->get( UCAL_ZONE_OFFSET, status = U_ZERO_ERROR );
+ if ( !U_SUCCESS(status) ) throw ERROR;
+ int32_t nDSTOffset = body->get( UCAL_DST_OFFSET, status = U_ZERO_ERROR );
+ if ( !U_SUCCESS(status) ) throw ERROR;
+ return (fTime + (nZoneOffset + nDSTOffset)) / U_MILLIS_PER_DAY;
+}
+
// map field value from gregorian calendar to other calendar, it can be overwritten by derived class.
// By using eraArray, it can take care Japanese and Taiwan ROC calendar.
void Calendar_gregorian::mapFromGregorian() throw(RuntimeException)
diff --git a/i18npool/source/registerservices/registerservices.cxx b/i18npool/source/registerservices/registerservices.cxx
index 634c711..a38e969 100644
--- a/i18npool/source/registerservices/registerservices.cxx
+++ b/i18npool/source/registerservices/registerservices.cxx
@@ -288,6 +288,9 @@ static const struct InstancesArray {
{ "com.sun.star.i18n.LocaleCalendar",
"com.sun.star.i18n.CalendarImpl",
&CalendarImpl_CreateInstance },
+ { "com.sun.star.i18n.LocaleCalendar2",
+ "com.sun.star.i18n.CalendarImpl",
+ &CalendarImpl_CreateInstance },
{ "com.sun.star.i18n.Calendar_gregorian",
"com.sun.star.i18n.Calendar_gregorian",
&Calendar_gregorian_CreateInstance },
diff --git a/i18npool/util/i18npool.component b/i18npool/util/i18npool.component
index 9617a8b..1b74fd7 100644
--- a/i18npool/util/i18npool.component
+++ b/i18npool/util/i18npool.component
@@ -44,6 +44,7 @@
</implementation>
<implementation name="com.sun.star.i18n.CalendarImpl">
<service name="com.sun.star.i18n.LocaleCalendar"/>
+ <service name="com.sun.star.i18n.LocaleCalendar2"/>
</implementation>
<implementation name="com.sun.star.i18n.Calendar_ROC">
<service name="com.sun.star.i18n.Calendar_ROC"/>
diff --git a/include/unotools/calendarwrapper.hxx b/include/unotools/calendarwrapper.hxx
index a03f906..de7443b 100644
--- a/include/unotools/calendarwrapper.hxx
+++ b/include/unotools/calendarwrapper.hxx
@@ -35,13 +35,13 @@ namespace com { namespace sun { namespace star {
namespace com { namespace sun { namespace star {
namespace i18n {
- class XCalendar3;
+ class XCalendar4;
}
}}}
class UNOTOOLS_DLLPUBLIC CalendarWrapper
{
- ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XCalendar3 > xC;
+ ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XCalendar4 > xC;
DateTime aEpochStart; // 1Jan1970
@@ -61,10 +61,9 @@ public:
void setDateTime( double fTimeInDays );
/// get UTC date/time
double getDateTime() const;
- /// convenience method to set local date/time
- void setLocalDateTime( double fTimeInDays );
- /// convenience method to get local date/time
- double getLocalDateTime() const;
+
+ // For local setDateTime() and getDateTime() see further down at wrapper
+ // implementations of XCalendar4.
// wrapper implementations of XCalendar
@@ -96,6 +95,13 @@ public:
::com::sun::star::uno::Sequence< ::com::sun::star::i18n::CalendarItem2 > getGenitiveMonths() const;
::com::sun::star::uno::Sequence< ::com::sun::star::i18n::CalendarItem2 > getPartitiveMonths() const;
+ // wrapper implementations of XCalendar4
+
+ /// set local date/time
+ void setLocalDateTime( double fTimeInDays );
+ /// get local date/time
+ double getLocalDateTime() const;
+
// convenience methods
/// get epoch start (should be 01Jan1970)
diff --git a/offapi/UnoApi_offapi.mk b/offapi/UnoApi_offapi.mk
index 0028b46..63f242c 100644
--- a/offapi/UnoApi_offapi.mk
+++ b/offapi/UnoApi_offapi.mk
@@ -224,6 +224,7 @@ $(eval $(call gb_UnoApi_add_idlfiles_nohdl,offapi,com/sun/star/i18n,\
IndexEntrySupplier \
InputSequenceChecker \
LocaleCalendar \
+ LocaleCalendar2 \
LocaleData \
NativeNumberSupplier \
NumberFormatMapper \
@@ -2752,6 +2753,7 @@ $(eval $(call gb_UnoApi_add_idlfiles,offapi,com/sun/star/i18n,\
XBreakIterator \
XCalendar \
XCalendar3 \
+ XCalendar4 \
XCharacterClassification \
XCollator \
XExtendedCalendar \
diff --git a/offapi/com/sun/star/i18n/LocaleCalendar2.idl b/offapi/com/sun/star/i18n/LocaleCalendar2.idl
new file mode 100644
index 0000000..fd878af
--- /dev/null
+++ b/offapi/com/sun/star/i18n/LocaleCalendar2.idl
@@ -0,0 +1,27 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef __com_sun_star_i18n_LocaleCalendar2_idl__
+#define __com_sun_star_i18n_LocaleCalendar2_idl__
+
+#include <com/sun/star/i18n/XCalendar4.idl>
+
+module com { module sun { module star { module i18n {
+
+/** Access a locale specific calendar.
+
+ @since LibreOffice 4.5
+ */
+published service LocaleCalendar2 : XCalendar4;
+
+}; }; }; };
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/offapi/com/sun/star/i18n/XCalendar.idl b/offapi/com/sun/star/i18n/XCalendar.idl
index 4dd5dda..fd89a52 100644
--- a/offapi/com/sun/star/i18n/XCalendar.idl
+++ b/offapi/com/sun/star/i18n/XCalendar.idl
@@ -53,17 +53,17 @@ published interface XCalendar : com::sun::star::uno::XInterface
string getUniqueID();
/**
- Set the date/time as an offset to the start of the calendar at
- 1-Jan-1970 00:00. The integer part represents the number of days
- passed since start date. The fractional part represents
+ Set the UTC date/time as an offset to the start of the calendar
+ at 1-Jan-1970 00:00. The integer part represents the number of
+ days passed since start date. The fractional part represents
fractions of a day, thus 0.5 means 12 hours.
*/
void setDateTime( [in] double nTimeInDays );
/**
- Get the date/time as an offset to the start of the calendar at
- 1-Jan-1970 00:00. The integer part represents the number of days
- passed since start date. The fractional part represents
+ Get the UTC date/time as an offset to the start of the calendar
+ at 1-Jan-1970 00:00. The integer part represents the number of
+ days passed since start date. The fractional part represents
fractions of a day, thus 0.5 means 12 hours.
*/
double getDateTime();
diff --git a/offapi/com/sun/star/i18n/XCalendar4.idl b/offapi/com/sun/star/i18n/XCalendar4.idl
new file mode 100644
index 0000000..4a1cffa
--- /dev/null
+++ b/offapi/com/sun/star/i18n/XCalendar4.idl
@@ -0,0 +1,57 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef __com_sun_star_i18n_XCalendar4_idl__
+#define __com_sun_star_i18n_XCalendar4_idl__
+
+#include <com/sun/star/i18n/Calendar3.idl>
+
+
+module com { module sun { module star { module i18n {
+
+
+
+/** This interface provides access to locale specific calendar
+ systems.
+
+ <p> It is derived from ::com::sun::star::i18n::XCalendar3 and
+ provides additional methods to set and get the local time. </p>
+
+ @since LibreOffice 4.5
+ */
+published interface XCalendar4 : com::sun::star::i18n::XCalendar3
+{
+ /** Set the local date/time as an offset to the start of the
+ calendar at 1-Jan-1970 00:00. The integer part represents the
+ number of days passed since start date. The fractional part
+ represents fractions of a day, thus 0.5 means 12 hours.
+
+ The actual timezone and daylight saving time offsets effective
+ at the given date and time are considered and subtracted before
+ setting the UTC time at the calendar.
+ */
+ void setLocalDateTime( [in] double TimeInDays );
+
+ /** Get the local date/time as an offset to the start of the
+ calendar at 1-Jan-1970 00:00. The integer part represents the
+ number of days passed since start date. The fractional part
+ represents fractions of a day, thus 0.5 means 12 hours.
+
+ The actual timezone and daylight saving time offsets effective
+ at the given date and time are considered and added to the UTC
+ time at the calendar.
+ */
+ double getLocalDateTime();
+
+};
+
+}; }; }; };
+
+#endif
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svl/source/numbers/zforfind.cxx b/svl/source/numbers/zforfind.cxx
index 4e1f3cd..9449874 100644
--- a/svl/source/numbers/zforfind.cxx
+++ b/svl/source/numbers/zforfind.cxx
@@ -28,7 +28,7 @@
#include <unotools/calendarwrapper.hxx>
#include <unotools/localedatawrapper.hxx>
#include <com/sun/star/i18n/CalendarFieldIndex.hpp>
-#include <com/sun/star/i18n/LocaleCalendar.hpp>
+#include <com/sun/star/i18n/LocaleCalendar2.hpp>
#include <unotools/digitgroupingiterator.hxx>
#include <svl/zforlist.hxx>
@@ -44,7 +44,7 @@
#endif
#if NF_TEST_CALENDAR
#include <comphelper/processfactory.hxx>
-#include <com/sun/star/i18n/XCalendar3.hpp>
+#include <com/sun/star/i18n/XCalendar4.hpp>
#endif
@@ -1974,7 +1974,7 @@ input for the following reasons:
sal_Int32 nZoneInMillis, nDST1InMillis, nDST2InMillis;
uno::Reference< uno::XComponentContext > xContext =
::comphelper::getProcessComponentContext();
- uno::Reference< i18n::XCalendar3 > xCal = i18n::LocaleCalendar::create(xContext);
+ uno::Reference< i18n::XCalendar4 > xCal = i18n::LocaleCalendar2::create(xContext);
for ( const entry* p = cals; p->lan; ++p )
{
aLocale.Language = OUString::createFromAscii( p->lan );
diff --git a/unotools/source/i18n/calendarwrapper.cxx b/unotools/source/i18n/calendarwrapper.cxx
index c39f5f7..6d082f2 100644
--- a/unotools/source/i18n/calendarwrapper.cxx
+++ b/unotools/source/i18n/calendarwrapper.cxx
@@ -20,7 +20,7 @@
#include <rtl/strbuf.hxx>
#include <unotools/calendarwrapper.hxx>
#include <com/sun/star/i18n/CalendarFieldIndex.hpp>
-#include <com/sun/star/i18n/LocaleCalendar.hpp>
+#include <com/sun/star/i18n/LocaleCalendar2.hpp>
using namespace ::com::sun::star;
using namespace ::com::sun::star::i18n;
@@ -34,7 +34,7 @@ CalendarWrapper::CalendarWrapper(
:
aEpochStart( Date( 1, 1, 1970 ) )
{
- xC = LocaleCalendar::create(rxContext);
+ xC = LocaleCalendar2::create(rxContext);
}
CalendarWrapper::~CalendarWrapper()
More information about the Libreoffice-commits
mailing list