| Index: source/test/intltest/dtfmttst.cpp
|
| diff --git a/source/test/intltest/dtfmttst.cpp b/source/test/intltest/dtfmttst.cpp
|
| deleted file mode 100644
|
| index 1329e952fa5d6d7d04d8bddfd27e299150d4232b..0000000000000000000000000000000000000000
|
| --- a/source/test/intltest/dtfmttst.cpp
|
| +++ /dev/null
|
| @@ -1,4841 +0,0 @@
|
| -/********************************************************************
|
| - * COPYRIGHT:
|
| - * Copyright (c) 1997-2015, International Business Machines
|
| - * Corporation and others. All Rights Reserved.
|
| - ********************************************************************/
|
| -
|
| -#include "unicode/utypes.h"
|
| -
|
| -#if !UCONFIG_NO_FORMATTING
|
| -
|
| -#include "dtfmttst.h"
|
| -#include "unicode/localpointer.h"
|
| -#include "unicode/timezone.h"
|
| -#include "unicode/gregocal.h"
|
| -#include "unicode/smpdtfmt.h"
|
| -#include "unicode/datefmt.h"
|
| -#include "unicode/dtptngen.h"
|
| -#include "unicode/simpletz.h"
|
| -#include "unicode/strenum.h"
|
| -#include "unicode/dtfmtsym.h"
|
| -#include "cmemory.h"
|
| -#include "cstring.h"
|
| -#include "caltest.h" // for fieldName
|
| -#include <stdio.h> // for sprintf
|
| -
|
| -#if U_PLATFORM_HAS_WIN32_API
|
| -#include "windttst.h"
|
| -#endif
|
| -
|
| -#define ARRAY_SIZE(array) (sizeof array / sizeof array[0])
|
| -
|
| -#define ASSERT_OK(status) if(U_FAILURE(status)) {errcheckln(status, #status " = %s @ %s:%d", u_errorName(status), __FILE__, __LINE__); return; }
|
| -
|
| -// *****************************************************************************
|
| -// class DateFormatTest
|
| -// *****************************************************************************
|
| -
|
| -void DateFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
|
| -{
|
| - if(exec) {
|
| - logln("TestSuite DateFormatTest: ");
|
| - }
|
| - TESTCASE_AUTO_BEGIN;
|
| - TESTCASE_AUTO(TestPatterns);
|
| - TESTCASE_AUTO(TestEquals);
|
| - TESTCASE_AUTO(TestTwoDigitYearDSTParse);
|
| - TESTCASE_AUTO(TestFieldPosition);
|
| - TESTCASE_AUTO(TestPartialParse994);
|
| - TESTCASE_AUTO(TestRunTogetherPattern985);
|
| - TESTCASE_AUTO(TestRunTogetherPattern917);
|
| - TESTCASE_AUTO(TestCzechMonths459);
|
| - TESTCASE_AUTO(TestLetterDPattern212);
|
| - TESTCASE_AUTO(TestDayOfYearPattern195);
|
| - TESTCASE_AUTO(TestQuotePattern161);
|
| - TESTCASE_AUTO(TestBadInput135);
|
| - TESTCASE_AUTO(TestBadInput135a);
|
| - TESTCASE_AUTO(TestTwoDigitYear);
|
| - TESTCASE_AUTO(TestDateFormatZone061);
|
| - TESTCASE_AUTO(TestDateFormatZone146);
|
| - TESTCASE_AUTO(TestLocaleDateFormat);
|
| - TESTCASE_AUTO(TestFormattingLocaleTimeSeparator);
|
| - TESTCASE_AUTO(TestWallyWedel);
|
| - TESTCASE_AUTO(TestDateFormatCalendar);
|
| - TESTCASE_AUTO(TestSpaceParsing);
|
| - TESTCASE_AUTO(TestExactCountFormat);
|
| - TESTCASE_AUTO(TestWhiteSpaceParsing);
|
| - TESTCASE_AUTO(TestInvalidPattern);
|
| - TESTCASE_AUTO(TestGeneral);
|
| - TESTCASE_AUTO(TestGreekMay);
|
| - TESTCASE_AUTO(TestGenericTime);
|
| - TESTCASE_AUTO(TestGenericTimeZoneOrder);
|
| - TESTCASE_AUTO(TestHost);
|
| - TESTCASE_AUTO(TestEras);
|
| - TESTCASE_AUTO(TestNarrowNames);
|
| - TESTCASE_AUTO(TestShortDays);
|
| - TESTCASE_AUTO(TestStandAloneDays);
|
| - TESTCASE_AUTO(TestStandAloneMonths);
|
| - TESTCASE_AUTO(TestQuarters);
|
| - TESTCASE_AUTO(TestZTimeZoneParsing);
|
| - TESTCASE_AUTO(TestRelative);
|
| - TESTCASE_AUTO(TestRelativeClone);
|
| - TESTCASE_AUTO(TestHostClone);
|
| - TESTCASE_AUTO(TestHebrewClone);
|
| - TESTCASE_AUTO(TestDateFormatSymbolsClone);
|
| - TESTCASE_AUTO(TestTimeZoneDisplayName);
|
| - TESTCASE_AUTO(TestRoundtripWithCalendar);
|
| - TESTCASE_AUTO(Test6338);
|
| - TESTCASE_AUTO(Test6726);
|
| - TESTCASE_AUTO(TestGMTParsing);
|
| - TESTCASE_AUTO(Test6880);
|
| - TESTCASE_AUTO(TestISOEra);
|
| - TESTCASE_AUTO(TestFormalChineseDate);
|
| - TESTCASE_AUTO(TestNumberAsStringParsing);
|
| - TESTCASE_AUTO(TestStandAloneGMTParse);
|
| - TESTCASE_AUTO(TestParsePosition);
|
| - TESTCASE_AUTO(TestMonthPatterns);
|
| - TESTCASE_AUTO(TestContext);
|
| - TESTCASE_AUTO(TestNonGregoFmtParse);
|
| - /*
|
| - TESTCASE_AUTO(TestRelativeError);
|
| - TESTCASE_AUTO(TestRelativeOther);
|
| - */
|
| - TESTCASE_AUTO(TestDotAndAtLeniency);
|
| - TESTCASE_AUTO(TestDateFormatLeniency);
|
| - TESTCASE_AUTO(TestParseMultiPatternMatch);
|
| -
|
| - TESTCASE_AUTO(TestParseLeniencyAPIs);
|
| - TESTCASE_AUTO(TestNumberFormatOverride);
|
| - TESTCASE_AUTO(TestCreateInstanceForSkeleton);
|
| - TESTCASE_AUTO(TestCreateInstanceForSkeletonDefault);
|
| - TESTCASE_AUTO(TestCreateInstanceForSkeletonWithCalendar);
|
| - TESTCASE_AUTO(TestDFSCreateForLocaleNonGregorianLocale);
|
| - TESTCASE_AUTO(TestDFSCreateForLocaleWithCalendarInLocale);
|
| - TESTCASE_AUTO(TestChangeCalendar);
|
| -
|
| - TESTCASE_AUTO_END;
|
| -}
|
| -
|
| -void DateFormatTest::TestPatterns() {
|
| - static const struct {
|
| - const char *actualPattern;
|
| - const char *expectedPattern;
|
| - const char *localeID;
|
| - const char *expectedLocalPattern;
|
| - } EXPECTED[] = {
|
| - {UDAT_YEAR, "y","en","y"},
|
| -
|
| - {UDAT_QUARTER, "QQQQ", "en", "QQQQ"},
|
| - {UDAT_ABBR_QUARTER, "QQQ", "en", "QQQ"},
|
| - {UDAT_YEAR_QUARTER, "yQQQQ", "en", "QQQQ y"},
|
| - {UDAT_YEAR_ABBR_QUARTER, "yQQQ", "en", "QQQ y"},
|
| -
|
| - {UDAT_NUM_MONTH, "M", "en", "L"},
|
| - {UDAT_ABBR_MONTH, "MMM", "en", "LLL"},
|
| - {UDAT_MONTH, "MMMM", "en", "LLLL"},
|
| - {UDAT_YEAR_NUM_MONTH, "yM","en","M/y"},
|
| - {UDAT_YEAR_ABBR_MONTH, "yMMM","en","MMM y"},
|
| - {UDAT_YEAR_MONTH, "yMMMM","en","MMMM y"},
|
| -
|
| - {UDAT_DAY, "d","en","d"},
|
| - {UDAT_YEAR_NUM_MONTH_DAY, "yMd", "en", "M/d/y"},
|
| - {UDAT_YEAR_ABBR_MONTH_DAY, "yMMMd", "en", "MMM d, y"},
|
| - {UDAT_YEAR_MONTH_DAY, "yMMMMd", "en", "MMMM d, y"},
|
| - {UDAT_YEAR_NUM_MONTH_WEEKDAY_DAY, "yMEd", "en", "EEE, M/d/y"},
|
| - {UDAT_YEAR_ABBR_MONTH_WEEKDAY_DAY, "yMMMEd", "en", "EEE, MMM d, y"},
|
| - {UDAT_YEAR_MONTH_WEEKDAY_DAY, "yMMMMEEEEd", "en", "EEEE, MMMM d, y"},
|
| -
|
| - {UDAT_NUM_MONTH_DAY, "Md","en","M/d"},
|
| - {UDAT_ABBR_MONTH_DAY, "MMMd","en","MMM d"},
|
| - {UDAT_MONTH_DAY, "MMMMd","en","MMMM d"},
|
| - {UDAT_NUM_MONTH_WEEKDAY_DAY, "MEd","en","EEE, M/d"},
|
| - {UDAT_ABBR_MONTH_WEEKDAY_DAY, "MMMEd","en","EEE, MMM d"},
|
| - {UDAT_MONTH_WEEKDAY_DAY, "MMMMEEEEd","en","EEEE, MMMM d"},
|
| -
|
| - {UDAT_HOUR, "j", "en", "h a"}, // (fixed expected result per ticket 6872<-6626)
|
| - {UDAT_HOUR24, "H", "en", "HH"}, // (fixed expected result per ticket 6872<-6626
|
| -
|
| - {UDAT_MINUTE, "m", "en", "m"},
|
| - {UDAT_HOUR_MINUTE, "jm","en","h:mm a"}, // (fixed expected result per ticket 6872<-7180)
|
| - {UDAT_HOUR24_MINUTE, "Hm", "en", "HH:mm"}, // (fixed expected result per ticket 6872<-6626)
|
| -
|
| - {UDAT_SECOND, "s", "en", "s"},
|
| - {UDAT_HOUR_MINUTE_SECOND, "jms","en","h:mm:ss a"}, // (fixed expected result per ticket 6872<-7180)
|
| - {UDAT_HOUR24_MINUTE_SECOND, "Hms","en","HH:mm:ss"}, // (fixed expected result per ticket 6872<-6626)
|
| - {UDAT_MINUTE_SECOND, "ms", "en", "mm:ss"}, // (fixed expected result per ticket 6872<-6626)
|
| -
|
| - {UDAT_LOCATION_TZ, "VVVV", "en", "VVVV"},
|
| - {UDAT_GENERIC_TZ, "vvvv", "en", "vvvv"},
|
| - {UDAT_ABBR_GENERIC_TZ, "v", "en", "v"},
|
| - {UDAT_SPECIFIC_TZ, "zzzz", "en", "zzzz"},
|
| - {UDAT_ABBR_SPECIFIC_TZ, "z", "en", "z"},
|
| - {UDAT_ABBR_UTC_TZ, "ZZZZ", "en", "ZZZZ"},
|
| -
|
| - {UDAT_YEAR_NUM_MONTH_DAY UDAT_ABBR_UTC_TZ, "yMdZZZZ", "en", "M/d/y, ZZZZ"},
|
| - {UDAT_MONTH_DAY UDAT_LOCATION_TZ, "MMMMdVVVV", "en", "MMMM d, VVVV"}
|
| - };
|
| -
|
| - IcuTestErrorCode errorCode(*this, "TestPatterns()");
|
| - for (int32_t i = 0; i < UPRV_LENGTHOF(EXPECTED); i++) {
|
| - // Verify that patterns have the correct values
|
| - UnicodeString actualPattern(EXPECTED[i].actualPattern, -1, US_INV);
|
| - UnicodeString expectedPattern(EXPECTED[i].expectedPattern, -1, US_INV);
|
| - Locale locale(EXPECTED[i].localeID);
|
| - if (actualPattern != expectedPattern) {
|
| - errln("FAILURE! Expected pattern: " + expectedPattern +
|
| - " but was: " + actualPattern);
|
| - }
|
| -
|
| - // Verify that DataFormat instances produced contain the correct
|
| - // localized patterns
|
| - // TODO: use DateFormat::getInstanceForSkeleton(), ticket #9029
|
| - // Java test code:
|
| - // DateFormat date1 = DateFormat.getPatternInstance(actualPattern,
|
| - // locale);
|
| - // DateFormat date2 = DateFormat.getPatternInstance(Calendar.getInstance(locale),
|
| - // actualPattern, locale);
|
| - LocalPointer<DateTimePatternGenerator> generator(
|
| - DateTimePatternGenerator::createInstance(locale, errorCode));
|
| - if(errorCode.logDataIfFailureAndReset("DateTimePatternGenerator::createInstance() failed for locale ID \"%s\"", EXPECTED[i].localeID)) {
|
| - continue;
|
| - }
|
| - UnicodeString pattern = generator->getBestPattern(actualPattern, errorCode);
|
| - SimpleDateFormat date1(pattern, locale, errorCode);
|
| - SimpleDateFormat date2(pattern, locale, errorCode);
|
| - date2.adoptCalendar(Calendar::createInstance(locale, errorCode));
|
| - if(errorCode.logIfFailureAndReset("DateFormat::getInstanceForSkeleton() failed")) {
|
| - errln(" for actualPattern \"%s\" & locale ID \"%s\"",
|
| - EXPECTED[i].actualPattern, EXPECTED[i].localeID);
|
| - continue;
|
| - }
|
| -
|
| - UnicodeString expectedLocalPattern(EXPECTED[i].expectedLocalPattern, -1, US_INV);
|
| - UnicodeString actualLocalPattern1;
|
| - UnicodeString actualLocalPattern2;
|
| - date1.toLocalizedPattern(actualLocalPattern1, errorCode);
|
| - date2.toLocalizedPattern(actualLocalPattern2, errorCode);
|
| - if (actualLocalPattern1 != expectedLocalPattern) {
|
| - errln("FAILURE! Expected local pattern: " + expectedLocalPattern
|
| - + " but was: " + actualLocalPattern1);
|
| - }
|
| - if (actualLocalPattern2 != expectedLocalPattern) {
|
| - errln("FAILURE! Expected local pattern: " + expectedLocalPattern
|
| - + " but was: " + actualLocalPattern2);
|
| - }
|
| - }
|
| -}
|
| -
|
| -// Test written by Wally Wedel and emailed to me.
|
| -void DateFormatTest::TestWallyWedel()
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - /*
|
| - * Instantiate a TimeZone so we can get the ids.
|
| - */
|
| - TimeZone *tz = new SimpleTimeZone(7,"");
|
| - /*
|
| - * Computational variables.
|
| - */
|
| - int32_t offset, hours, minutes, seconds;
|
| - /*
|
| - * Instantiate a SimpleDateFormat set up to produce a full time
|
| - zone name.
|
| - */
|
| - SimpleDateFormat *sdf = new SimpleDateFormat((UnicodeString)"zzzz", status);
|
| - /*
|
| - * A String array for the time zone ids.
|
| - */
|
| - int32_t ids_length;
|
| - StringEnumeration* ids = TimeZone::createEnumeration();
|
| - if (ids == NULL) {
|
| - dataerrln("Unable to create TimeZone enumeration.");
|
| - if (sdf != NULL) {
|
| - delete sdf;
|
| - }
|
| - return;
|
| - }
|
| - ids_length = ids->count(status);
|
| - /*
|
| - * How many ids do we have?
|
| - */
|
| - logln("Time Zone IDs size: %d", ids_length);
|
| - /*
|
| - * Column headings (sort of)
|
| - */
|
| - logln("Ordinal ID offset(h:m) name");
|
| - /*
|
| - * Loop through the tzs.
|
| - */
|
| - UDate today = Calendar::getNow();
|
| - Calendar *cal = Calendar::createInstance(status);
|
| - for (int32_t i = 0; i < ids_length; i++) {
|
| - // logln(i + " " + ids[i]);
|
| - const UnicodeString* id = ids->snext(status);
|
| - TimeZone *ttz = TimeZone::createTimeZone(*id);
|
| - // offset = ttz.getRawOffset();
|
| - cal->setTimeZone(*ttz);
|
| - cal->setTime(today, status);
|
| - offset = cal->get(UCAL_ZONE_OFFSET, status) + cal->get(UCAL_DST_OFFSET, status);
|
| - // logln(i + " " + ids[i] + " offset " + offset);
|
| - const char* sign = "+";
|
| - if (offset < 0) {
|
| - sign = "-";
|
| - offset = -offset;
|
| - }
|
| - hours = offset/3600000;
|
| - minutes = (offset%3600000)/60000;
|
| - seconds = (offset%60000)/1000;
|
| - UnicodeString dstOffset = (UnicodeString)"" + sign + (hours < 10 ? "0" : "") +
|
| - (int32_t)hours + ":" + (minutes < 10 ? "0" : "") + (int32_t)minutes;
|
| - if (seconds != 0) {
|
| - dstOffset = dstOffset + ":" + (seconds < 10 ? "0" : "") + seconds;
|
| - }
|
| - /*
|
| - * Instantiate a date so we can display the time zone name.
|
| - */
|
| - sdf->setTimeZone(*ttz);
|
| - /*
|
| - * Format the output.
|
| - */
|
| - UnicodeString fmtOffset;
|
| - FieldPosition pos(0);
|
| - sdf->format(today,fmtOffset, pos);
|
| - // UnicodeString fmtOffset = tzS.toString();
|
| - UnicodeString *fmtDstOffset = 0;
|
| - if (fmtOffset.startsWith("GMT") && fmtOffset.length() != 3)
|
| - {
|
| - //fmtDstOffset = fmtOffset->substring(3);
|
| - fmtDstOffset = new UnicodeString();
|
| - fmtOffset.extract(3, fmtOffset.length(), *fmtDstOffset);
|
| - }
|
| - /*
|
| - * Show our result.
|
| - */
|
| - UBool ok = fmtDstOffset == 0 || *fmtDstOffset == dstOffset;
|
| - if (ok)
|
| - {
|
| - logln(UnicodeString() + i + " " + *id + " " + dstOffset +
|
| - " " + fmtOffset +
|
| - (fmtDstOffset != 0 ? " ok" : " ?"));
|
| - }
|
| - else
|
| - {
|
| - errln(UnicodeString() + i + " " + *id + " " + dstOffset +
|
| - " " + fmtOffset + " *** FAIL ***");
|
| - }
|
| - delete ttz;
|
| - delete fmtDstOffset;
|
| - }
|
| - delete cal;
|
| - // delete ids; // TODO: BAD API
|
| - delete ids;
|
| - delete sdf;
|
| - delete tz;
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * Test operator==
|
| - */
|
| -void
|
| -DateFormatTest::TestEquals()
|
| -{
|
| - DateFormat* fmtA = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL);
|
| - DateFormat* fmtB = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL);
|
| - if ( fmtA == NULL || fmtB == NULL){
|
| - dataerrln("Error calling DateFormat::createDateTimeInstance");
|
| - delete fmtA;
|
| - delete fmtB;
|
| - return;
|
| - }
|
| -
|
| - if (!(*fmtA == *fmtB)) errln((UnicodeString)"FAIL");
|
| - delete fmtA;
|
| - delete fmtB;
|
| -
|
| - TimeZone* test = TimeZone::createTimeZone("PDT");
|
| - delete test;
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * Test the parsing of 2-digit years.
|
| - */
|
| -void
|
| -DateFormatTest::TestTwoDigitYearDSTParse(void)
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - SimpleDateFormat* fullFmt = new SimpleDateFormat((UnicodeString)"EEE MMM dd HH:mm:ss.SSS zzz yyyy G", status);
|
| - SimpleDateFormat *fmt = new SimpleDateFormat((UnicodeString)"dd-MMM-yy h:mm:ss 'o''clock' a z", Locale::getEnglish(), status);
|
| - //DateFormat* fmt = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL, Locale::ENGLISH);
|
| - UnicodeString* s = new UnicodeString("03-Apr-04 2:20:47 o'clock AM PST", "");
|
| - TimeZone* defaultTZ = TimeZone::createDefault();
|
| - TimeZone* PST = TimeZone::createTimeZone("PST");
|
| - int32_t defaultOffset = defaultTZ->getRawOffset();
|
| - int32_t PSTOffset = PST->getRawOffset();
|
| - int32_t hour = 2 + (defaultOffset - PSTOffset) / (60*60*1000);
|
| - // hour is the expected hour of day, in units of seconds
|
| - hour = ((hour < 0) ? hour + 24 : hour) * 60*60;
|
| -
|
| - UnicodeString str;
|
| -
|
| - if(U_FAILURE(status)) {
|
| - dataerrln("Could not set up test. exitting - %s", u_errorName(status));
|
| - return;
|
| - }
|
| -
|
| - UDate d = fmt->parse(*s, status);
|
| - logln(*s + " P> " + ((DateFormat*)fullFmt)->format(d, str));
|
| - int32_t y, m, day, hr, min, sec;
|
| - dateToFields(d, y, m, day, hr, min, sec);
|
| - hour += defaultTZ->inDaylightTime(d, status) ? 1 : 0;
|
| - hr = hr*60*60;
|
| - if (hr != hour)
|
| - errln((UnicodeString)"FAIL: Should parse to hour " + hour + " but got " + hr);
|
| -
|
| - if (U_FAILURE(status))
|
| - errln((UnicodeString)"FAIL: " + (int32_t)status);
|
| -
|
| - delete s;
|
| - delete fmt;
|
| - delete fullFmt;
|
| - delete PST;
|
| - delete defaultTZ;
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -UChar toHexString(int32_t i) { return (UChar)(i + (i < 10 ? 0x30 : (0x41 - 10))); }
|
| -
|
| -UnicodeString&
|
| -DateFormatTest::escape(UnicodeString& s)
|
| -{
|
| - UnicodeString buf;
|
| - for (int32_t i=0; i<s.length(); ++i)
|
| - {
|
| - UChar c = s[(int32_t)i];
|
| - if (c <= (UChar)0x7F) buf += c;
|
| - else {
|
| - buf += (UChar)0x5c; buf += (UChar)0x55;
|
| - buf += toHexString((c & 0xF000) >> 12);
|
| - buf += toHexString((c & 0x0F00) >> 8);
|
| - buf += toHexString((c & 0x00F0) >> 4);
|
| - buf += toHexString(c & 0x000F);
|
| - }
|
| - }
|
| - return (s = buf);
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * This MUST be kept in sync with DateFormatSymbols.gPatternChars.
|
| - */
|
| -#if UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR
|
| -static const char* PATTERN_CHARS = "GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXxr:";
|
| -#else
|
| -static const char* PATTERN_CHARS = "GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXxr";
|
| -#endif
|
| -
|
| -/**
|
| - * A list of the names of all the fields in DateFormat.
|
| - * This MUST be kept in sync with DateFormat.
|
| - */
|
| -static const char* DATEFORMAT_FIELD_NAMES[] = {
|
| - "ERA_FIELD",
|
| - "YEAR_FIELD",
|
| - "MONTH_FIELD",
|
| - "DATE_FIELD",
|
| - "HOUR_OF_DAY1_FIELD",
|
| - "HOUR_OF_DAY0_FIELD",
|
| - "MINUTE_FIELD",
|
| - "SECOND_FIELD",
|
| - "MILLISECOND_FIELD",
|
| - "DAY_OF_WEEK_FIELD",
|
| - "DAY_OF_YEAR_FIELD",
|
| - "DAY_OF_WEEK_IN_MONTH_FIELD",
|
| - "WEEK_OF_YEAR_FIELD",
|
| - "WEEK_OF_MONTH_FIELD",
|
| - "AM_PM_FIELD",
|
| - "HOUR1_FIELD",
|
| - "HOUR0_FIELD",
|
| - "TIMEZONE_FIELD",
|
| - "YEAR_WOY_FIELD",
|
| - "DOW_LOCAL_FIELD",
|
| - "EXTENDED_YEAR_FIELD",
|
| - "JULIAN_DAY_FIELD",
|
| - "MILLISECONDS_IN_DAY_FIELD",
|
| - "TIMEZONE_RFC_FIELD",
|
| - "GENERIC_TIMEZONE_FIELD",
|
| - "STAND_ALONE_DAY_FIELD",
|
| - "STAND_ALONE_MONTH_FIELD",
|
| - "QUARTER_FIELD",
|
| - "STAND_ALONE_QUARTER_FIELD",
|
| - "TIMEZONE_SPECIAL_FIELD",
|
| - "YEAR_NAME_FIELD",
|
| - "TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD",
|
| - "TIMEZONE_ISO_FIELD",
|
| - "TIMEZONE_ISO_LOCAL_FIELD",
|
| - "RELATED_YEAR_FIELD",
|
| - "UDAT_TIME_SEPARATOR_FIELD",
|
| -};
|
| -
|
| -static const int32_t DATEFORMAT_FIELD_NAMES_LENGTH =
|
| - sizeof(DATEFORMAT_FIELD_NAMES) / sizeof(DATEFORMAT_FIELD_NAMES[0]);
|
| -
|
| -/**
|
| - * Verify that returned field position indices are correct.
|
| - */
|
| -void DateFormatTest::TestFieldPosition() {
|
| - UErrorCode ec = U_ZERO_ERROR;
|
| - int32_t i, j, exp;
|
| - UnicodeString buf;
|
| -
|
| - // Verify data
|
| - DateFormatSymbols rootSyms(Locale(""), ec);
|
| - if (U_FAILURE(ec)) {
|
| - dataerrln("Unable to create DateFormatSymbols - %s", u_errorName(ec));
|
| - return;
|
| - }
|
| -
|
| - // local pattern chars data is not longer loaded
|
| - // from icu locale bundle
|
| - assertEquals("patternChars", PATTERN_CHARS, rootSyms.getLocalPatternChars(buf));
|
| - assertEquals("patternChars", PATTERN_CHARS, DateFormatSymbols::getPatternUChars());
|
| - assertTrue("DATEFORMAT_FIELD_NAMES", DATEFORMAT_FIELD_NAMES_LENGTH == UDAT_FIELD_COUNT);
|
| -#if UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR
|
| - assertTrue("Data", UDAT_FIELD_COUNT == uprv_strlen(PATTERN_CHARS));
|
| -#else
|
| - assertTrue("Data", UDAT_FIELD_COUNT == uprv_strlen(PATTERN_CHARS) + 1); // +1 for missing TIME_SEPARATOR pattern char
|
| -#endif
|
| -
|
| - // Create test formatters
|
| - const int32_t COUNT = 4;
|
| - DateFormat* dateFormats[COUNT];
|
| - dateFormats[0] = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale::getUS());
|
| - dateFormats[1] = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale::getFrance());
|
| - // Make the pattern "G y M d..."
|
| - buf.remove().append(PATTERN_CHARS);
|
| - for (j=buf.length()-1; j>=0; --j) buf.insert(j, (UChar)32/*' '*/);
|
| - dateFormats[2] = new SimpleDateFormat(buf, Locale::getUS(), ec);
|
| - // Make the pattern "GGGG yyyy MMMM dddd..."
|
| - for (j=buf.length()-1; j>=0; j-=2) {
|
| - for (i=0; i<3; ++i) {
|
| - buf.insert(j, buf.charAt(j));
|
| - }
|
| - }
|
| - dateFormats[3] = new SimpleDateFormat(buf, Locale::getUS(), ec);
|
| - if(U_FAILURE(ec)){
|
| - errln(UnicodeString("Could not create SimpleDateFormat object for locale en_US. Error: " )+ UnicodeString(u_errorName(ec)));
|
| - return;
|
| - }
|
| - UDate aug13 = 871508052513.0;
|
| -
|
| - // Expected output field values for above DateFormats on aug13
|
| - // Fields are given in order of DateFormat field number
|
| - const char* EXPECTED[] = {
|
| - "", "1997", "August", "13", "", "", "34", "12", "", "Wednesday",
|
| - "", "", "", "", "PM", "2", "", "Pacific Daylight Time", "", "",
|
| - "", "", "", "", "", "", "", "", "", "",
|
| -#if UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR
|
| - "", "", "", "", "", ":",
|
| -#else
|
| - "", "", "", "", "", "",
|
| -#endif
|
| -
|
| - "", "1997", "ao\\u00FBt", "13", "", "14", "34", "12", "", "mercredi",
|
| - "", "", "", "", "", "", "", "heure d\\u2019\\u00E9t\\u00E9 du Pacifique", "", "",
|
| - "", "", "", "", "", "", "", "", "", "",
|
| -#if UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR
|
| - "", "", "", "", "", ":",
|
| -#else
|
| - "", "", "", "", "", "",
|
| -#endif
|
| -
|
| - "AD", "1997", "8", "13", "14", "14", "34", "12", "5", "Wed",
|
| - "225", "2", "33", "3", "PM", "2", "2", "PDT", "1997", "4",
|
| - "1997", "2450674", "52452513", "-0700", "PT", "4", "8", "3", "3", "uslax",
|
| -#if UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR
|
| - "1997", "GMT-7", "-07", "-07", "1997", ":",
|
| -#else
|
| - "1997", "GMT-7", "-07", "-07", "1997", "",
|
| -#endif
|
| -
|
| - "Anno Domini", "1997", "August", "0013", "0014", "0014", "0034", "0012", "5130", "Wednesday",
|
| - "0225", "0002", "0033", "0003", "PM", "0002", "0002", "Pacific Daylight Time", "1997", "Wednesday",
|
| - "1997", "2450674", "52452513", "GMT-07:00", "Pacific Time", "Wednesday", "August", "3rd quarter", "3rd quarter", "Los Angeles Time",
|
| -#if UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR
|
| - "1997", "GMT-07:00", "-0700", "-0700", "1997", ":",
|
| -#else
|
| - "1997", "GMT-07:00", "-0700", "-0700", "1997", "",
|
| -#endif
|
| - };
|
| -
|
| - const int32_t EXPECTED_LENGTH = sizeof(EXPECTED)/sizeof(EXPECTED[0]);
|
| -
|
| - assertTrue("data size", EXPECTED_LENGTH == COUNT * UDAT_FIELD_COUNT);
|
| -
|
| - TimeZone* PT = TimeZone::createTimeZone("America/Los_Angeles");
|
| - for (j = 0, exp = 0; j < COUNT; ++j) {
|
| - // String str;
|
| - DateFormat* df = dateFormats[j];
|
| - df->setTimeZone(*PT);
|
| - SimpleDateFormat* sdtfmt = dynamic_cast<SimpleDateFormat*>(df);
|
| - if (sdtfmt != NULL) {
|
| - logln(" Pattern = " + sdtfmt->toPattern(buf.remove()));
|
| - } else {
|
| - logln(" Pattern = ? (not a SimpleDateFormat)");
|
| - }
|
| - logln((UnicodeString)" Result = " + df->format(aug13, buf.remove()));
|
| -
|
| - int32_t expBase = exp; // save for later
|
| - for (i = 0; i < UDAT_FIELD_COUNT; ++i, ++exp) {
|
| - FieldPosition pos(i);
|
| - buf.remove();
|
| - df->format(aug13, buf, pos);
|
| - UnicodeString field;
|
| - buf.extractBetween(pos.getBeginIndex(), pos.getEndIndex(), field);
|
| - assertEquals((UnicodeString)"field #" + i + " " + DATEFORMAT_FIELD_NAMES[i],
|
| - ctou(EXPECTED[exp]), field);
|
| - }
|
| -
|
| - // test FieldPositionIterator API
|
| - logln("FieldPositionIterator");
|
| - {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - FieldPositionIterator posIter;
|
| - FieldPosition fp;
|
| -
|
| - buf.remove();
|
| - df->format(aug13, buf, &posIter, status);
|
| - while (posIter.next(fp)) {
|
| - int32_t i = fp.getField();
|
| - UnicodeString field;
|
| - buf.extractBetween(fp.getBeginIndex(), fp.getEndIndex(), field);
|
| - assertEquals((UnicodeString)"field #" + i + " " + DATEFORMAT_FIELD_NAMES[i],
|
| - ctou(EXPECTED[expBase + i]), field);
|
| - }
|
| -
|
| - }
|
| - }
|
| -
|
| -
|
| - // test null posIter
|
| - buf.remove();
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - dateFormats[0]->format(aug13, buf, NULL, status);
|
| - // if we didn't crash, we succeeded.
|
| -
|
| - for (i=0; i<COUNT; ++i) {
|
| - delete dateFormats[i];
|
| - }
|
| - delete PT;
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * General parse/format tests. Add test cases as needed.
|
| - */
|
| -void DateFormatTest::TestGeneral() {
|
| - const char* DATA[] = {
|
| - "yyyy MM dd HH:mm:ss.SSS",
|
| -
|
| - // Milliseconds are left-justified, since they format as fractions of a second
|
| - "y/M/d H:mm:ss.S", "fp", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.5", "2004 03 10 16:36:31.500",
|
| - "y/M/d H:mm:ss.SS", "fp", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.56", "2004 03 10 16:36:31.560",
|
| - "y/M/d H:mm:ss.SSS", "F", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.567",
|
| - "y/M/d H:mm:ss.SSSS", "pf", "2004/3/10 16:36:31.5679", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.5670",
|
| - };
|
| - expect(DATA, ARRAY_SIZE(DATA), Locale("en", "", ""));
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * Verify that strings which contain incomplete specifications are parsed
|
| - * correctly. In some instances, this means not being parsed at all, and
|
| - * returning an appropriate error.
|
| - */
|
| -void
|
| -DateFormatTest::TestPartialParse994()
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - SimpleDateFormat* f = new SimpleDateFormat(status);
|
| - if (U_FAILURE(status)) {
|
| - dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
|
| - delete f;
|
| - return;
|
| - }
|
| - UDate null = 0;
|
| - tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10:11:42", date(97, 1 - 1, 17, 10, 11, 42));
|
| - tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10:", null);
|
| - tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10", null);
|
| - tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 ", null);
|
| - tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17", null);
|
| - if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
|
| - delete f;
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -void
|
| -DateFormatTest::tryPat994(SimpleDateFormat* format, const char* pat, const char* str, UDate expected)
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UDate null = 0;
|
| - logln(UnicodeString("Pattern \"") + pat + "\" String \"" + str + "\"");
|
| - //try {
|
| - format->applyPattern(pat);
|
| - UDate date = format->parse(str, status);
|
| - if (U_FAILURE(status) || date == null)
|
| - {
|
| - logln((UnicodeString)"ParseException: " + (int32_t)status);
|
| - if (expected != null) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
|
| - }
|
| - else
|
| - {
|
| - UnicodeString f;
|
| - ((DateFormat*)format)->format(date, f);
|
| - logln(UnicodeString(" parse(") + str + ") -> " + dateToString(date));
|
| - logln((UnicodeString)" format -> " + f);
|
| - if (expected == null ||
|
| - !(date == expected)) errln((UnicodeString)"FAIL: Expected null");//" + expected);
|
| - if (!(f == str)) errln(UnicodeString("FAIL: Expected ") + str);
|
| - }
|
| - //}
|
| - //catch(ParseException e) {
|
| - // logln((UnicodeString)"ParseException: " + e.getMessage());
|
| - // if (expected != null) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
|
| - //}
|
| - //catch(Exception e) {
|
| - // errln((UnicodeString)"*** Exception:");
|
| - // e.printStackTrace();
|
| - //}
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * Verify the behavior of patterns in which digits for different fields run together
|
| - * without intervening separators.
|
| - */
|
| -void
|
| -DateFormatTest::TestRunTogetherPattern985()
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UnicodeString format("yyyyMMddHHmmssSSS");
|
| - UnicodeString now, then;
|
| - //UBool flag;
|
| - SimpleDateFormat *formatter = new SimpleDateFormat(format, status);
|
| - if (U_FAILURE(status)) {
|
| - dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
|
| - delete formatter;
|
| - return;
|
| - }
|
| - UDate date1 = Calendar::getNow();
|
| - ((DateFormat*)formatter)->format(date1, now);
|
| - logln(now);
|
| - ParsePosition pos(0);
|
| - UDate date2 = formatter->parse(now, pos);
|
| - if (date2 == 0) then = UnicodeString("Parse stopped at ") + pos.getIndex();
|
| - else ((DateFormat*)formatter)->format(date2, then);
|
| - logln(then);
|
| - if (!(date2 == date1)) errln((UnicodeString)"FAIL");
|
| - delete formatter;
|
| - if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * Verify the behavior of patterns in which digits for different fields run together
|
| - * without intervening separators.
|
| - */
|
| -void
|
| -DateFormatTest::TestRunTogetherPattern917()
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - SimpleDateFormat* fmt;
|
| - UnicodeString myDate;
|
| - fmt = new SimpleDateFormat((UnicodeString)"yyyy/MM/dd", status);
|
| - if (U_FAILURE(status)) {
|
| - dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
|
| - delete fmt;
|
| - return;
|
| - }
|
| - myDate = "1997/02/03";
|
| - testIt917(fmt, myDate, date(97, 2 - 1, 3));
|
| - delete fmt;
|
| - fmt = new SimpleDateFormat((UnicodeString)"yyyyMMdd", status);
|
| - myDate = "19970304";
|
| - testIt917(fmt, myDate, date(97, 3 - 1, 4));
|
| - delete fmt;
|
| - if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -void
|
| -DateFormatTest::testIt917(SimpleDateFormat* fmt, UnicodeString& str, UDate expected)
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UnicodeString pattern;
|
| - logln((UnicodeString)"pattern=" + fmt->toPattern(pattern) + " string=" + str);
|
| - Formattable o;
|
| - //try {
|
| - ((Format*)fmt)->parseObject(str, o, status);
|
| - //}
|
| - if (U_FAILURE(status)) return;
|
| - //catch(ParseException e) {
|
| - // e.printStackTrace();
|
| - // return;
|
| - //}
|
| - logln((UnicodeString)"Parsed object: " + dateToString(o.getDate()));
|
| - if (!(o.getDate() == expected)) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
|
| - UnicodeString formatted; ((Format*)fmt)->format(o, formatted, status);
|
| - logln((UnicodeString)"Formatted string: " + formatted);
|
| - if (!(formatted == str)) errln((UnicodeString)"FAIL: Expected " + str);
|
| - if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * Verify the handling of Czech June and July, which have the unique attribute that
|
| - * one is a proper prefix substring of the other.
|
| - */
|
| -void
|
| -DateFormatTest::TestCzechMonths459()
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - DateFormat* fmt = DateFormat::createDateInstance(DateFormat::FULL, Locale("cs", "", ""));
|
| - if (fmt == NULL){
|
| - dataerrln("Error calling DateFormat::createDateInstance()");
|
| - return;
|
| - }
|
| -
|
| - UnicodeString pattern;
|
| - logln((UnicodeString)"Pattern " + ((SimpleDateFormat*) fmt)->toPattern(pattern));
|
| - UDate june = date(97, UCAL_JUNE, 15);
|
| - UDate july = date(97, UCAL_JULY, 15);
|
| - UnicodeString juneStr; fmt->format(june, juneStr);
|
| - UnicodeString julyStr; fmt->format(july, julyStr);
|
| - //try {
|
| - logln((UnicodeString)"format(June 15 1997) = " + juneStr);
|
| - UDate d = fmt->parse(juneStr, status);
|
| - UnicodeString s; fmt->format(d, s);
|
| - int32_t month,yr,day,hr,min,sec; dateToFields(d,yr,month,day,hr,min,sec);
|
| - logln((UnicodeString)" -> parse -> " + s + " (month = " + month + ")");
|
| - if (month != UCAL_JUNE) errln((UnicodeString)"FAIL: Month should be June");
|
| - logln((UnicodeString)"format(July 15 1997) = " + julyStr);
|
| - d = fmt->parse(julyStr, status);
|
| - fmt->format(d, s);
|
| - dateToFields(d,yr,month,day,hr,min,sec);
|
| - logln((UnicodeString)" -> parse -> " + s + " (month = " + month + ")");
|
| - if (month != UCAL_JULY) errln((UnicodeString)"FAIL: Month should be July");
|
| - //}
|
| - //catch(ParseException e) {
|
| - if (U_FAILURE(status))
|
| - errln((UnicodeString)"Exception: " + (int32_t)status);
|
| - //}
|
| - delete fmt;
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * Test the handling of 'D' in patterns.
|
| - */
|
| -void
|
| -DateFormatTest::TestLetterDPattern212()
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UnicodeString dateString("1995-040.05:01:29");
|
| - UnicodeString bigD("yyyy-DDD.hh:mm:ss");
|
| - UnicodeString littleD("yyyy-ddd.hh:mm:ss");
|
| - UDate expLittleD = date(95, 0, 1, 5, 1, 29);
|
| - UDate expBigD = expLittleD + 39 * 24 * 3600000.0;
|
| - expLittleD = expBigD; // Expect the same, with default lenient parsing
|
| - logln((UnicodeString)"dateString= " + dateString);
|
| - SimpleDateFormat *formatter = new SimpleDateFormat(bigD, status);
|
| - if (U_FAILURE(status)) {
|
| - dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
|
| - delete formatter;
|
| - return;
|
| - }
|
| - ParsePosition pos(0);
|
| - UDate myDate = formatter->parse(dateString, pos);
|
| - logln((UnicodeString)"Using " + bigD + " -> " + myDate);
|
| - if (myDate != expBigD) errln((UnicodeString)"FAIL: bigD - Expected " + dateToString(expBigD));
|
| - delete formatter;
|
| - formatter = new SimpleDateFormat(littleD, status);
|
| - ASSERT_OK(status);
|
| - pos = ParsePosition(0);
|
| - myDate = formatter->parse(dateString, pos);
|
| - logln((UnicodeString)"Using " + littleD + " -> " + dateToString(myDate));
|
| - if (myDate != expLittleD) errln((UnicodeString)"FAIL: littleD - Expected " + dateToString(expLittleD));
|
| - delete formatter;
|
| - if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * Test the day of year pattern.
|
| - */
|
| -void
|
| -DateFormatTest::TestDayOfYearPattern195()
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UDate today = Calendar::getNow();
|
| - int32_t year,month,day,hour,min,sec; dateToFields(today,year,month,day,hour,min,sec);
|
| - UDate expected = date(year, month, day);
|
| - logln((UnicodeString)"Test Date: " + dateToString(today));
|
| - SimpleDateFormat* sdf = (SimpleDateFormat*)DateFormat::createDateInstance();
|
| - if (sdf == NULL){
|
| - dataerrln("Error calling DateFormat::createDateInstance()");
|
| - return;
|
| - }
|
| - tryPattern(*sdf, today, 0, expected);
|
| - tryPattern(*sdf, today, "G yyyy DDD", expected);
|
| - delete sdf;
|
| - if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -void
|
| -DateFormatTest::tryPattern(SimpleDateFormat& sdf, UDate d, const char* pattern, UDate expected)
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - if (pattern != 0) sdf.applyPattern(pattern);
|
| - UnicodeString thePat;
|
| - logln((UnicodeString)"pattern: " + sdf.toPattern(thePat));
|
| - UnicodeString formatResult; (*(DateFormat*)&sdf).format(d, formatResult);
|
| - logln((UnicodeString)" format -> " + formatResult);
|
| - // try {
|
| - UDate d2 = sdf.parse(formatResult, status);
|
| - logln((UnicodeString)" parse(" + formatResult + ") -> " + dateToString(d2));
|
| - if (d2 != expected) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
|
| - UnicodeString format2; (*(DateFormat*)&sdf).format(d2, format2);
|
| - logln((UnicodeString)" format -> " + format2);
|
| - if (!(formatResult == format2)) errln((UnicodeString)"FAIL: Round trip drift");
|
| - //}
|
| - //catch(Exception e) {
|
| - if (U_FAILURE(status))
|
| - errln((UnicodeString)"Error: " + (int32_t)status);
|
| - //}
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * Test the handling of single quotes in patterns.
|
| - */
|
| -void
|
| -DateFormatTest::TestQuotePattern161()
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - SimpleDateFormat* formatter = new SimpleDateFormat((UnicodeString)"MM/dd/yyyy 'at' hh:mm:ss a zzz", status);
|
| - if (U_FAILURE(status)) {
|
| - dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
|
| - delete formatter;
|
| - return;
|
| - }
|
| - UDate currentTime_1 = date(97, UCAL_AUGUST, 13, 10, 42, 28);
|
| - UnicodeString dateString; ((DateFormat*)formatter)->format(currentTime_1, dateString);
|
| - UnicodeString exp("08/13/1997 at 10:42:28 AM ");
|
| - logln((UnicodeString)"format(" + dateToString(currentTime_1) + ") = " + dateString);
|
| - if (0 != dateString.compareBetween(0, exp.length(), exp, 0, exp.length())) errln((UnicodeString)"FAIL: Expected " + exp);
|
| - delete formatter;
|
| - if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * Verify the correct behavior when handling invalid input strings.
|
| - */
|
| -void
|
| -DateFormatTest::TestBadInput135()
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - DateFormat::EStyle looks[] = {
|
| - DateFormat::SHORT, DateFormat::MEDIUM, DateFormat::LONG, DateFormat::FULL
|
| - };
|
| - int32_t looks_length = (int32_t)(sizeof(looks) / sizeof(looks[0]));
|
| - const char* strings[] = {
|
| - "Mar 15", "Mar 15 1997", "asdf", "3/1/97 1:23:", "3/1/00 1:23:45 AM"
|
| - };
|
| - int32_t strings_length = (int32_t)(sizeof(strings) / sizeof(strings[0]));
|
| - DateFormat *full = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::LONG);
|
| - if(full==NULL) {
|
| - dataerrln("could not create date time instance");
|
| - return;
|
| - }
|
| - UnicodeString expected("March 1, 2000 at 1:23:45 AM ");
|
| - for (int32_t i = 0; i < strings_length;++i) {
|
| - const char* text = strings[i];
|
| - for (int32_t j = 0; j < looks_length;++j) {
|
| - DateFormat::EStyle dateLook = looks[j];
|
| - for (int32_t k = 0; k < looks_length;++k) {
|
| - DateFormat::EStyle timeLook = looks[k];
|
| - DateFormat *df = DateFormat::createDateTimeInstance(dateLook, timeLook);
|
| - if (df == NULL){
|
| - dataerrln("Error calling DateFormat::createDateTimeInstance()");
|
| - continue;
|
| - }
|
| - UnicodeString prefix = UnicodeString(text) + ", " + dateLook + "/" + timeLook + ": ";
|
| - //try {
|
| - UDate when = df->parse(text, status);
|
| - if (when == 0 && U_SUCCESS(status)) {
|
| - errln(prefix + "SHOULD NOT HAPPEN: parse returned 0.");
|
| - continue;
|
| - }
|
| - if (U_SUCCESS(status))
|
| - {
|
| - UnicodeString format;
|
| - UnicodeString pattern;
|
| - SimpleDateFormat* sdtfmt = dynamic_cast<SimpleDateFormat*>(df);
|
| - if (sdtfmt != NULL) {
|
| - sdtfmt->toPattern(pattern);
|
| - }
|
| - full->format(when, format);
|
| - logln(prefix + "OK: " + format);
|
| - if (0!=format.compareBetween(0, expected.length(), expected, 0, expected.length()))
|
| - errln((UnicodeString)"FAIL: Parse \"" + text + "\", pattern \"" + pattern + "\", expected " + expected + " got " + format);
|
| - }
|
| - //}
|
| - //catch(ParseException e) {
|
| - else
|
| - status = U_ZERO_ERROR;
|
| - //}
|
| - //catch(StringIndexOutOfBoundsException e) {
|
| - // errln(prefix + "SHOULD NOT HAPPEN: " + (int)status);
|
| - //}
|
| - delete df;
|
| - }
|
| - }
|
| - }
|
| - delete full;
|
| - if (U_FAILURE(status))
|
| - errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
|
| -}
|
| -
|
| -static const char* const parseFormats[] = {
|
| - "MMMM d, yyyy",
|
| - "MMMM d yyyy",
|
| - "M/d/yy",
|
| - "d MMMM, yyyy",
|
| - "d MMMM yyyy",
|
| - "d MMMM",
|
| - "MMMM d",
|
| - "yyyy",
|
| - "h:mm a MMMM d, yyyy"
|
| -};
|
| -
|
| -#if 0
|
| -// strict inputStrings
|
| -static const char* const inputStrings[] = {
|
| - "bogus string", 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
| - "April 1, 1997", "April 1, 1997", 0, 0, 0, 0, 0, "April 1", 0, 0,
|
| - "Jan 1, 1970", "January 1, 1970", 0, 0, 0, 0, 0, "January 1", 0, 0,
|
| - "Jan 1 2037", 0, "January 1 2037", 0, 0, 0, 0, "January 1", 0, 0,
|
| - "1/1/70", 0, 0, "1/1/70", 0, 0, 0, 0, "0001", 0,
|
| - "5 May 1997", 0, 0, 0, 0, "5 May 1997", "5 May", 0, "0005", 0,
|
| - "16 May", 0, 0, 0, 0, 0, "16 May", 0, "0016", 0,
|
| - "April 30", 0, 0, 0, 0, 0, 0, "April 30", 0, 0,
|
| - "1998", 0, 0, 0, 0, 0, 0, 0, "1998", 0,
|
| - "1", 0, 0, 0, 0, 0, 0, 0, "0001", 0,
|
| - "3:00 pm Jan 1, 1997", 0, 0, 0, 0, 0, 0, 0, "0003", "3:00 PM January 1, 1997",
|
| -};
|
| -#else
|
| -// lenient inputStrings
|
| -static const char* const inputStrings[] = {
|
| - "bogus string", 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
| - "April 1, 1997", "April 1, 1997", "April 1 1997", "4/1/97", 0, 0, 0, "April 1", 0, 0,
|
| - "Jan 1, 1970", "January 1, 1970", "January 1 1970", "1/1/70", 0, 0, 0, "January 1", 0, 0,
|
| - "Jan 1 2037", "January 1, 2037", "January 1 2037", "1/1/37", 0, 0, 0, "January 1", 0, 0,
|
| - "1/1/70", "January 1, 0070", "January 1 0070", "1/1/70", "1 January, 0070", "1 January 0070", "1 January", "January 1", "0001", 0,
|
| - "5 May 1997", 0, 0, 0, "5 May, 1997", "5 May 1997", "5 May", 0, "0005", 0,
|
| - "16 May", 0, 0, 0, 0, 0, "16 May", 0, "0016", 0,
|
| - "April 30", 0, 0, 0, 0, 0, 0, "April 30", 0, 0,
|
| - "1998", 0, 0, 0, 0, 0, 0, 0, "1998", 0,
|
| - "1", 0, 0, 0, 0, 0, 0, 0, "0001", 0,
|
| - "3:00 pm Jan 1, 1997", 0, 0, 0, 0, 0, 0, 0, "0003", "3:00 PM January 1, 1997",
|
| -};
|
| -#endif
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * Verify the correct behavior when parsing an array of inputs against an
|
| - * array of patterns, with known results. The results are encoded after
|
| - * the input strings in each row.
|
| - */
|
| -void
|
| -DateFormatTest::TestBadInput135a()
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - SimpleDateFormat* dateParse = new SimpleDateFormat(status);
|
| - if(U_FAILURE(status)) {
|
| - dataerrln("Failed creating SimpleDateFormat with %s. Quitting test", u_errorName(status));
|
| - delete dateParse;
|
| - return;
|
| - }
|
| - const char* s;
|
| - UDate date;
|
| - const uint32_t PF_LENGTH = (int32_t)(sizeof(parseFormats)/sizeof(parseFormats[0]));
|
| - const uint32_t INPUT_LENGTH = (int32_t)(sizeof(inputStrings)/sizeof(inputStrings[0]));
|
| -
|
| - dateParse->applyPattern("d MMMM, yyyy");
|
| - dateParse->adoptTimeZone(TimeZone::createDefault());
|
| - s = "not parseable";
|
| - UnicodeString thePat;
|
| - logln(UnicodeString("Trying to parse \"") + s + "\" with " + dateParse->toPattern(thePat));
|
| - //try {
|
| - date = dateParse->parse(s, status);
|
| - if (U_SUCCESS(status))
|
| - errln((UnicodeString)"FAIL: Expected exception during parse");
|
| - //}
|
| - //catch(Exception ex) {
|
| - else
|
| - logln((UnicodeString)"Exception during parse: " + (int32_t)status);
|
| - status = U_ZERO_ERROR;
|
| - //}
|
| - for (uint32_t i = 0; i < INPUT_LENGTH; i += (PF_LENGTH + 1)) {
|
| - ParsePosition parsePosition(0);
|
| - UnicodeString s( inputStrings[i]);
|
| - for (uint32_t index = 0; index < PF_LENGTH;++index) {
|
| - const char* expected = inputStrings[i + 1 + index];
|
| - dateParse->applyPattern(parseFormats[index]);
|
| - dateParse->adoptTimeZone(TimeZone::createDefault());
|
| - //try {
|
| - parsePosition.setIndex(0);
|
| - date = dateParse->parse(s, parsePosition);
|
| - if (parsePosition.getIndex() != 0) {
|
| - UnicodeString s1, s2;
|
| - s.extract(0, parsePosition.getIndex(), s1);
|
| - s.extract(parsePosition.getIndex(), s.length(), s2);
|
| - if (date == 0) {
|
| - errln((UnicodeString)"ERROR: null result fmt=\"" +
|
| - parseFormats[index] +
|
| - "\" pos=" + parsePosition.getIndex() + " " +
|
| - s1 + "|" + s2);
|
| - }
|
| - else {
|
| - UnicodeString result;
|
| - ((DateFormat*)dateParse)->format(date, result);
|
| - logln((UnicodeString)"Parsed \"" + s + "\" using \"" + dateParse->toPattern(thePat) + "\" to: " + result);
|
| - if (expected == 0)
|
| - errln((UnicodeString)"FAIL: Expected parse failure, got " + result);
|
| - else if (!(result == expected))
|
| - errln(UnicodeString("FAIL: Parse \"") + s + UnicodeString("\", expected ") + expected + UnicodeString(", got ") + result);
|
| - }
|
| - }
|
| - else if (expected != 0) {
|
| - errln(UnicodeString("FAIL: Expected ") + expected + " from \"" +
|
| - s + "\" with \"" + dateParse->toPattern(thePat) + "\"");
|
| - }
|
| - //}
|
| - //catch(Exception ex) {
|
| - if (U_FAILURE(status))
|
| - errln((UnicodeString)"An exception was thrown during parse: " + (int32_t)status);
|
| - //}
|
| - }
|
| - }
|
| - delete dateParse;
|
| - if (U_FAILURE(status))
|
| - errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * Test the parsing of two-digit years.
|
| - */
|
| -void
|
| -DateFormatTest::TestTwoDigitYear()
|
| -{
|
| - UErrorCode ec = U_ZERO_ERROR;
|
| - SimpleDateFormat fmt("dd/MM/yy", Locale::getUK(), ec);
|
| - if (U_FAILURE(ec)) {
|
| - dataerrln("FAIL: SimpleDateFormat constructor - %s", u_errorName(ec));
|
| - return;
|
| - }
|
| - parse2DigitYear(fmt, "5/6/30", date(130, UCAL_JUNE, 5));
|
| - parse2DigitYear(fmt, "4/6/50", date(50, UCAL_JUNE, 4));
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -void
|
| -DateFormatTest::parse2DigitYear(DateFormat& fmt, const char* str, UDate expected)
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - //try {
|
| - UDate d = fmt.parse(str, status);
|
| - UnicodeString thePat;
|
| - logln(UnicodeString("Parsing \"") + str + "\" with " + ((SimpleDateFormat*)&fmt)->toPattern(thePat) +
|
| - " => " + dateToString(d));
|
| - if (d != expected) errln((UnicodeString)"FAIL: Expected " + expected);
|
| - //}
|
| - //catch(ParseException e) {
|
| - if (U_FAILURE(status))
|
| - errln((UnicodeString)"FAIL: Got exception");
|
| - //}
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * Test the formatting of time zones.
|
| - */
|
| -void
|
| -DateFormatTest::TestDateFormatZone061()
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UDate date;
|
| - DateFormat *formatter;
|
| - date= 859248000000.0;
|
| - logln((UnicodeString)"Date 1997/3/25 00:00 GMT: " + date);
|
| - formatter = new SimpleDateFormat((UnicodeString)"dd-MMM-yyyyy HH:mm", Locale::getUK(), status);
|
| - if(U_FAILURE(status)) {
|
| - dataerrln("Failed creating SimpleDateFormat with %s. Quitting test", u_errorName(status));
|
| - delete formatter;
|
| - return;
|
| - }
|
| - formatter->adoptTimeZone(TimeZone::createTimeZone("GMT"));
|
| - UnicodeString temp; formatter->format(date, temp);
|
| - logln((UnicodeString)"Formatted in GMT to: " + temp);
|
| - //try {
|
| - UDate tempDate = formatter->parse(temp, status);
|
| - logln((UnicodeString)"Parsed to: " + dateToString(tempDate));
|
| - if (tempDate != date) errln((UnicodeString)"FAIL: Expected " + dateToString(date));
|
| - //}
|
| - //catch(Throwable t) {
|
| - if (U_FAILURE(status))
|
| - errln((UnicodeString)"Date Formatter throws: " + (int32_t)status);
|
| - //}
|
| - delete formatter;
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * Test the formatting of time zones.
|
| - */
|
| -void
|
| -DateFormatTest::TestDateFormatZone146()
|
| -{
|
| - TimeZone *saveDefault = TimeZone::createDefault();
|
| -
|
| - //try {
|
| - TimeZone *thedefault = TimeZone::createTimeZone("GMT");
|
| - TimeZone::setDefault(*thedefault);
|
| - // java.util.Locale.setDefault(new java.util.Locale("ar", "", ""));
|
| -
|
| - // check to be sure... its GMT all right
|
| - TimeZone *testdefault = TimeZone::createDefault();
|
| - UnicodeString testtimezone;
|
| - testdefault->getID(testtimezone);
|
| - if (testtimezone == "GMT")
|
| - logln("Test timezone = " + testtimezone);
|
| - else
|
| - dataerrln("Test timezone should be GMT, not " + testtimezone);
|
| -
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - // now try to use the default GMT time zone
|
| - GregorianCalendar *greenwichcalendar =
|
| - new GregorianCalendar(1997, 3, 4, 23, 0, status);
|
| - if (U_FAILURE(status)) {
|
| - dataerrln("Fail new GregorianCalendar: %s", u_errorName(status));
|
| - } else {
|
| - //*****************************greenwichcalendar.setTimeZone(TimeZone.getDefault());
|
| - //greenwichcalendar.set(1997, 3, 4, 23, 0);
|
| - // try anything to set hour to 23:00 !!!
|
| - greenwichcalendar->set(UCAL_HOUR_OF_DAY, 23);
|
| - // get time
|
| - UDate greenwichdate = greenwichcalendar->getTime(status);
|
| - // format every way
|
| - UnicodeString DATA [] = {
|
| - UnicodeString("simple format: "), UnicodeString("04/04/97 23:00 GMT"),
|
| - UnicodeString("MM/dd/yy HH:mm z"),
|
| - UnicodeString("full format: "), UnicodeString("Friday, April 4, 1997 11:00:00 o'clock PM GMT"),
|
| - UnicodeString("EEEE, MMMM d, yyyy h:mm:ss 'o''clock' a z"),
|
| - UnicodeString("long format: "), UnicodeString("April 4, 1997 11:00:00 PM GMT"),
|
| - UnicodeString("MMMM d, yyyy h:mm:ss a z"),
|
| - UnicodeString("default format: "), UnicodeString("04-Apr-97 11:00:00 PM"),
|
| - UnicodeString("dd-MMM-yy h:mm:ss a"),
|
| - UnicodeString("short format: "), UnicodeString("4/4/97 11:00 PM"),
|
| - UnicodeString("M/d/yy h:mm a")
|
| - };
|
| - int32_t DATA_length = (int32_t)(sizeof(DATA) / sizeof(DATA[0]));
|
| -
|
| - for (int32_t i=0; i<DATA_length; i+=3) {
|
| - DateFormat *fmt = new SimpleDateFormat(DATA[i+2], Locale::getEnglish(), status);
|
| - if (U_FAILURE(status)) {
|
| - dataerrln("Unable to create SimpleDateFormat - %s", u_errorName(status));
|
| - break;
|
| - }
|
| - fmt->setCalendar(*greenwichcalendar);
|
| - UnicodeString result;
|
| - result = fmt->format(greenwichdate, result);
|
| - logln(DATA[i] + result);
|
| - if (result != DATA[i+1])
|
| - errln("FAIL: Expected " + DATA[i+1] + ", got " + result);
|
| - delete fmt;
|
| - }
|
| - }
|
| - //}
|
| - //finally {
|
| - TimeZone::adoptDefault(saveDefault);
|
| - //}
|
| - delete testdefault;
|
| - delete greenwichcalendar;
|
| - delete thedefault;
|
| -
|
| -
|
| -}
|
| -
|
| -// -------------------------------------
|
| -
|
| -/**
|
| - * Test the formatting of dates in different locales.
|
| - */
|
| -void
|
| -DateFormatTest::TestLocaleDateFormat() // Bug 495
|
| -{
|
| - UDate testDate = date(97, UCAL_SEPTEMBER, 15);
|
| - DateFormat *dfFrench = DateFormat::createDateTimeInstance(DateFormat::FULL,
|
| - DateFormat::FULL, Locale::getFrench());
|
| - DateFormat *dfUS = DateFormat::createDateTimeInstance(DateFormat::FULL,
|
| - DateFormat::FULL, Locale::getUS());
|
| - UnicodeString expectedFRENCH ( "lundi 15 septembre 1997 \\u00E0 00:00:00 heure d\\u2019\\u00E9t\\u00E9 du Pacifique", -1, US_INV );
|
| - expectedFRENCH = expectedFRENCH.unescape();
|
| - UnicodeString expectedUS ( "Monday, September 15, 1997 at 12:00:00 AM Pacific Daylight Time" );
|
| - logln((UnicodeString)"Date set to : " + dateToString(testDate));
|
| - UnicodeString out;
|
| - if (dfUS == NULL || dfFrench == NULL){
|
| - dataerrln("Error calling DateFormat::createDateTimeInstance)");
|
| - delete dfUS;
|
| - delete dfFrench;
|
| - return;
|
| - }
|
| -
|
| - dfFrench->format(testDate, out);
|
| - logln((UnicodeString)"Date Formated with French Locale " + out);
|
| - if (!(out == expectedFRENCH))
|
| - errln((UnicodeString)"FAIL: Expected " + expectedFRENCH);
|
| - out.truncate(0);
|
| - dfUS->format(testDate, out);
|
| - logln((UnicodeString)"Date Formated with US Locale " + out);
|
| - if (!(out == expectedUS))
|
| - errln((UnicodeString)"FAIL: Expected " + expectedUS);
|
| - delete dfUS;
|
| - delete dfFrench;
|
| -}
|
| -
|
| -void
|
| -DateFormatTest::TestFormattingLocaleTimeSeparator()
|
| -{
|
| - // This test not as useful is it once was, since timeSeparator
|
| - // in the Arabic is changed back to ":" in CLDR 28.
|
| - const UDate testDate = 874266720000.; // Sun Sep 14 21:52:00 CET 1997
|
| - logln((UnicodeString)"Date set to : " + dateToString(testDate));
|
| -
|
| - const LocalPointer<const TimeZone> tz(TimeZone::createTimeZone("CET"));
|
| -
|
| - const LocalPointer<DateFormat> dfArab(DateFormat::createTimeInstance(
|
| - DateFormat::SHORT, Locale("ar")));
|
| -
|
| - const LocalPointer<DateFormat> dfLatn(DateFormat::createTimeInstance(
|
| - DateFormat::SHORT, Locale("ar", NULL, NULL, "numbers=latn")));
|
| -
|
| - if (dfLatn.isNull() || dfArab.isNull()) {
|
| - dataerrln("Error calling DateFormat::createTimeInstance()");
|
| - return;
|
| - }
|
| -
|
| - dfArab->setTimeZone(*tz);
|
| - dfLatn->setTimeZone(*tz);
|
| -
|
| - const UnicodeString expectedArab = UnicodeString(
|
| - "\\u0669:\\u0665\\u0662 \\u0645", -1, US_INV).unescape();
|
| -
|
| - const UnicodeString expectedLatn = UnicodeString(
|
| - "9:52 \\u0645", -1, US_INV).unescape();
|
| -
|
| - UnicodeString actualArab;
|
| - UnicodeString actualLatn;
|
| -
|
| - dfArab->format(testDate, actualArab);
|
| - dfLatn->format(testDate, actualLatn);
|
| -
|
| - assertEquals("Arab", expectedArab, actualArab);
|
| - assertEquals("Latn", expectedLatn, actualLatn);
|
| -}
|
| -
|
| -/**
|
| - * Test DateFormat(Calendar) API
|
| - */
|
| -void DateFormatTest::TestDateFormatCalendar() {
|
| - DateFormat *date=0, *time=0, *full=0;
|
| - Calendar *cal=0;
|
| - UnicodeString str;
|
| - ParsePosition pos;
|
| - UDate when;
|
| - UErrorCode ec = U_ZERO_ERROR;
|
| -
|
| - /* Create a formatter for date fields. */
|
| - date = DateFormat::createDateInstance(DateFormat::kShort, Locale::getUS());
|
| - if (date == NULL) {
|
| - dataerrln("FAIL: createDateInstance failed");
|
| - goto FAIL;
|
| - }
|
| -
|
| - /* Create a formatter for time fields. */
|
| - time = DateFormat::createTimeInstance(DateFormat::kShort, Locale::getUS());
|
| - if (time == NULL) {
|
| - errln("FAIL: createTimeInstance failed");
|
| - goto FAIL;
|
| - }
|
| -
|
| - /* Create a full format for output */
|
| - full = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull,
|
| - Locale::getUS());
|
| - if (full == NULL) {
|
| - errln("FAIL: createInstance failed");
|
| - goto FAIL;
|
| - }
|
| -
|
| - /* Create a calendar */
|
| - cal = Calendar::createInstance(Locale::getUS(), ec);
|
| - if (cal == NULL || U_FAILURE(ec)) {
|
| - errln((UnicodeString)"FAIL: Calendar::createInstance failed with " +
|
| - u_errorName(ec));
|
| - goto FAIL;
|
| - }
|
| -
|
| - /* Parse the date */
|
| - cal->clear();
|
| - str = UnicodeString("4/5/2001", "");
|
| - pos.setIndex(0);
|
| - date->parse(str, *cal, pos);
|
| - if (pos.getIndex() != str.length()) {
|
| - errln((UnicodeString)"FAIL: DateFormat::parse(4/5/2001) failed at " +
|
| - pos.getIndex());
|
| - goto FAIL;
|
| - }
|
| -
|
| - /* Parse the time */
|
| - str = UnicodeString("5:45 PM", "");
|
| - pos.setIndex(0);
|
| - time->parse(str, *cal, pos);
|
| - if (pos.getIndex() != str.length()) {
|
| - errln((UnicodeString)"FAIL: DateFormat::parse(17:45) failed at " +
|
| - pos.getIndex());
|
| - goto FAIL;
|
| - }
|
| -
|
| - /* Check result */
|
| - when = cal->getTime(ec);
|
| - if (U_FAILURE(ec)) {
|
| - errln((UnicodeString)"FAIL: cal->getTime() failed with " + u_errorName(ec));
|
| - goto FAIL;
|
| - }
|
| - str.truncate(0);
|
| - full->format(when, str);
|
| - // Thursday, April 5, 2001 5:45:00 PM PDT 986517900000
|
| - if (when == 986517900000.0) {
|
| - logln("Ok: Parsed result: " + str);
|
| - } else {
|
| - errln("FAIL: Parsed result: " + str + ", exp 4/5/2001 5:45 PM");
|
| - }
|
| -
|
| - FAIL:
|
| - delete date;
|
| - delete time;
|
| - delete full;
|
| - delete cal;
|
| -}
|
| -
|
| -/**
|
| - * Test DateFormat's parsing of space characters. See jitterbug 1916.
|
| - */
|
| -void DateFormatTest::TestSpaceParsing() {
|
| - const char* DATA[] = {
|
| - "yyyy MM dd HH:mm:ss",
|
| -
|
| - // pattern, input, expected parse or NULL if expect parse failure
|
| - "MMMM d yy", " 04 05 06", "2006 04 05 00:00:00",
|
| - NULL, "04 05 06", "2006 04 05 00:00:00",
|
| -
|
| - "MM d yy", " 04 05 06", "2006 04 05 00:00:00",
|
| - NULL, "04 05 06", "2006 04 05 00:00:00",
|
| - NULL, "04/05/06", "2006 04 05 00:00:00",
|
| - NULL, "04-05-06", "2006 04 05 00:00:00",
|
| - NULL, "04.05.06", "2006 04 05 00:00:00",
|
| - NULL, "04 / 05 / 06", "2006 04 05 00:00:00",
|
| - NULL, "Apr / 05/ 06", "2006 04 05 00:00:00",
|
| - NULL, "Apr-05-06", "2006 04 05 00:00:00",
|
| - NULL, "Apr 05, 2006", "2006 04 05 00:00:00",
|
| -
|
| - "MMMM d yy", " Apr 05 06", "2006 04 05 00:00:00",
|
| - NULL, "Apr 05 06", "2006 04 05 00:00:00",
|
| - NULL, "Apr05 06", "2006 04 05 00:00:00",
|
| -
|
| - "hh:mm:ss a", "12:34:56 PM", "1970 01 01 12:34:56",
|
| - NULL, "12:34:56PM", "1970 01 01 12:34:56",
|
| - NULL, "12.34.56PM", "1970 01 01 12:34:56",
|
| - NULL, "12 : 34 : 56 PM", "1970 01 01 12:34:56",
|
| -
|
| - "MM d yy 'at' hh:mm:ss a", "04/05/06 12:34:56 PM", "2006 04 05 12:34:56",
|
| -
|
| - "MMMM dd yyyy hh:mm a", "September 27, 1964 21:56 PM", "1964 09 28 09:56:00",
|
| - NULL, "November 4, 2008 0:13 AM", "2008 11 04 00:13:00",
|
| -
|
| - "HH'h'mm'min'ss's'", "12h34min56s", "1970 01 01 12:34:56",
|
| - NULL, "12h34mi56s", "1970 01 01 12:34:56",
|
| - NULL, "12h34m56s", "1970 01 01 12:34:56",
|
| - NULL, "12:34:56", "1970 01 01 12:34:56"
|
| - };
|
| - const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
|
| -
|
| - expectParse(DATA, DATA_len, Locale("en"));
|
| -}
|
| -
|
| -/**
|
| - * Test handling of "HHmmss" pattern.
|
| - */
|
| -void DateFormatTest::TestExactCountFormat() {
|
| - const char* DATA[] = {
|
| - "yyyy MM dd HH:mm:ss",
|
| -
|
| - // pattern, input, expected parse or NULL if expect parse failure
|
| - "HHmmss", "123456", "1970 01 01 12:34:56",
|
| - NULL, "12345", "1970 01 01 01:23:45",
|
| - NULL, "1234", NULL,
|
| - NULL, "00-05", NULL,
|
| - NULL, "12-34", NULL,
|
| - NULL, "00+05", NULL,
|
| - "ahhmm", "PM730", "1970 01 01 19:30:00",
|
| - };
|
| - const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
|
| -
|
| - expectParse(DATA, DATA_len, Locale("en"));
|
| -}
|
| -
|
| -/**
|
| - * Test handling of white space.
|
| - */
|
| -void DateFormatTest::TestWhiteSpaceParsing() {
|
| - const char* DATA[] = {
|
| - "yyyy MM dd",
|
| -
|
| - // pattern, input, expected parse or null if expect parse failure
|
| -
|
| - // Pattern space run should parse input text space run
|
| - "MM d yy", " 04 01 03", "2003 04 01",
|
| - NULL, " 04 01 03 ", "2003 04 01",
|
| - };
|
| - const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
|
| -
|
| - expectParse(DATA, DATA_len, Locale("en"));
|
| -}
|
| -
|
| -
|
| -void DateFormatTest::TestInvalidPattern() {
|
| - UErrorCode ec = U_ZERO_ERROR;
|
| - SimpleDateFormat f(UnicodeString("Yesterday"), ec);
|
| - if (U_FAILURE(ec)) {
|
| - dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(ec));
|
| - return;
|
| - }
|
| - UnicodeString out;
|
| - FieldPosition pos;
|
| - f.format((UDate)0, out, pos);
|
| - logln(out);
|
| - // The bug is that the call to format() will crash. By not
|
| - // crashing, the test passes.
|
| -}
|
| -
|
| -void DateFormatTest::TestGreekMay() {
|
| - UErrorCode ec = U_ZERO_ERROR;
|
| - UDate date = -9896080848000.0;
|
| - SimpleDateFormat fmt("EEEE, dd MMMM yyyy h:mm:ss a", Locale("el", "", ""), ec);
|
| - if (U_FAILURE(ec)) {
|
| - dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(ec));
|
| - return;
|
| - }
|
| - UnicodeString str;
|
| - fmt.format(date, str);
|
| - ParsePosition pos(0);
|
| - UDate d2 = fmt.parse(str, pos);
|
| - if (date != d2) {
|
| - errln("FAIL: unable to parse strings where case-folding changes length");
|
| - }
|
| -}
|
| -
|
| -void DateFormatTest::TestStandAloneMonths()
|
| -{
|
| - const char *EN_DATA[] = {
|
| - "yyyy MM dd HH:mm:ss",
|
| -
|
| - "yyyy LLLL dd H:mm:ss", "fp", "2004 03 10 16:36:31", "2004 March 10 16:36:31", "2004 03 10 16:36:31",
|
| - "yyyy LLL dd H:mm:ss", "fp", "2004 03 10 16:36:31", "2004 Mar 10 16:36:31", "2004 03 10 16:36:31",
|
| - "yyyy LLLL dd H:mm:ss", "F", "2004 03 10 16:36:31", "2004 March 10 16:36:31",
|
| - "yyyy LLL dd H:mm:ss", "pf", "2004 Mar 10 16:36:31", "2004 03 10 16:36:31", "2004 Mar 10 16:36:31",
|
| -
|
| - "LLLL", "fp", "1970 01 01 0:00:00", "January", "1970 01 01 0:00:00",
|
| - "LLLL", "fp", "1970 02 01 0:00:00", "February", "1970 02 01 0:00:00",
|
| - "LLLL", "fp", "1970 03 01 0:00:00", "March", "1970 03 01 0:00:00",
|
| - "LLLL", "fp", "1970 04 01 0:00:00", "April", "1970 04 01 0:00:00",
|
| - "LLLL", "fp", "1970 05 01 0:00:00", "May", "1970 05 01 0:00:00",
|
| - "LLLL", "fp", "1970 06 01 0:00:00", "June", "1970 06 01 0:00:00",
|
| - "LLLL", "fp", "1970 07 01 0:00:00", "July", "1970 07 01 0:00:00",
|
| - "LLLL", "fp", "1970 08 01 0:00:00", "August", "1970 08 01 0:00:00",
|
| - "LLLL", "fp", "1970 09 01 0:00:00", "September", "1970 09 01 0:00:00",
|
| - "LLLL", "fp", "1970 10 01 0:00:00", "October", "1970 10 01 0:00:00",
|
| - "LLLL", "fp", "1970 11 01 0:00:00", "November", "1970 11 01 0:00:00",
|
| - "LLLL", "fp", "1970 12 01 0:00:00", "December", "1970 12 01 0:00:00",
|
| -
|
| - "LLL", "fp", "1970 01 01 0:00:00", "Jan", "1970 01 01 0:00:00",
|
| - "LLL", "fp", "1970 02 01 0:00:00", "Feb", "1970 02 01 0:00:00",
|
| - "LLL", "fp", "1970 03 01 0:00:00", "Mar", "1970 03 01 0:00:00",
|
| - "LLL", "fp", "1970 04 01 0:00:00", "Apr", "1970 04 01 0:00:00",
|
| - "LLL", "fp", "1970 05 01 0:00:00", "May", "1970 05 01 0:00:00",
|
| - "LLL", "fp", "1970 06 01 0:00:00", "Jun", "1970 06 01 0:00:00",
|
| - "LLL", "fp", "1970 07 01 0:00:00", "Jul", "1970 07 01 0:00:00",
|
| - "LLL", "fp", "1970 08 01 0:00:00", "Aug", "1970 08 01 0:00:00",
|
| - "LLL", "fp", "1970 09 01 0:00:00", "Sep", "1970 09 01 0:00:00",
|
| - "LLL", "fp", "1970 10 01 0:00:00", "Oct", "1970 10 01 0:00:00",
|
| - "LLL", "fp", "1970 11 01 0:00:00", "Nov", "1970 11 01 0:00:00",
|
| - "LLL", "fp", "1970 12 01 0:00:00", "Dec", "1970 12 01 0:00:00",
|
| - };
|
| -
|
| - const char *CS_DATA[] = {
|
| - "yyyy MM dd HH:mm:ss",
|
| -
|
| - "yyyy LLLL dd H:mm:ss", "fp", "2004 04 10 16:36:31", "2004 duben 10 16:36:31", "2004 04 10 16:36:31",
|
| - "yyyy MMMM dd H:mm:ss", "fp", "2004 04 10 16:36:31", "2004 dubna 10 16:36:31", "2004 04 10 16:36:31",
|
| - "yyyy LLL dd H:mm:ss", "fp", "2004 04 10 16:36:31", "2004 dub 10 16:36:31", "2004 04 10 16:36:31",
|
| - "yyyy LLLL dd H:mm:ss", "F", "2004 04 10 16:36:31", "2004 duben 10 16:36:31",
|
| - "yyyy MMMM dd H:mm:ss", "F", "2004 04 10 16:36:31", "2004 dubna 10 16:36:31",
|
| - "yyyy LLLL dd H:mm:ss", "pf", "2004 duben 10 16:36:31", "2004 04 10 16:36:31", "2004 duben 10 16:36:31",
|
| - "yyyy MMMM dd H:mm:ss", "pf", "2004 dubna 10 16:36:31", "2004 04 10 16:36:31", "2004 dubna 10 16:36:31",
|
| -
|
| - "LLLL", "fp", "1970 01 01 0:00:00", "leden", "1970 01 01 0:00:00",
|
| - "LLLL", "fp", "1970 02 01 0:00:00", "\\u00FAnor", "1970 02 01 0:00:00",
|
| - "LLLL", "fp", "1970 03 01 0:00:00", "b\\u0159ezen", "1970 03 01 0:00:00",
|
| - "LLLL", "fp", "1970 04 01 0:00:00", "duben", "1970 04 01 0:00:00",
|
| - "LLLL", "fp", "1970 05 01 0:00:00", "kv\\u011Bten", "1970 05 01 0:00:00",
|
| - "LLLL", "fp", "1970 06 01 0:00:00", "\\u010Derven", "1970 06 01 0:00:00",
|
| - "LLLL", "fp", "1970 07 01 0:00:00", "\\u010Dervenec", "1970 07 01 0:00:00",
|
| - "LLLL", "fp", "1970 08 01 0:00:00", "srpen", "1970 08 01 0:00:00",
|
| - "LLLL", "fp", "1970 09 01 0:00:00", "z\\u00E1\\u0159\\u00ED", "1970 09 01 0:00:00",
|
| - "LLLL", "fp", "1970 10 01 0:00:00", "\\u0159\\u00EDjen", "1970 10 01 0:00:00",
|
| - "LLLL", "fp", "1970 11 01 0:00:00", "listopad", "1970 11 01 0:00:00",
|
| - "LLLL", "fp", "1970 12 01 0:00:00", "prosinec", "1970 12 01 0:00:00",
|
| -
|
| - "LLL", "fp", "1970 01 01 0:00:00", "led", "1970 01 01 0:00:00",
|
| - "LLL", "fp", "1970 02 01 0:00:00", "\\u00FAno", "1970 02 01 0:00:00",
|
| - "LLL", "fp", "1970 03 01 0:00:00", "b\\u0159e", "1970 03 01 0:00:00",
|
| - "LLL", "fp", "1970 04 01 0:00:00", "dub", "1970 04 01 0:00:00",
|
| - "LLL", "fp", "1970 05 01 0:00:00", "kv\\u011B", "1970 05 01 0:00:00",
|
| - "LLL", "fp", "1970 06 01 0:00:00", "\\u010Dvn", "1970 06 01 0:00:00",
|
| - "LLL", "fp", "1970 07 01 0:00:00", "\\u010Dvc", "1970 07 01 0:00:00",
|
| - "LLL", "fp", "1970 08 01 0:00:00", "srp", "1970 08 01 0:00:00",
|
| - "LLL", "fp", "1970 09 01 0:00:00", "z\\u00E1\\u0159", "1970 09 01 0:00:00",
|
| - "LLL", "fp", "1970 10 01 0:00:00", "\\u0159\\u00EDj", "1970 10 01 0:00:00",
|
| - "LLL", "fp", "1970 11 01 0:00:00", "lis", "1970 11 01 0:00:00",
|
| - "LLL", "fp", "1970 12 01 0:00:00", "pro", "1970 12 01 0:00:00",
|
| - };
|
| -
|
| - expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
|
| - expect(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
|
| -}
|
| -
|
| -void DateFormatTest::TestStandAloneDays()
|
| -{
|
| - const char *EN_DATA[] = {
|
| - "yyyy MM dd HH:mm:ss",
|
| -
|
| - "cccc", "fp", "1970 01 04 0:00:00", "Sunday", "1970 01 04 0:00:00",
|
| - "cccc", "fp", "1970 01 05 0:00:00", "Monday", "1970 01 05 0:00:00",
|
| - "cccc", "fp", "1970 01 06 0:00:00", "Tuesday", "1970 01 06 0:00:00",
|
| - "cccc", "fp", "1970 01 07 0:00:00", "Wednesday", "1970 01 07 0:00:00",
|
| - "cccc", "fp", "1970 01 01 0:00:00", "Thursday", "1970 01 01 0:00:00",
|
| - "cccc", "fp", "1970 01 02 0:00:00", "Friday", "1970 01 02 0:00:00",
|
| - "cccc", "fp", "1970 01 03 0:00:00", "Saturday", "1970 01 03 0:00:00",
|
| -
|
| - "ccc", "fp", "1970 01 04 0:00:00", "Sun", "1970 01 04 0:00:00",
|
| - "ccc", "fp", "1970 01 05 0:00:00", "Mon", "1970 01 05 0:00:00",
|
| - "ccc", "fp", "1970 01 06 0:00:00", "Tue", "1970 01 06 0:00:00",
|
| - "ccc", "fp", "1970 01 07 0:00:00", "Wed", "1970 01 07 0:00:00",
|
| - "ccc", "fp", "1970 01 01 0:00:00", "Thu", "1970 01 01 0:00:00",
|
| - "ccc", "fp", "1970 01 02 0:00:00", "Fri", "1970 01 02 0:00:00",
|
| - "ccc", "fp", "1970 01 03 0:00:00", "Sat", "1970 01 03 0:00:00",
|
| - };
|
| -
|
| - const char *CS_DATA[] = {
|
| - "yyyy MM dd HH:mm:ss",
|
| -
|
| - "cccc", "fp", "1970 01 04 0:00:00", "ned\\u011Ble", "1970 01 04 0:00:00",
|
| - "cccc", "fp", "1970 01 05 0:00:00", "pond\\u011Bl\\u00ED", "1970 01 05 0:00:00",
|
| - "cccc", "fp", "1970 01 06 0:00:00", "\\u00FAter\\u00FD", "1970 01 06 0:00:00",
|
| - "cccc", "fp", "1970 01 07 0:00:00", "st\\u0159eda", "1970 01 07 0:00:00",
|
| - "cccc", "fp", "1970 01 01 0:00:00", "\\u010Dtvrtek", "1970 01 01 0:00:00",
|
| - "cccc", "fp", "1970 01 02 0:00:00", "p\\u00E1tek", "1970 01 02 0:00:00",
|
| - "cccc", "fp", "1970 01 03 0:00:00", "sobota", "1970 01 03 0:00:00",
|
| -
|
| - "ccc", "fp", "1970 01 04 0:00:00", "ne", "1970 01 04 0:00:00",
|
| - "ccc", "fp", "1970 01 05 0:00:00", "po", "1970 01 05 0:00:00",
|
| - "ccc", "fp", "1970 01 06 0:00:00", "\\u00FAt", "1970 01 06 0:00:00",
|
| - "ccc", "fp", "1970 01 07 0:00:00", "st", "1970 01 07 0:00:00",
|
| - "ccc", "fp", "1970 01 01 0:00:00", "\\u010Dt", "1970 01 01 0:00:00",
|
| - "ccc", "fp", "1970 01 02 0:00:00", "p\\u00E1", "1970 01 02 0:00:00",
|
| - "ccc", "fp", "1970 01 03 0:00:00", "so", "1970 01 03 0:00:00",
|
| - };
|
| -
|
| - expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
|
| - expect(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
|
| -}
|
| -
|
| -void DateFormatTest::TestShortDays()
|
| -{
|
| - const char *EN_DATA[] = {
|
| - "yyyy MM dd HH:mm:ss",
|
| -
|
| - "EEEEEE, MMM d y", "fp", "2013 01 13 0:00:00", "Su, Jan 13 2013", "2013 01 13 0:00:00",
|
| - "EEEEEE, MMM d y", "fp", "2013 01 16 0:00:00", "We, Jan 16 2013", "2013 01 16 0:00:00",
|
| - "EEEEEE d", "fp", "1970 01 17 0:00:00", "Sa 17", "1970 01 17 0:00:00",
|
| - "cccccc d", "fp", "1970 01 17 0:00:00", "Sa 17", "1970 01 17 0:00:00",
|
| - "cccccc", "fp", "1970 01 03 0:00:00", "Sa", "1970 01 03 0:00:00",
|
| - };
|
| - const char *SV_DATA[] = {
|
| - "yyyy MM dd HH:mm:ss",
|
| -
|
| - "EEEEEE d MMM y", "fp", "2013 01 13 0:00:00", "s\\u00F6 13 jan. 2013", "2013 01 13 0:00:00",
|
| - "EEEEEE d MMM y", "fp", "2013 01 16 0:00:00", "on 16 jan. 2013", "2013 01 16 0:00:00",
|
| - "EEEEEE d", "fp", "1970 01 17 0:00:00", "l\\u00F6 17", "1970 01 17 0:00:00",
|
| - "cccccc d", "fp", "1970 01 17 0:00:00", "l\\u00F6 17", "1970 01 17 0:00:00",
|
| - "cccccc", "fp", "1970 01 03 0:00:00", "l\\u00F6", "1970 01 03 0:00:00",
|
| - };
|
| - expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
|
| - expect(SV_DATA, ARRAY_SIZE(SV_DATA), Locale("sv", "", ""));
|
| -}
|
| -
|
| -void DateFormatTest::TestNarrowNames()
|
| -{
|
| - const char *EN_DATA[] = {
|
| - "yyyy MM dd HH:mm:ss",
|
| -
|
| - "yyyy MMMMM dd H:mm:ss", "2004 03 10 16:36:31", "2004 M 10 16:36:31",
|
| - "yyyy LLLLL dd H:mm:ss", "2004 03 10 16:36:31", "2004 M 10 16:36:31",
|
| -
|
| - "MMMMM", "1970 01 01 0:00:00", "J",
|
| - "MMMMM", "1970 02 01 0:00:00", "F",
|
| - "MMMMM", "1970 03 01 0:00:00", "M",
|
| - "MMMMM", "1970 04 01 0:00:00", "A",
|
| - "MMMMM", "1970 05 01 0:00:00", "M",
|
| - "MMMMM", "1970 06 01 0:00:00", "J",
|
| - "MMMMM", "1970 07 01 0:00:00", "J",
|
| - "MMMMM", "1970 08 01 0:00:00", "A",
|
| - "MMMMM", "1970 09 01 0:00:00", "S",
|
| - "MMMMM", "1970 10 01 0:00:00", "O",
|
| - "MMMMM", "1970 11 01 0:00:00", "N",
|
| - "MMMMM", "1970 12 01 0:00:00", "D",
|
| -
|
| - "LLLLL", "1970 01 01 0:00:00", "J",
|
| - "LLLLL", "1970 02 01 0:00:00", "F",
|
| - "LLLLL", "1970 03 01 0:00:00", "M",
|
| - "LLLLL", "1970 04 01 0:00:00", "A",
|
| - "LLLLL", "1970 05 01 0:00:00", "M",
|
| - "LLLLL", "1970 06 01 0:00:00", "J",
|
| - "LLLLL", "1970 07 01 0:00:00", "J",
|
| - "LLLLL", "1970 08 01 0:00:00", "A",
|
| - "LLLLL", "1970 09 01 0:00:00", "S",
|
| - "LLLLL", "1970 10 01 0:00:00", "O",
|
| - "LLLLL", "1970 11 01 0:00:00", "N",
|
| - "LLLLL", "1970 12 01 0:00:00", "D",
|
| -
|
| - "EEEEE", "1970 01 04 0:00:00", "S",
|
| - "EEEEE", "1970 01 05 0:00:00", "M",
|
| - "EEEEE", "1970 01 06 0:00:00", "T",
|
| - "EEEEE", "1970 01 07 0:00:00", "W",
|
| - "EEEEE", "1970 01 01 0:00:00", "T",
|
| - "EEEEE", "1970 01 02 0:00:00", "F",
|
| - "EEEEE", "1970 01 03 0:00:00", "S",
|
| -
|
| - "ccccc", "1970 01 04 0:00:00", "S",
|
| - "ccccc", "1970 01 05 0:00:00", "M",
|
| - "ccccc", "1970 01 06 0:00:00", "T",
|
| - "ccccc", "1970 01 07 0:00:00", "W",
|
| - "ccccc", "1970 01 01 0:00:00", "T",
|
| - "ccccc", "1970 01 02 0:00:00", "F",
|
| - "ccccc", "1970 01 03 0:00:00", "S",
|
| -
|
| - "h:mm a", "2015 01 01 10:00:00", "10:00 AM",
|
| - "h:mm a", "2015 01 01 22:00:00", "10:00 PM",
|
| - "h:mm aaaaa", "2015 01 01 10:00:00", "10:00 a",
|
| - "h:mm aaaaa", "2015 01 01 22:00:00", "10:00 p",
|
| - };
|
| -
|
| - const char *CS_DATA[] = {
|
| - "yyyy MM dd HH:mm:ss",
|
| -
|
| - "yyyy LLLLL dd H:mm:ss", "2004 04 10 16:36:31", "2004 4 10 16:36:31",
|
| - "yyyy MMMMM dd H:mm:ss", "2004 04 10 16:36:31", "2004 4 10 16:36:31",
|
| -
|
| - "MMMMM", "1970 01 01 0:00:00", "1",
|
| - "MMMMM", "1970 02 01 0:00:00", "2",
|
| - "MMMMM", "1970 03 01 0:00:00", "3",
|
| - "MMMMM", "1970 04 01 0:00:00", "4",
|
| - "MMMMM", "1970 05 01 0:00:00", "5",
|
| - "MMMMM", "1970 06 01 0:00:00", "6",
|
| - "MMMMM", "1970 07 01 0:00:00", "7",
|
| - "MMMMM", "1970 08 01 0:00:00", "8",
|
| - "MMMMM", "1970 09 01 0:00:00", "9",
|
| - "MMMMM", "1970 10 01 0:00:00", "10",
|
| - "MMMMM", "1970 11 01 0:00:00", "11",
|
| - "MMMMM", "1970 12 01 0:00:00", "12",
|
| -
|
| - "LLLLL", "1970 01 01 0:00:00", "1",
|
| - "LLLLL", "1970 02 01 0:00:00", "2",
|
| - "LLLLL", "1970 03 01 0:00:00", "3",
|
| - "LLLLL", "1970 04 01 0:00:00", "4",
|
| - "LLLLL", "1970 05 01 0:00:00", "5",
|
| - "LLLLL", "1970 06 01 0:00:00", "6",
|
| - "LLLLL", "1970 07 01 0:00:00", "7",
|
| - "LLLLL", "1970 08 01 0:00:00", "8",
|
| - "LLLLL", "1970 09 01 0:00:00", "9",
|
| - "LLLLL", "1970 10 01 0:00:00", "10",
|
| - "LLLLL", "1970 11 01 0:00:00", "11",
|
| - "LLLLL", "1970 12 01 0:00:00", "12",
|
| -
|
| - "EEEEE", "1970 01 04 0:00:00", "N",
|
| - "EEEEE", "1970 01 05 0:00:00", "P",
|
| - "EEEEE", "1970 01 06 0:00:00", "\\u00DA",
|
| - "EEEEE", "1970 01 07 0:00:00", "S",
|
| - "EEEEE", "1970 01 01 0:00:00", "\\u010C",
|
| - "EEEEE", "1970 01 02 0:00:00", "P",
|
| - "EEEEE", "1970 01 03 0:00:00", "S",
|
| -
|
| - "ccccc", "1970 01 04 0:00:00", "N",
|
| - "ccccc", "1970 01 05 0:00:00", "P",
|
| - "ccccc", "1970 01 06 0:00:00", "\\u00DA",
|
| - "ccccc", "1970 01 07 0:00:00", "S",
|
| - "ccccc", "1970 01 01 0:00:00", "\\u010C",
|
| - "ccccc", "1970 01 02 0:00:00", "P",
|
| - "ccccc", "1970 01 03 0:00:00", "S",
|
| -
|
| - "h:mm a", "2015 01 01 10:00:00", "10:00 dop.",
|
| - "h:mm a", "2015 01 01 22:00:00", "10:00 odp.",
|
| - "h:mm aaaaa", "2015 01 01 10:00:00", "10:00 dop.",
|
| - "h:mm aaaaa", "2015 01 01 22:00:00", "10:00 odp.",
|
| - };
|
| -
|
| - const char *CA_DATA[] = {
|
| - "yyyy MM dd HH:mm:ss",
|
| -
|
| - "h:mm a", "2015 01 01 10:00:00", "10:00 a. m.",
|
| - "h:mm a", "2015 01 01 22:00:00", "10:00 p. m.",
|
| - "h:mm aaaaa", "2015 01 01 10:00:00", "10:00 a. m.",
|
| - "h:mm aaaaa", "2015 01 01 22:00:00", "10:00 p. m.",
|
| - };
|
| -
|
| - expectFormat(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
|
| - expectFormat(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
|
| - expectFormat(CA_DATA, ARRAY_SIZE(CA_DATA), Locale("ca", "", ""));
|
| -}
|
| -
|
| -void DateFormatTest::TestEras()
|
| -{
|
| - const char *EN_DATA[] = {
|
| - "yyyy MM dd",
|
| -
|
| - "MMMM dd yyyy G", "fp", "1951 07 17", "July 17 1951 AD", "1951 07 17",
|
| - "MMMM dd yyyy GG", "fp", "1951 07 17", "July 17 1951 AD", "1951 07 17",
|
| - "MMMM dd yyyy GGG", "fp", "1951 07 17", "July 17 1951 AD", "1951 07 17",
|
| - "MMMM dd yyyy GGGG", "fp", "1951 07 17", "July 17 1951 Anno Domini", "1951 07 17",
|
| -
|
| - "MMMM dd yyyy G", "fp", "-438 07 17", "July 17 0439 BC", "-438 07 17",
|
| - "MMMM dd yyyy GG", "fp", "-438 07 17", "July 17 0439 BC", "-438 07 17",
|
| - "MMMM dd yyyy GGG", "fp", "-438 07 17", "July 17 0439 BC", "-438 07 17",
|
| - "MMMM dd yyyy GGGG", "fp", "-438 07 17", "July 17 0439 Before Christ", "-438 07 17",
|
| - };
|
| -
|
| - expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
|
| -}
|
| -
|
| -void DateFormatTest::TestQuarters()
|
| -{
|
| - const char *EN_DATA[] = {
|
| - "yyyy MM dd",
|
| -
|
| - "Q", "fp", "1970 01 01", "1", "1970 01 01",
|
| - "QQ", "fp", "1970 04 01", "02", "1970 04 01",
|
| - "QQQ", "fp", "1970 07 01", "Q3", "1970 07 01",
|
| - "QQQQ", "fp", "1970 10 01", "4th quarter", "1970 10 01",
|
| -
|
| - "q", "fp", "1970 01 01", "1", "1970 01 01",
|
| - "qq", "fp", "1970 04 01", "02", "1970 04 01",
|
| - "qqq", "fp", "1970 07 01", "Q3", "1970 07 01",
|
| - "qqqq", "fp", "1970 10 01", "4th quarter", "1970 10 01",
|
| -
|
| - "Qyy", "fp", "2015 04 01", "215", "2015 04 01",
|
| - "QQyy", "fp", "2015 07 01", "0315", "2015 07 01",
|
| - };
|
| -
|
| - expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
|
| -}
|
| -
|
| -/**
|
| - * Test parsing. Input is an array that starts with the following
|
| - * header:
|
| - *
|
| - * [0] = pattern string to parse [i+2] with
|
| - *
|
| - * followed by test cases, each of which is 3 array elements:
|
| - *
|
| - * [i] = pattern, or NULL to reuse prior pattern
|
| - * [i+1] = input string
|
| - * [i+2] = expected parse result (parsed with pattern [0])
|
| - *
|
| - * If expect parse failure, then [i+2] should be NULL.
|
| - */
|
| -void DateFormatTest::expectParse(const char** data, int32_t data_length,
|
| - const Locale& loc) {
|
| - const UDate FAIL = (UDate) -1;
|
| - const UnicodeString FAIL_STR("parse failure");
|
| - int32_t i = 0;
|
| -
|
| - UErrorCode ec = U_ZERO_ERROR;
|
| - SimpleDateFormat fmt("", loc, ec);
|
| - SimpleDateFormat ref(data[i++], loc, ec);
|
| - SimpleDateFormat gotfmt("G yyyy MM dd HH:mm:ss z", loc, ec);
|
| - if (U_FAILURE(ec)) {
|
| - dataerrln("FAIL: SimpleDateFormat constructor - %s", u_errorName(ec));
|
| - return;
|
| - }
|
| -
|
| - const char* currentPat = NULL;
|
| - while (i<data_length) {
|
| - const char* pattern = data[i++];
|
| - const char* input = data[i++];
|
| - const char* expected = data[i++];
|
| -
|
| - ec = U_ZERO_ERROR;
|
| - if (pattern != NULL) {
|
| - fmt.applyPattern(pattern);
|
| - currentPat = pattern;
|
| - }
|
| - UDate got = fmt.parse(input, ec);
|
| - UnicodeString gotstr(FAIL_STR);
|
| - if (U_FAILURE(ec)) {
|
| - got = FAIL;
|
| - } else {
|
| - gotstr.remove();
|
| - gotfmt.format(got, gotstr);
|
| - }
|
| -
|
| - UErrorCode ec2 = U_ZERO_ERROR;
|
| - UDate exp = FAIL;
|
| - UnicodeString expstr(FAIL_STR);
|
| - if (expected != NULL) {
|
| - expstr = expected;
|
| - exp = ref.parse(expstr, ec2);
|
| - if (U_FAILURE(ec2)) {
|
| - // This only happens if expected is in wrong format --
|
| - // should never happen once test is debugged.
|
| - errln("FAIL: Internal test error");
|
| - return;
|
| - }
|
| - }
|
| -
|
| - if (got == exp) {
|
| - logln((UnicodeString)"Ok: " + input + " x " +
|
| - currentPat + " => " + gotstr);
|
| - } else {
|
| - errln((UnicodeString)"FAIL: " + input + " x " +
|
| - currentPat + " => " + gotstr + ", expected " +
|
| - expstr);
|
| - }
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Test formatting and parsing. Input is an array that starts
|
| - * with the following header:
|
| - *
|
| - * [0] = pattern string to parse [i+2] with
|
| - *
|
| - * followed by test cases, each of which is 3 array elements:
|
| - *
|
| - * [i] = pattern, or null to reuse prior pattern
|
| - * [i+1] = control string, either "fp", "pf", or "F".
|
| - * [i+2..] = data strings
|
| - *
|
| - * The number of data strings depends on the control string.
|
| - * Examples:
|
| - * 1. "y/M/d H:mm:ss.SS", "fp", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.56", "2004 03 10 16:36:31.560",
|
| - * 'f': Format date [i+2] (as parsed using pattern [0]) and expect string [i+3].
|
| - * 'p': Parse string [i+3] and expect date [i+4].
|
| - *
|
| - * 2. "y/M/d H:mm:ss.SSS", "F", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.567"
|
| - * 'F': Format date [i+2] and expect string [i+3],
|
| - * then parse string [i+3] and expect date [i+2].
|
| - *
|
| - * 3. "y/M/d H:mm:ss.SSSS", "pf", "2004/3/10 16:36:31.5679", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.5670",
|
| - * 'p': Parse string [i+2] and expect date [i+3].
|
| - * 'f': Format date [i+3] and expect string [i+4].
|
| - */
|
| -void DateFormatTest::expect(const char** data, int32_t data_length,
|
| - const Locale& loc) {
|
| - int32_t i = 0;
|
| - UErrorCode ec = U_ZERO_ERROR;
|
| - UnicodeString str, str2;
|
| - SimpleDateFormat fmt("", loc, ec);
|
| - SimpleDateFormat ref(data[i++], loc, ec);
|
| - SimpleDateFormat univ("EE G yyyy MM dd HH:mm:ss.SSS z", loc, ec);
|
| - if (U_FAILURE(ec)) {
|
| - dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(ec));
|
| - return;
|
| - }
|
| -
|
| - UnicodeString currentPat;
|
| - while (i<data_length) {
|
| - const char* pattern = data[i++];
|
| - if (pattern != NULL) {
|
| - fmt.applyPattern(pattern);
|
| - currentPat = pattern;
|
| - }
|
| -
|
| - const char* control = data[i++];
|
| -
|
| - if (uprv_strcmp(control, "fp") == 0) {
|
| - // 'f'
|
| - const char* datestr = data[i++];
|
| - const char* string = data[i++];
|
| - UDate date = ref.parse(ctou(datestr), ec);
|
| - if (!assertSuccess("parse", ec)) return;
|
| - assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
|
| - ctou(string),
|
| - fmt.format(date, str.remove()));
|
| - // 'p'
|
| - datestr = data[i++];
|
| - date = ref.parse(ctou(datestr), ec);
|
| - if (!assertSuccess("parse", ec)) return;
|
| - UDate parsedate = fmt.parse(ctou(string), ec);
|
| - if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
|
| - assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
|
| - univ.format(date, str.remove()),
|
| - univ.format(parsedate, str2.remove()));
|
| - }
|
| - }
|
| -
|
| - else if (uprv_strcmp(control, "pf") == 0) {
|
| - // 'p'
|
| - const char* string = data[i++];
|
| - const char* datestr = data[i++];
|
| - UDate date = ref.parse(ctou(datestr), ec);
|
| - if (!assertSuccess("parse", ec)) return;
|
| - UDate parsedate = fmt.parse(ctou(string), ec);
|
| - if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
|
| - assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
|
| - univ.format(date, str.remove()),
|
| - univ.format(parsedate, str2.remove()));
|
| - }
|
| - // 'f'
|
| - string = data[i++];
|
| - assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
|
| - ctou(string),
|
| - fmt.format(date, str.remove()));
|
| - }
|
| -
|
| - else if (uprv_strcmp(control, "F") == 0) {
|
| - const char* datestr = data[i++];
|
| - const char* string = data[i++];
|
| - UDate date = ref.parse(ctou(datestr), ec);
|
| - if (!assertSuccess("parse", ec)) return;
|
| - assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
|
| - ctou(string),
|
| - fmt.format(date, str.remove()));
|
| -
|
| - UDate parsedate = fmt.parse(string, ec);
|
| - if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
|
| - assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
|
| - univ.format(date, str.remove()),
|
| - univ.format(parsedate, str2.remove()));
|
| - }
|
| - }
|
| -
|
| - else {
|
| - errln((UnicodeString)"FAIL: Invalid control string " + control);
|
| - return;
|
| - }
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Test formatting. Input is an array that starts
|
| - * with the following header:
|
| - *
|
| - * [0] = pattern string to parse [i+2] with
|
| - *
|
| - * followed by test cases, each of which is 3 array elements:
|
| - *
|
| - * [i] = pattern, or null to reuse prior pattern
|
| - * [i+1] = data string a
|
| - * [i+2] = data string b
|
| - *
|
| - * Examples:
|
| - * Format date [i+1] and expect string [i+2].
|
| - *
|
| - * "y/M/d H:mm:ss.SSSS", "2004/3/10 16:36:31.5679", "2004 03 10 16:36:31.567"
|
| - */
|
| -void DateFormatTest::expectFormat(const char** data, int32_t data_length,
|
| - const Locale& loc) {
|
| - int32_t i = 0;
|
| - UErrorCode ec = U_ZERO_ERROR;
|
| - UnicodeString str, str2;
|
| - SimpleDateFormat fmt("", loc, ec);
|
| - SimpleDateFormat ref(data[i++], loc, ec);
|
| - SimpleDateFormat univ("EE G yyyy MM dd HH:mm:ss.SSS z", loc, ec);
|
| - if (U_FAILURE(ec)) {
|
| - dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(ec));
|
| - return;
|
| - }
|
| -
|
| - UnicodeString currentPat;
|
| -
|
| - while (i<data_length) {
|
| - const char* pattern = data[i++];
|
| - if (pattern != NULL) {
|
| - fmt.applyPattern(pattern);
|
| - currentPat = pattern;
|
| - }
|
| -
|
| - const char* datestr = data[i++];
|
| - const char* string = data[i++];
|
| - UDate date = ref.parse(ctou(datestr), ec);
|
| - if (!assertSuccess("parse", ec)) return;
|
| - assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
|
| - ctou(string),
|
| - fmt.format(date, str.remove()));
|
| - }
|
| -}
|
| -
|
| -void DateFormatTest::TestGenericTime() {
|
| - const Locale en("en");
|
| - // Note: We no longer parse strings in different styles.
|
| -/*
|
| - const char* ZDATA[] = {
|
| - "yyyy MM dd HH:mm zzz",
|
| - // round trip
|
| - "y/M/d H:mm zzzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Standard Time",
|
| - "y/M/d H:mm zzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
|
| - "y/M/d H:mm vvvv", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
|
| - "y/M/d H:mm v", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PT",
|
| - // non-generic timezone string influences dst offset even if wrong for date/time
|
| - "y/M/d H:mm zzz", "pf", "2004/1/1 1:00 PDT", "2004 01 01 01:00 PDT", "2004/1/1 0:00 PST",
|
| - "y/M/d H:mm vvvv", "pf", "2004/1/1 1:00 PDT", "2004 01 01 01:00 PDT", "2004/1/1 0:00 Pacific Time",
|
| - "y/M/d H:mm zzz", "pf", "2004/7/1 1:00 PST", "2004 07 01 02:00 PDT", "2004/7/1 2:00 PDT",
|
| - "y/M/d H:mm vvvv", "pf", "2004/7/1 1:00 PST", "2004 07 01 02:00 PDT", "2004/7/1 2:00 Pacific Time",
|
| - // generic timezone generates dst offset appropriate for local time
|
| - "y/M/d H:mm zzz", "pf", "2004/1/1 1:00 PT", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
|
| - "y/M/d H:mm vvvv", "pf", "2004/1/1 1:00 PT", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
|
| - "y/M/d H:mm zzz", "pf", "2004/7/1 1:00 PT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 PDT",
|
| - "y/M/d H:mm vvvv", "pf", "2004/7/1 1:00 PT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 Pacific Time",
|
| - // daylight savings time transition edge cases.
|
| - // time to parse does not really exist, PT interpreted as earlier time
|
| - "y/M/d H:mm zzz", "pf", "2005/4/3 2:30 PT", "2005 04 03 03:30 PDT", "2005/4/3 3:30 PDT",
|
| - "y/M/d H:mm zzz", "pf", "2005/4/3 2:30 PST", "2005 04 03 03:30 PDT", "2005/4/3 3:30 PDT",
|
| - "y/M/d H:mm zzz", "pf", "2005/4/3 2:30 PDT", "2005 04 03 01:30 PST", "2005/4/3 1:30 PST",
|
| - "y/M/d H:mm v", "pf", "2005/4/3 2:30 PT", "2005 04 03 03:30 PDT", "2005/4/3 3:30 PT",
|
| - "y/M/d H:mm v", "pf", "2005/4/3 2:30 PST", "2005 04 03 03:30 PDT", "2005/4/3 3:30 PT",
|
| - "y/M/d H:mm v", "pf", "2005/4/3 2:30 PDT", "2005 04 03 01:30 PST", "2005/4/3 1:30 PT",
|
| - "y/M/d H:mm", "pf", "2005/4/3 2:30", "2005 04 03 03:30 PDT", "2005/4/3 3:30",
|
| - // time to parse is ambiguous, PT interpreted as later time
|
| - "y/M/d H:mm zzz", "pf", "2005/10/30 1:30 PT", "2005 10 30 01:30 PST", "2005/10/30 1:30 PST",
|
| - "y/M/d H:mm v", "pf", "2005/10/30 1:30 PT", "2005 10 30 01:30 PST", "2005/10/30 1:30 PT",
|
| - "y/M/d H:mm", "pf", "2005/10/30 1:30 PT", "2005 10 30 01:30 PST", "2005/10/30 1:30",
|
| -
|
| - "y/M/d H:mm zzz", "pf", "2004/10/31 1:30 PT", "2004 10 31 01:30 PST", "2004/10/31 1:30 PST",
|
| - "y/M/d H:mm zzz", "pf", "2004/10/31 1:30 PST", "2004 10 31 01:30 PST", "2004/10/31 1:30 PST",
|
| - "y/M/d H:mm zzz", "pf", "2004/10/31 1:30 PDT", "2004 10 31 01:30 PDT", "2004/10/31 1:30 PDT",
|
| - "y/M/d H:mm v", "pf", "2004/10/31 1:30 PT", "2004 10 31 01:30 PST", "2004/10/31 1:30 PT",
|
| - "y/M/d H:mm v", "pf", "2004/10/31 1:30 PST", "2004 10 31 01:30 PST", "2004/10/31 1:30 PT",
|
| - "y/M/d H:mm v", "pf", "2004/10/31 1:30 PDT", "2004 10 31 01:30 PDT", "2004/10/31 1:30 PT",
|
| - "y/M/d H:mm", "pf", "2004/10/31 1:30", "2004 10 31 01:30 PST", "2004/10/31 1:30",
|
| - };
|
| -*/
|
| - const char* ZDATA[] = {
|
| - "yyyy MM dd HH:mm zzz",
|
| - // round trip
|
| - "y/M/d H:mm zzzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Standard Time",
|
| - "y/M/d H:mm zzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
|
| - "y/M/d H:mm vvvv", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
|
| - "y/M/d H:mm v", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PT",
|
| - // non-generic timezone string influences dst offset even if wrong for date/time
|
| - "y/M/d H:mm zzz", "pf", "2004/1/1 1:00 PDT", "2004 01 01 01:00 PDT", "2004/1/1 0:00 PST",
|
| - "y/M/d H:mm zzz", "pf", "2004/7/1 1:00 PST", "2004 07 01 02:00 PDT", "2004/7/1 2:00 PDT",
|
| - // generic timezone generates dst offset appropriate for local time
|
| - "y/M/d H:mm zzz", "pf", "2004/1/1 1:00 PST", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
|
| - "y/M/d H:mm vvvv", "pf", "2004/1/1 1:00 Pacific Time", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
|
| - "y/M/d H:mm zzz", "pf", "2004/7/1 1:00 PDT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 PDT",
|
| - "y/M/d H:mm vvvv", "pf", "2004/7/1 1:00 Pacific Time", "2004 07 01 01:00 PDT", "2004/7/1 1:00 Pacific Time",
|
| - // daylight savings time transition edge cases.
|
| - // time to parse does not really exist, PT interpreted as earlier time
|
| - "y/M/d H:mm zzz", "pf", "2005/4/3 2:30 PST", "2005 04 03 03:30 PDT", "2005/4/3 3:30 PDT",
|
| - "y/M/d H:mm zzz", "pf", "2005/4/3 2:30 PDT", "2005 04 03 01:30 PST", "2005/4/3 1:30 PST",
|
| - "y/M/d H:mm v", "pf", "2005/4/3 2:30 PT", "2005 04 03 03:30 PDT", "2005/4/3 3:30 PT",
|
| - "y/M/d H:mm", "pf", "2005/4/3 2:30", "2005 04 03 03:30 PDT", "2005/4/3 3:30",
|
| - // time to parse is ambiguous, PT interpreted as later time
|
| - "y/M/d H:mm v", "pf", "2005/10/30 1:30 PT", "2005 10 30 01:30 PST", "2005/10/30 1:30 PT",
|
| - "y/M/d H:mm", "pf", "2005/10/30 1:30 PT", "2005 10 30 01:30 PST", "2005/10/30 1:30",
|
| -
|
| - "y/M/d H:mm zzz", "pf", "2004/10/31 1:30 PST", "2004 10 31 01:30 PST", "2004/10/31 1:30 PST",
|
| - "y/M/d H:mm zzz", "pf", "2004/10/31 1:30 PDT", "2004 10 31 01:30 PDT", "2004/10/31 1:30 PDT",
|
| - "y/M/d H:mm v", "pf", "2004/10/31 1:30 PT", "2004 10 31 01:30 PST", "2004/10/31 1:30 PT",
|
| - "y/M/d H:mm", "pf", "2004/10/31 1:30", "2004 10 31 01:30 PST", "2004/10/31 1:30",
|
| - };
|
| -
|
| - const int32_t ZDATA_length = sizeof(ZDATA)/ sizeof(ZDATA[0]);
|
| - expect(ZDATA, ZDATA_length, en);
|
| -
|
| - UErrorCode status = U_ZERO_ERROR;
|
| -
|
| - logln("cross format/parse tests"); // Note: We no longer support cross format/parse
|
| - UnicodeString basepat("yy/MM/dd H:mm ");
|
| - SimpleDateFormat formats[] = {
|
| - SimpleDateFormat(basepat + "vvv", en, status),
|
| - SimpleDateFormat(basepat + "vvvv", en, status),
|
| - SimpleDateFormat(basepat + "zzz", en, status),
|
| - SimpleDateFormat(basepat + "zzzz", en, status)
|
| - };
|
| - if (U_FAILURE(status)) {
|
| - dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(status));
|
| - return;
|
| - }
|
| - const int32_t formats_length = sizeof(formats)/sizeof(formats[0]);
|
| -
|
| - UnicodeString test;
|
| - SimpleDateFormat univ("yyyy MM dd HH:mm zzz", en, status);
|
| - ASSERT_OK(status);
|
| - const UnicodeString times[] = {
|
| - "2004 01 02 03:04 PST",
|
| - "2004 07 08 09:10 PDT"
|
| - };
|
| - int32_t times_length = sizeof(times)/sizeof(times[0]);
|
| - for (int i = 0; i < times_length; ++i) {
|
| - UDate d = univ.parse(times[i], status);
|
| - logln(UnicodeString("\ntime: ") + d);
|
| - for (int j = 0; j < formats_length; ++j) {
|
| - test.remove();
|
| - formats[j].format(d, test);
|
| - logln("\ntest: '" + test + "'");
|
| - for (int k = 0; k < formats_length; ++k) {
|
| - UDate t = formats[k].parse(test, status);
|
| - if (U_SUCCESS(status)) {
|
| - if (d != t) {
|
| - errln((UnicodeString)"FAIL: format " + k +
|
| - " incorrectly parsed output of format " + j +
|
| - " (" + test + "), returned " +
|
| - dateToString(t) + " instead of " + dateToString(d));
|
| - } else {
|
| - logln((UnicodeString)"OK: format " + k + " parsed ok");
|
| - }
|
| - } else if (status == U_PARSE_ERROR) {
|
| - errln((UnicodeString)"FAIL: format " + k +
|
| - " could not parse output of format " + j +
|
| - " (" + test + ")");
|
| - }
|
| - }
|
| - }
|
| - }
|
| -}
|
| -
|
| -void DateFormatTest::TestGenericTimeZoneOrder() {
|
| - // generic times should parse the same no matter what the placement of the time zone string
|
| -
|
| - // Note: We no longer support cross style format/parse
|
| -
|
| - //const char* XDATA[] = {
|
| - // "yyyy MM dd HH:mm zzz",
|
| - // // standard time, explicit daylight/standard
|
| - // "y/M/d H:mm zzz", "pf", "2004/1/1 1:00 PT", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
|
| - // "y/M/d zzz H:mm", "pf", "2004/1/1 PT 1:00", "2004 01 01 01:00 PST", "2004/1/1 PST 1:00",
|
| - // "zzz y/M/d H:mm", "pf", "PT 2004/1/1 1:00", "2004 01 01 01:00 PST", "PST 2004/1/1 1:00",
|
| -
|
| - // // standard time, generic
|
| - // "y/M/d H:mm vvvv", "pf", "2004/1/1 1:00 PT", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
|
| - // "y/M/d vvvv H:mm", "pf", "2004/1/1 PT 1:00", "2004 01 01 01:00 PST", "2004/1/1 Pacific Time 1:00",
|
| - // "vvvv y/M/d H:mm", "pf", "PT 2004/1/1 1:00", "2004 01 01 01:00 PST", "Pacific Time 2004/1/1 1:00",
|
| -
|
| - // // dahylight time, explicit daylight/standard
|
| - // "y/M/d H:mm zzz", "pf", "2004/7/1 1:00 PT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 PDT",
|
| - // "y/M/d zzz H:mm", "pf", "2004/7/1 PT 1:00", "2004 07 01 01:00 PDT", "2004/7/1 PDT 1:00",
|
| - // "zzz y/M/d H:mm", "pf", "PT 2004/7/1 1:00", "2004 07 01 01:00 PDT", "PDT 2004/7/1 1:00",
|
| -
|
| - // // daylight time, generic
|
| - // "y/M/d H:mm vvvv", "pf", "2004/7/1 1:00 PT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 Pacific Time",
|
| - // "y/M/d vvvv H:mm", "pf", "2004/7/1 PT 1:00", "2004 07 01 01:00 PDT", "2004/7/1 Pacific Time 1:00",
|
| - // "vvvv y/M/d H:mm", "pf", "PT 2004/7/1 1:00", "2004 07 01 01:00 PDT", "Pacific Time 2004/7/1 1:00",
|
| - //};
|
| - const char* XDATA[] = {
|
| - "yyyy MM dd HH:mm zzz",
|
| - // standard time, explicit daylight/standard
|
| - "y/M/d H:mm zzz", "pf", "2004/1/1 1:00 PST", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
|
| - "y/M/d zzz H:mm", "pf", "2004/1/1 PST 1:00", "2004 01 01 01:00 PST", "2004/1/1 PST 1:00",
|
| - "zzz y/M/d H:mm", "pf", "PST 2004/1/1 1:00", "2004 01 01 01:00 PST", "PST 2004/1/1 1:00",
|
| -
|
| - // standard time, generic
|
| - "y/M/d H:mm vvvv", "pf", "2004/1/1 1:00 Pacific Time", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
|
| - "y/M/d vvvv H:mm", "pf", "2004/1/1 Pacific Time 1:00", "2004 01 01 01:00 PST", "2004/1/1 Pacific Time 1:00",
|
| - "vvvv y/M/d H:mm", "pf", "Pacific Time 2004/1/1 1:00", "2004 01 01 01:00 PST", "Pacific Time 2004/1/1 1:00",
|
| -
|
| - // dahylight time, explicit daylight/standard
|
| - "y/M/d H:mm zzz", "pf", "2004/7/1 1:00 PDT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 PDT",
|
| - "y/M/d zzz H:mm", "pf", "2004/7/1 PDT 1:00", "2004 07 01 01:00 PDT", "2004/7/1 PDT 1:00",
|
| - "zzz y/M/d H:mm", "pf", "PDT 2004/7/1 1:00", "2004 07 01 01:00 PDT", "PDT 2004/7/1 1:00",
|
| -
|
| - // daylight time, generic
|
| - "y/M/d H:mm v", "pf", "2004/7/1 1:00 PT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 PT",
|
| - "y/M/d v H:mm", "pf", "2004/7/1 PT 1:00", "2004 07 01 01:00 PDT", "2004/7/1 PT 1:00",
|
| - "v y/M/d H:mm", "pf", "PT 2004/7/1 1:00", "2004 07 01 01:00 PDT", "PT 2004/7/1 1:00",
|
| - };
|
| - const int32_t XDATA_length = sizeof(XDATA)/sizeof(XDATA[0]);
|
| - Locale en("en");
|
| - expect(XDATA, XDATA_length, en);
|
| -}
|
| -
|
| -void DateFormatTest::TestZTimeZoneParsing(void) {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - const Locale en("en");
|
| - UnicodeString test;
|
| - //SimpleDateFormat univ("yyyy-MM-dd'T'HH:mm Z", en, status);
|
| - SimpleDateFormat univ("HH:mm Z", en, status);
|
| - if (failure(status, "construct SimpleDateFormat", TRUE)) return;
|
| - const TimeZone *t = TimeZone::getGMT();
|
| - univ.setTimeZone(*t);
|
| -
|
| - univ.setLenient(false);
|
| - ParsePosition pp(0);
|
| - struct {
|
| - UnicodeString input;
|
| - UnicodeString expected_result;
|
| - } tests[] = {
|
| - { "11:00 -0200", "13:00 +0000" },
|
| - { "11:00 +0200", "09:00 +0000" },
|
| - { "11:00 +0400", "07:00 +0000" },
|
| - { "11:00 +0530", "05:30 +0000" }
|
| - };
|
| -
|
| - UnicodeString result;
|
| - int32_t tests_length = sizeof(tests)/sizeof(tests[0]);
|
| - for (int i = 0; i < tests_length; ++i) {
|
| - pp.setIndex(0);
|
| - UDate d = univ.parse(tests[i].input, pp);
|
| - if(pp.getIndex() != tests[i].input.length()){
|
| - errln("Test %i: setZoneString() did not succeed. Consumed: %i instead of %i",
|
| - i, pp.getIndex(), tests[i].input.length());
|
| - return;
|
| - }
|
| - result.remove();
|
| - univ.format(d, result);
|
| - if(result != tests[i].expected_result) {
|
| - errln("Expected " + tests[i].expected_result
|
| - + " got " + result);
|
| - return;
|
| - }
|
| - logln("SUCCESS: Parsed " + tests[i].input
|
| - + " got " + result
|
| - + " expected " + tests[i].expected_result);
|
| - }
|
| -}
|
| -
|
| -void DateFormatTest::TestHost(void)
|
| -{
|
| -#if U_PLATFORM_HAS_WIN32_API
|
| - Win32DateTimeTest::testLocales(this);
|
| -#endif
|
| -}
|
| -
|
| -// Relative Date Tests
|
| -
|
| -void DateFormatTest::TestRelative(int daysdelta,
|
| - const Locale& loc,
|
| - const char *expectChars) {
|
| - char banner[25];
|
| - sprintf(banner, "%d", daysdelta);
|
| - UnicodeString bannerStr(banner, "");
|
| -
|
| - UErrorCode status = U_ZERO_ERROR;
|
| -
|
| - FieldPosition pos(0);
|
| - UnicodeString test;
|
| - Locale en("en");
|
| - DateFormat *fullrelative = DateFormat::createDateInstance(DateFormat::kFullRelative, loc);
|
| -
|
| - if (fullrelative == NULL) {
|
| - dataerrln("DateFormat::createDateInstance(DateFormat::kFullRelative, %s) returned NULL", loc.getName());
|
| - return;
|
| - }
|
| -
|
| - DateFormat *full = DateFormat::createDateInstance(DateFormat::kFull , loc);
|
| -
|
| - if (full == NULL) {
|
| - errln("DateFormat::createDateInstance(DateFormat::kFull, %s) returned NULL", loc.getName());
|
| - return;
|
| - }
|
| -
|
| - DateFormat *en_full = DateFormat::createDateInstance(DateFormat::kFull, en);
|
| -
|
| - if (en_full == NULL) {
|
| - errln("DateFormat::createDateInstance(DateFormat::kFull, en) returned NULL");
|
| - return;
|
| - }
|
| -
|
| - DateFormat *en_fulltime = DateFormat::createDateTimeInstance(DateFormat::kFull,DateFormat::kFull,en);
|
| -
|
| - if (en_fulltime == NULL) {
|
| - errln("DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, en) returned NULL");
|
| - return;
|
| - }
|
| -
|
| - UnicodeString result;
|
| - UnicodeString normalResult;
|
| - UnicodeString expect;
|
| - UnicodeString parseResult;
|
| -
|
| - Calendar *c = Calendar::createInstance(status);
|
| -
|
| - // Today = Today
|
| - c->setTime(Calendar::getNow(), status);
|
| - if(daysdelta != 0) {
|
| - c->add(Calendar::DATE,daysdelta,status);
|
| - }
|
| - ASSERT_OK(status);
|
| -
|
| - // calculate the expected string
|
| - if(expectChars != NULL) {
|
| - expect = expectChars;
|
| - } else {
|
| - full->format(*c, expect, pos); // expected = normal full
|
| - }
|
| -
|
| - fullrelative ->format(*c, result, pos);
|
| - en_full ->format(*c, normalResult, pos);
|
| -
|
| - if(result != expect) {
|
| - errln("FAIL: Relative Format ["+bannerStr+"] of "+normalResult+" failed, expected "+expect+" but got " + result);
|
| - } else {
|
| - logln("PASS: Relative Format ["+bannerStr+"] of "+normalResult+" got " + result);
|
| - }
|
| -
|
| -
|
| - //verify
|
| - UDate d = fullrelative->parse(result, status);
|
| - ASSERT_OK(status);
|
| -
|
| - UnicodeString parseFormat; // parse rel->format full
|
| - en_full->format(d, parseFormat, status);
|
| -
|
| - UnicodeString origFormat;
|
| - en_full->format(*c, origFormat, pos);
|
| -
|
| - if(parseFormat!=origFormat) {
|
| - errln("FAIL: Relative Parse ["+bannerStr+"] of "+result+" failed, expected "+parseFormat+" but got "+origFormat);
|
| - } else {
|
| - logln("PASS: Relative Parse ["+bannerStr+"] of "+result+" passed, got "+parseFormat);
|
| - }
|
| -
|
| - delete full;
|
| - delete fullrelative;
|
| - delete en_fulltime;
|
| - delete en_full;
|
| - delete c;
|
| -}
|
| -
|
| -
|
| -void DateFormatTest::TestRelative(void)
|
| -{
|
| - Locale en("en");
|
| - TestRelative( 0, en, "today");
|
| - TestRelative(-1, en, "yesterday");
|
| - TestRelative( 1, en, "tomorrow");
|
| - TestRelative( 2, en, NULL);
|
| - TestRelative( -2, en, NULL);
|
| - TestRelative( 3, en, NULL);
|
| - TestRelative( -3, en, NULL);
|
| - TestRelative( 300, en, NULL);
|
| - TestRelative( -300, en, NULL);
|
| -}
|
| -
|
| -void DateFormatTest::TestRelativeClone(void)
|
| -{
|
| - /*
|
| - Verify that a cloned formatter gives the same results
|
| - and is useable after the original has been deleted.
|
| - */
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - Locale loc("en");
|
| - UDate now = Calendar::getNow();
|
| - DateFormat *full = DateFormat::createDateInstance(DateFormat::kFullRelative, loc);
|
| - if (full == NULL) {
|
| - dataerrln("FAIL: Can't create Relative date instance");
|
| - return;
|
| - }
|
| - UnicodeString result1;
|
| - full->format(now, result1, status);
|
| - Format *fullClone = full->clone();
|
| - delete full;
|
| - full = NULL;
|
| -
|
| - UnicodeString result2;
|
| - fullClone->format(now, result2, status);
|
| - ASSERT_OK(status);
|
| - if (result1 != result2) {
|
| - errln("FAIL: Clone returned different result from non-clone.");
|
| - }
|
| - delete fullClone;
|
| -}
|
| -
|
| -void DateFormatTest::TestHostClone(void)
|
| -{
|
| - /*
|
| - Verify that a cloned formatter gives the same results
|
| - and is useable after the original has been deleted.
|
| - */
|
| - // This is mainly important on Windows.
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - Locale loc("en_US@compat=host");
|
| - UDate now = Calendar::getNow();
|
| - DateFormat *full = DateFormat::createDateInstance(DateFormat::kFull, loc);
|
| - if (full == NULL) {
|
| - dataerrln("FAIL: Can't create host date instance");
|
| - return;
|
| - }
|
| - UnicodeString result1;
|
| - full->format(now, result1, status);
|
| - Format *fullClone = full->clone();
|
| - delete full;
|
| - full = NULL;
|
| -
|
| - UnicodeString result2;
|
| - fullClone->format(now, result2, status);
|
| - ASSERT_OK(status);
|
| - if (result1 != result2) {
|
| - errln("FAIL: Clone returned different result from non-clone.");
|
| - }
|
| - delete fullClone;
|
| -}
|
| -
|
| -void DateFormatTest::TestHebrewClone(void)
|
| -{
|
| - /*
|
| - Verify that a cloned formatter gives the same results
|
| - and is useable after the original has been deleted.
|
| - */
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - Locale loc("he@calendar=hebrew");
|
| - UDate now = Calendar::getNow();
|
| - LocalPointer<DateFormat> fmt(
|
| - DateFormat::createDateInstance(DateFormat::kLong, loc));
|
| - if (fmt.isNull()) {
|
| - dataerrln("FAIL: Can't create Hebrew date instance");
|
| - return;
|
| - }
|
| - UnicodeString result1;
|
| - fmt->format(now, result1, status);
|
| - LocalPointer<Format> fmtClone(fmt->clone());
|
| -
|
| - // free fmt to be sure that fmtClone is independent of fmt.
|
| - fmt.adoptInstead(NULL);
|
| -
|
| - UnicodeString result2;
|
| - fmtClone->format(now, result2, status);
|
| - ASSERT_OK(status);
|
| - if (result1 != result2) {
|
| - errln("FAIL: Clone returned different result from non-clone.");
|
| - }
|
| -}
|
| -
|
| -static UBool getActualAndValidLocales(
|
| - const Format &fmt, Locale &valid, Locale &actual) {
|
| - const SimpleDateFormat* dat = dynamic_cast<const SimpleDateFormat*>(&fmt);
|
| - if (dat == NULL) {
|
| - return FALSE;
|
| - }
|
| - const DateFormatSymbols *sym = dat->getDateFormatSymbols();
|
| - if (sym == NULL) {
|
| - return FALSE;
|
| - }
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - valid = sym->getLocale(ULOC_VALID_LOCALE, status);
|
| - actual = sym->getLocale(ULOC_ACTUAL_LOCALE, status);
|
| - return U_SUCCESS(status);
|
| -}
|
| -
|
| -void DateFormatTest::TestDateFormatSymbolsClone(void)
|
| -{
|
| - /*
|
| - Verify that a cloned formatter gives the same results
|
| - and is useable after the original has been deleted.
|
| - */
|
| - Locale loc("de_CH_LUCERNE");
|
| - LocalPointer<DateFormat> fmt(
|
| - DateFormat::createDateInstance(DateFormat::kDefault, loc));
|
| - Locale valid1;
|
| - Locale actual1;
|
| - if (!getActualAndValidLocales(*fmt, valid1, actual1)) {
|
| - dataerrln("FAIL: Could not fetch valid + actual locales");
|
| - return;
|
| - }
|
| - LocalPointer<Format> fmtClone(fmt->clone());
|
| -
|
| - // Free fmt to be sure that fmtClone is really independent of fmt.
|
| - fmt.adoptInstead(NULL);
|
| - Locale valid2;
|
| - Locale actual2;
|
| - if (!getActualAndValidLocales(*fmtClone, valid2, actual2)) {
|
| - errln("FAIL: Could not fetch valid + actual locales");
|
| - return;
|
| - }
|
| - if (valid1 != valid2 || actual1 != actual2) {
|
| - errln("Date format symbol locales of clone don't match original");
|
| - }
|
| -}
|
| -
|
| -void DateFormatTest::TestTimeZoneDisplayName()
|
| -{
|
| - // This test data was ported from ICU4J. Don't know why the 6th column in there because it's not being
|
| - // used currently.
|
| - const char *fallbackTests[][6] = {
|
| - { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
|
| - { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
|
| - { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZZ", "-08:00", "-8:00" },
|
| - { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "PST", "America/Los_Angeles" },
|
| - { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "Pacific Standard Time", "America/Los_Angeles" },
|
| - { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
|
| - { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
|
| - { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "PDT", "America/Los_Angeles" },
|
| - { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "Pacific Daylight Time", "America/Los_Angeles" },
|
| - { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "PT", "America/Los_Angeles" },
|
| - { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "Pacific Time", "America/Los_Angeles" },
|
| - { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "VVVV", "Los Angeles Time", "America/Los_Angeles" },
|
| - { "en_GB", "America/Los_Angeles", "2004-01-15T12:00:00Z", "z", "GMT-8", "America/Los_Angeles" },
|
| - { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "Z", "-0700", "-7:00" },
|
| - { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
|
| - { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "z", "MST", "America/Phoenix" },
|
| - { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "zzzz", "Mountain Standard Time", "America/Phoenix" },
|
| - { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
|
| - { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
|
| - { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "z", "MST", "America/Phoenix" },
|
| - { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "zzzz", "Mountain Standard Time", "America/Phoenix" },
|
| - { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "v", "MST", "America/Phoenix" },
|
| - { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "vvvv", "Mountain Standard Time", "America/Phoenix" },
|
| - { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "VVVV", "Phoenix Time", "America/Phoenix" },
|
| -
|
| - { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentina Standard Time", "-3:00" },
|
| - { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentina Standard Time", "-3:00" },
|
| - { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Buenos Aires Time", "America/Buenos_Aires" },
|
| - { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentina Standard Time", "America/Buenos_Aires" },
|
| - { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "VVVV", "Buenos Aires Time", "America/Buenos_Aires" },
|
| -
|
| - { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentina Standard Time", "-3:00" },
|
| - { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentina Standard Time", "-3:00" },
|
| - { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Buenos Aires Time", "America/Buenos_Aires" },
|
| - { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentina Standard Time", "America/Buenos_Aires" },
|
| - { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "VVVV", "Buenos Aires Time", "America/Buenos_Aires" },
|
| -
|
| - { "en", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
|
| - { "en", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
|
| - { "en", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-5", "-5:00" },
|
| - { "en", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "Cuba Standard Time", "-5:00" },
|
| - { "en", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
|
| - { "en", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
|
| - { "en", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-4", "-4:00" },
|
| - { "en", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "Cuba Daylight Time", "-4:00" },
|
| - { "en", "America/Havana", "2004-07-15T00:00:00Z", "v", "Cuba Time", "America/Havana" },
|
| - { "en", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "Cuba Time", "America/Havana" },
|
| - { "en", "America/Havana", "2004-07-15T00:00:00Z", "VVVV", "Cuba Time", "America/Havana" },
|
| -
|
| - { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
|
| - { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
|
| - { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
|
| - { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "Australian Eastern Daylight Time", "+11:00" },
|
| - { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
|
| - { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
|
| - { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
|
| - { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "Australian Eastern Standard Time", "+10:00" },
|
| - { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "Sydney Time", "Australia/Sydney" },
|
| - { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "Eastern Australia Time", "Australia/Sydney" },
|
| - { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "VVVV", "Sydney Time", "Australia/Sydney" },
|
| -
|
| - { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
|
| - { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
|
| - { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
|
| - { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "Australian Eastern Daylight Time", "+11:00" },
|
| - { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
|
| - { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
|
| - { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
|
| - { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "Australian Eastern Standard Time", "+10:00" },
|
| - { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "Sydney Time", "Australia/Sydney" },
|
| - { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "Eastern Australia Time", "Australia/Sydney" },
|
| - { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "VVVV", "Sydney Time", "Australia/Sydney" },
|
| -
|
| - { "en", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
|
| - { "en", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
|
| - { "en", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
|
| - { "en", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "Greenwich Mean Time", "+0:00" },
|
| - { "en", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
|
| - { "en", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
|
| - { "en", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+1", "Europe/London" },
|
| - { "en", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "British Summer Time", "Europe/London" },
|
| - // icu en.txt has exemplar city for this time zone
|
| - { "en", "Europe/London", "2004-07-15T00:00:00Z", "v", "United Kingdom Time", "Europe/London" },
|
| - { "en", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "United Kingdom Time", "Europe/London" },
|
| - { "en", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "United Kingdom Time", "Europe/London" },
|
| -
|
| - { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
|
| - { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
|
| - { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-3", "-3:00" },
|
| - { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
|
| -
|
| - // JB#5150
|
| - { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
|
| - { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
|
| - { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+5:30", "+5:30" },
|
| - { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "India Standard Time", "+5:30" },
|
| - { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
|
| - { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
|
| - { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+5:30", "+05:30" },
|
| - { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "India Standard Time", "+5:30" },
|
| - { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "India Time", "Asia/Calcutta" },
|
| - { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "India Standard Time", "Asia/Calcutta" },
|
| -
|
| - // Proper CLDR primary zone support #9733
|
| - { "en", "America/Santiago", "2013-01-01T00:00:00Z", "VVVV", "Chile Time", "America/Santiago" },
|
| - { "en", "Pacific/Easter", "2013-01-01T00:00:00Z", "VVVV", "Easter Time", "Pacific/Easter" },
|
| -
|
| - // ==========
|
| -
|
| - { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
|
| - { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
|
| - { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-8", "-8:00" },
|
| - { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "Nordamerikanische Westk\\u00fcsten-Normalzeit", "-8:00" },
|
| - { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
|
| - { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
|
| - { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-7", "-7:00" },
|
| - { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "Nordamerikanische Westk\\u00fcsten-Sommerzeit", "-7:00" },
|
| - { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "Los Angeles Zeit", "America/Los_Angeles" },
|
| - { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "Nordamerikanische Westk\\u00fcstenzeit", "America/Los_Angeles" },
|
| -
|
| - { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentinische Normalzeit", "-3:00" },
|
| - { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentinische Normalzeit", "-3:00" },
|
| - { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Buenos Aires Zeit", "America/Buenos_Aires" },
|
| - { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentinische Normalzeit", "America/Buenos_Aires" },
|
| -
|
| - { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentinische Normalzeit", "-3:00" },
|
| - { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentinische Normalzeit", "-3:00" },
|
| - { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Buenos Aires Zeit", "America/Buenos_Aires" },
|
| - { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentinische Normalzeit", "America/Buenos_Aires" },
|
| -
|
| - { "de", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
|
| - { "de", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
|
| - { "de", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-5", "-5:00" },
|
| - { "de", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "Kubanische Normalzeit", "-5:00" },
|
| - { "de", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
|
| - { "de", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
|
| - { "de", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-4", "-4:00" },
|
| - { "de", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "Kubanische Sommerzeit", "-4:00" },
|
| - { "de", "America/Havana", "2004-07-15T00:00:00Z", "v", "Kuba Zeit", "America/Havana" },
|
| - { "de", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "Kubanische Zeit", "America/Havana" },
|
| - // added to test proper fallback of country name
|
| - { "de_CH", "America/Havana", "2004-07-15T00:00:00Z", "v", "Kuba Zeit", "America/Havana" },
|
| - { "de_CH", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "Kubanische Zeit", "America/Havana" },
|
| -
|
| - { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
|
| - { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
|
| - { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
|
| - { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "Ostaustralische Sommerzeit", "+11:00" },
|
| - { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
|
| - { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
|
| - { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
|
| - { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "Ostaustralische Normalzeit", "+10:00" },
|
| - { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "Sydney Zeit", "Australia/Sydney" },
|
| - { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "Ostaustralische Zeit", "Australia/Sydney" },
|
| -
|
| - { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
|
| - { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
|
| - { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
|
| - { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "Ostaustralische Sommerzeit", "+11:00" },
|
| - { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
|
| - { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
|
| - { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
|
| - { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "Ostaustralische Normalzeit", "+10:00" },
|
| - { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "Sydney Zeit", "Australia/Sydney" },
|
| - { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "Ostaustralische Zeit", "Australia/Sydney" },
|
| -
|
| - { "de", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
|
| - { "de", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
|
| - { "de", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
|
| - { "de", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "Mittlere Greenwich-Zeit", "+0:00" },
|
| - { "de", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
|
| - { "de", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
|
| - { "de", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+1", "+1:00" },
|
| - { "de", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "Britische Sommerzeit", "+1:00" },
|
| - { "de", "Europe/London", "2004-07-15T00:00:00Z", "v", "Vereinigtes K\\u00f6nigreich Zeit", "Europe/London" },
|
| - { "de", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "Vereinigtes K\\u00f6nigreich Zeit", "Europe/London" },
|
| -
|
| - { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
|
| - { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
|
| - { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-3", "-3:00" },
|
| - { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
|
| -
|
| - // JB#5150
|
| - { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
|
| - { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
|
| - { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+5:30", "+5:30" },
|
| - { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "Indische Zeit", "+5:30" },
|
| - { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
|
| - { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
|
| - { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+5:30", "+05:30" },
|
| - { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "Indische Zeit", "+5:30" },
|
| - { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "Indien Zeit", "Asia/Calcutta" },
|
| - { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "Indische Zeit", "Asia/Calcutta" },
|
| -
|
| - // ==========
|
| -
|
| - { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
|
| - { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
|
| - { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-8", "America/Los_Angeles" },
|
| - { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u5317\\u7f8e\\u592a\\u5e73\\u6d0b\\u6807\\u51c6\\u65f6\\u95f4", "America/Los_Angeles" },
|
| - { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
|
| - { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
|
| - { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-7", "America/Los_Angeles" },
|
| - { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u5317\\u7f8e\\u592a\\u5e73\\u6d0b\\u590f\\u4ee4\\u65f6\\u95f4", "America/Los_Angeles" },
|
| - // icu zh.txt has exemplar city for this time zone
|
| - { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u6D1B\\u6749\\u77F6\\u65F6\\u95F4", "America/Los_Angeles" },
|
| - { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u5317\\u7f8e\\u592a\\u5e73\\u6d0b\\u65f6\\u95f4", "America/Los_Angeles" },
|
| -
|
| - { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
|
| - { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
|
| - { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u5E03\\u5B9C\\u8BFA\\u65AF\\u827E\\u5229\\u65AF\\u65F6\\u95F4", "America/Buenos_Aires" },
|
| - { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "America/Buenos_Aires" },
|
| -
|
| - { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
|
| - { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
|
| - { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u5E03\\u5B9C\\u8BFA\\u65AF\\u827E\\u5229\\u65AF\\u65F6\\u95F4", "America/Buenos_Aires" },
|
| - { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "America/Buenos_Aires" },
|
| -
|
| - { "zh", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
|
| - { "zh", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
|
| - { "zh", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-5", "-5:00" },
|
| - { "zh", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "\\u53e4\\u5df4\\u6807\\u51c6\\u65f6\\u95f4", "-5:00" },
|
| - { "zh", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
|
| - { "zh", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
|
| - { "zh", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-4", "-4:00" },
|
| - { "zh", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "\\u53e4\\u5df4\\u590f\\u4ee4\\u65f6\\u95f4", "-4:00" },
|
| - { "zh", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u53e4\\u5df4\\u65f6\\u95f4", "America/Havana" },
|
| - { "zh", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u53e4\\u5df4\\u65f6\\u95f4", "America/Havana" },
|
| -
|
| - { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
|
| - { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
|
| - { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
|
| - { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u590f\\u4ee4\\u65f6\\u95f4", "+11:00" },
|
| - { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
|
| - { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
|
| - { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
|
| - { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u6807\\u51c6\\u65f6\\u95f4", "+10:00" },
|
| - // icu zh.txt does not have info for this time zone
|
| - { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u6089\\u5C3C\\u65F6\\u95F4", "Australia/Sydney" },
|
| - { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u65f6\\u95f4", "Australia/Sydney" },
|
| -
|
| - { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
|
| - { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
|
| - { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
|
| - { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u590f\\u4ee4\\u65f6\\u95f4", "+11:00" },
|
| - { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
|
| - { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
|
| - { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
|
| - { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u6807\\u51c6\\u65f6\\u95f4", "+10:00" },
|
| - { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u6089\\u5C3C\\u65F6\\u95F4", "Australia/Sydney" },
|
| - { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u65f6\\u95f4", "Australia/Sydney" },
|
| -
|
| - { "zh", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
|
| - { "zh", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
|
| - { "zh", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
|
| - { "zh", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
|
| - { "zh", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
|
| - { "zh", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u683C\\u6797\\u5C3C\\u6CBB\\u6807\\u51C6\\u65F6\\u95F4", "+0:00" },
|
| - { "zh", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
|
| - { "zh", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
|
| - { "zh", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+1", "+1:00" },
|
| - { "zh", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "\\u82f1\\u56fd\\u590f\\u4ee4\\u65f6\\u95f4", "+1:00" },
|
| - { "zh", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u82f1\\u56fd\\u65f6\\u95f4", "Europe/London" },
|
| - { "zh", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u82f1\\u56fd\\u65f6\\u95f4", "Europe/London" },
|
| - { "zh", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "\\u82f1\\u56fd\\u65f6\\u95f4", "Europe/London" },
|
| -
|
| - { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
|
| - { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
|
| - { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-3", "-3:00" },
|
| - { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
|
| -
|
| - // JB#5150
|
| - { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
|
| - { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
|
| - { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+5:30", "+5:30" },
|
| - { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u5370\\u5ea6\\u65f6\\u95f4", "+5:30" },
|
| - { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
|
| - { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
|
| - { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+5:30", "+05:30" },
|
| - { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u5370\\u5ea6\\u65f6\\u95f4", "+5:30" },
|
| - { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u5370\\u5ea6\\u65f6\\u95f4", "Asia/Calcutta" },
|
| - { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u5370\\u5ea6\\u65f6\\u95f4", "Asia/Calcutta" },
|
| -
|
| - // ==========
|
| -
|
| - { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
|
| - { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
|
| - { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-8", "-8:00" },
|
| - { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u0909\\u0924\\u094d\\u0924\\u0930\\u0940 \\u0905\\u092e\\u0947\\u0930\\u093f\\u0915\\u0940 \\u092a\\u094d\\u0930\\u0936\\u093e\\u0902\\u0924 \\u092e\\u093e\\u0928\\u0915 \\u0938\\u092e\\u092f", "-8:00" },
|
| - { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
|
| - { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
|
| - { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-7", "-7:00" },
|
| - { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u0909\\u0924\\u094d\\u0924\\u0930\\u0940 \\u0905\\u092e\\u0947\\u0930\\u093f\\u0915\\u0940 \\u092a\\u094d\\u0930\\u0936\\u093e\\u0902\\u0924 \\u0921\\u0947\\u0932\\u093e\\u0907\\u091f \\u0938\\u092e\\u092f", "-7:00" },
|
| - { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u0932\\u0949\\u0938 \\u090f\\u0902\\u091c\\u093f\\u0932\\u094d\\u0938 \\u0938\\u092e\\u092f", "America/Los_Angeles" },
|
| - { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u0909\\u0924\\u094d\\u0924\\u0930\\u0940 \\u0905\\u092e\\u0947\\u0930\\u093f\\u0915\\u0940 \\u092a\\u094d\\u0930\\u0936\\u093e\\u0902\\u0924 \\u0938\\u092e\\u092f", "America/Los_Angeles" },
|
| -
|
| - { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "-3:00" },
|
| - { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "-3:00" },
|
| - { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u092C\\u094D\\u092F\\u0942\\u0928\\u0938 \\u0906\\u092F\\u0930\\u0938 \\u0938\\u092E\\u092F", "America/Buenos_Aires" },
|
| - { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "America/Buenos_Aires" },
|
| -
|
| - { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "-3:00" },
|
| - { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "-3:00" },
|
| - { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u092C\\u094D\\u092F\\u0942\\u0928\\u0938 \\u0906\\u092F\\u0930\\u0938 \\u0938\\u092E\\u092F", "America/Buenos_Aires" },
|
| - { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "America/Buenos_Aires" },
|
| -
|
| - { "hi", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
|
| - { "hi", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
|
| - { "hi", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-5", "-5:00" },
|
| - { "hi", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "\\u0915\\u094d\\u092f\\u0942\\u092c\\u093e \\u092e\\u093e\\u0928\\u0915 \\u0938\\u092e\\u092f", "-5:00" },
|
| - { "hi", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
|
| - { "hi", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
|
| - { "hi", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-4", "-4:00" },
|
| - { "hi", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "\\u0915\\u094d\\u092f\\u0942\\u092c\\u093e \\u0921\\u0947\\u0932\\u093e\\u0907\\u091f \\u0938\\u092e\\u092f", "-4:00" },
|
| - { "hi", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u0915\\u094d\\u092f\\u0942\\u092c\\u093e \\u0938\\u092E\\u092F", "America/Havana" },
|
| - { "hi", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u0915\\u094d\\u092f\\u0942\\u092c\\u093e \\u0938\\u092e\\u092f", "America/Havana" },
|
| -
|
| - { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
|
| - { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
|
| - { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
|
| - { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u0911\\u0938\\u094d\\u200d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e\\u0908 \\u092a\\u0942\\u0930\\u094d\\u0935\\u0940 \\u0921\\u0947\\u0932\\u093e\\u0907\\u091f \\u0938\\u092e\\u092f", "+11:00" },
|
| - { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
|
| - { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
|
| - { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
|
| - { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "\\u0911\\u0938\\u094d\\u200d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e\\u0908 \\u092a\\u0942\\u0930\\u094d\\u0935\\u0940 \\u092e\\u093e\\u0928\\u0915 \\u0938\\u092e\\u092f", "+10:00" },
|
| - { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u0938\\u093F\\u0921\\u0928\\u0940 \\u0938\\u092E\\u092F", "Australia/Sydney" },
|
| - { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u092a\\u0942\\u0930\\u094d\\u0935\\u0940 \\u0911\\u0938\\u094d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e \\u0938\\u092e\\u092f", "Australia/Sydney" },
|
| -
|
| - { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
|
| - { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
|
| - { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
|
| - { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u0911\\u0938\\u094d\\u200d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e\\u0908 \\u092a\\u0942\\u0930\\u094d\\u0935\\u0940 \\u0921\\u0947\\u0932\\u093e\\u0907\\u091f \\u0938\\u092e\\u092f", "+11:00" },
|
| - { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
|
| - { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
|
| - { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
|
| - { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "\\u0911\\u0938\\u094d\\u200d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e\\u0908 \\u092a\\u0942\\u0930\\u094d\\u0935\\u0940 \\u092e\\u093e\\u0928\\u0915 \\u0938\\u092e\\u092f", "+10:00" },
|
| - { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u0938\\u093F\\u0921\\u0928\\u0940 \\u0938\\u092E\\u092F", "Australia/Sydney" },
|
| - { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u092a\\u0942\\u0930\\u094d\\u0935\\u0940 \\u0911\\u0938\\u094d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e \\u0938\\u092e\\u092f", "Australia/Sydney" },
|
| -
|
| - { "hi", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
|
| - { "hi", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
|
| - { "hi", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
|
| - { "hi", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u0917\\u094d\\u0930\\u0940\\u0928\\u0935\\u093f\\u091a \\u092e\\u0940\\u0928 \\u091f\\u093e\\u0907\\u092e", "+0:00" },
|
| - { "hi", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
|
| - { "hi", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
|
| - { "hi", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+1", "+1:00" },
|
| - { "hi", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "\\u092c\\u094d\\u0930\\u093f\\u091f\\u093f\\u0936 \\u0917\\u094d\\u0930\\u0940\\u0937\\u094d\\u092e\\u0915\\u093e\\u0932\\u0940\\u0928 \\u0938\\u092e\\u092f", "+1:00" },
|
| - { "hi", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u092f\\u0942\\u0928\\u093e\\u0907\\u091f\\u0947\\u0921 \\u0915\\u093f\\u0902\\u0917\\u0921\\u092e \\u0938\\u092e\\u092f", "Europe/London" },
|
| - { "hi", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u092f\\u0942\\u0928\\u093e\\u0907\\u091f\\u0947\\u0921 \\u0915\\u093f\\u0902\\u0917\\u0921\\u092e \\u0938\\u092e\\u092f", "Europe/London" },
|
| -
|
| - { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
|
| - { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
|
| - { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-3", "-3:00" },
|
| - { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
|
| -
|
| - { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
|
| - { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
|
| - { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "IST", "+5:30" },
|
| - { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "+5:30" },
|
| - { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
|
| - { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
|
| - { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "IST", "+05:30" },
|
| - { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "+5:30" },
|
| - { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "IST", "Asia/Calcutta" },
|
| - { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "Asia/Calcutta" },
|
| -
|
| - // ==========
|
| -
|
| - { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
|
| - { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-08:00", "-8:00" },
|
| - { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-8", "America/Los_Angeles" },
|
| - { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u0421\\u0435\\u0432\\u0435\\u0440\\u043d\\u043e\\u0430\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430\\u043d\\u0441\\u043a\\u043e \\u0442\\u0438\\u0445\\u043e\\u043e\\u043a\\u0435\\u0430\\u043d\\u0441\\u043a\\u043e \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "America/Los_Angeles" },
|
| - { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
|
| - { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-07:00", "-7:00" },
|
| - { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-7", "America/Los_Angeles" },
|
| - { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u0421\\u0435\\u0432\\u0435\\u0440\\u043d\\u043e\\u0430\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430\\u043d\\u0441\\u043a\\u043e \\u0442\\u0438\\u0445\\u043e\\u043e\\u043a\\u0435\\u0430\\u043d\\u0441\\u043a\\u043e \\u043b\\u044f\\u0442\\u043d\\u043e \\u0447\\u0430\\u0441\\u043e\\u0432\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "America/Los_Angeles" },
|
| - // icu bg.txt has exemplar city for this time zone
|
| - { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u041B\\u043E\\u0441 \\u0410\\u043D\\u0434\\u0436\\u0435\\u043B\\u0438\\u0441", "America/Los_Angeles" },
|
| - { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u0421\\u0435\\u0432\\u0435\\u0440\\u043d\\u043e\\u0430\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430\\u043d\\u0441\\u043a\\u043e \\u0442\\u0438\\u0445\\u043e\\u043e\\u043a\\u0435\\u0430\\u043d\\u0441\\u043a\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "America/Los_Angeles" },
|
| - { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "VVVV", "\\u041B\\u043E\\u0441 \\u0410\\u043D\\u0434\\u0436\\u0435\\u043B\\u0438\\u0441", "America/Los_Angeles" },
|
| -
|
| - { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-03:00", "-3:00" },
|
| - { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-3", "-3:00" },
|
| - { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0441\\u043a\\u043e \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "-3:00" },
|
| - { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-03:00", "-3:00" },
|
| - { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-3", "-3:00" },
|
| - { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0441\\u043a\\u043e \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "-3:00" },
|
| - { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0411\\u0443\\u0435\\u043D\\u043E\\u0441 \\u0410\\u0439\\u0440\\u0435\\u0441", "America/Buenos_Aires" },
|
| - { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0441\\u043a\\u043e \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "America/Buenos_Aires" },
|
| -
|
| - { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-03:00", "-3:00" },
|
| - { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-3", "-3:00" },
|
| - { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0441\\u043a\\u043e \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "-3:00" },
|
| - { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-03:00", "-3:00" },
|
| - { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-3", "-3:00" },
|
| - { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0441\\u043a\\u043e \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "-3:00" },
|
| - // icu bg.txt does not have info for this time zone
|
| - { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0411\\u0443\\u0435\\u043D\\u043E\\u0441 \\u0410\\u0439\\u0440\\u0435\\u0441", "America/Buenos_Aires" },
|
| - { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0441\\u043a\\u043e \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "America/Buenos_Aires" },
|
| -
|
| - { "bg", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
|
| - { "bg", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-05:00", "-5:00" },
|
| - { "bg", "America/Havana", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-5", "-5:00" },
|
| - { "bg", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "\\u041a\\u0443\\u0431\\u0438\\u043d\\u0441\\u043a\\u043e \\u0441\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "-5:00" },
|
| - { "bg", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
|
| - { "bg", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-04:00", "-4:00" },
|
| - { "bg", "America/Havana", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-4", "-4:00" },
|
| - { "bg", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "\\u041a\\u0443\\u0431\\u0438\\u043d\\u0441\\u043a\\u043e \\u043b\\u044f\\u0442\\u043d\\u043e \\u0447\\u0430\\u0441\\u043e\\u0432\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "-4:00" },
|
| - { "bg", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u041a\\u0443\\u0431\\u0430", "America/Havana" },
|
| - { "bg", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u041a\\u0443\\u0431\\u0438\\u043d\\u0441\\u043a\\u043e \\u0432\\u0440\\u0435\\u043C\\u0435", "America/Havana" },
|
| -
|
| - { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
|
| - { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447+11:00", "+11:00" },
|
| - { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447+11", "+11:00" },
|
| - { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u043B\\u044F\\u0442\\u043D\\u043E \\u0447\\u0430\\u0441\\u043E\\u0432\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "+11:00" },
|
| - { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
|
| - { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447+10:00", "+10:00" },
|
| - { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447+10", "+10:00" },
|
| - { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u0441\\u0442\\u0430\\u043D\\u0434\\u0430\\u0440\\u0442\\u043D\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "+10:00" },
|
| - { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u0421\\u0438\\u0434\\u043D\\u0438", "Australia/Sydney" },
|
| - { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "Australia/Sydney" },
|
| -
|
| - { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
|
| - { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447+11:00", "+11:00" },
|
| - { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447+11", "+11:00" },
|
| - { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u043B\\u044F\\u0442\\u043D\\u043E \\u0447\\u0430\\u0441\\u043E\\u0432\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "+11:00" },
|
| - { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
|
| - { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447+10:00", "+10:00" },
|
| - { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447+10", "+10:00" },
|
| - { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u0441\\u0442\\u0430\\u043D\\u0434\\u0430\\u0440\\u0442\\u043D\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "+10:00" },
|
| - { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u0421\\u0438\\u0434\\u043D\\u0438", "Australia/Sydney" },
|
| - { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "Australia/Sydney" },
|
| -
|
| - { "bg", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
|
| - { "bg", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447", "+0:00" },
|
| - { "bg", "Europe/London", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447", "+0:00" },
|
| - { "bg", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u0421\\u0440\\u0435\\u0434\\u043d\\u043e \\u0433\\u0440\\u0438\\u043d\\u0443\\u0438\\u0447\\u043a\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "+0:00" },
|
| - { "bg", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
|
| - { "bg", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447+01:00", "+1:00" },
|
| - { "bg", "Europe/London", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447+1", "+1:00" },
|
| - { "bg", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "\\u0411\\u0440\\u0438\\u0442\\u0430\\u043d\\u0441\\u043a\\u043e \\u043b\\u044f\\u0442\\u043d\\u043e \\u0447\\u0430\\u0441\\u043e\\u0432\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "+1:00" },
|
| - { "bg", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u041E\\u0431\\u0435\\u0434\\u0438\\u043D\\u0435\\u043D\\u043E\\u0442\\u043E \\u043A\\u0440\\u0430\\u043B\\u0441\\u0442\\u0432\\u043E", "Europe/London" },
|
| - { "bg", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u041E\\u0431\\u0435\\u0434\\u0438\\u043D\\u0435\\u043D\\u043E\\u0442\\u043E \\u043A\\u0440\\u0430\\u043B\\u0441\\u0442\\u0432\\u043E", "Europe/London" },
|
| -
|
| - { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-03:00", "-3:00" },
|
| - { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-3", "-3:00" },
|
| - { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-03:00", "-3:00" },
|
| - { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-03:00", "-3:00" },
|
| - { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-3", "-3:00" },
|
| - { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-03:00", "-3:00" },
|
| - { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-3", "-3:00" },
|
| - { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-03:00", "-3:00" },
|
| -
|
| - // JB#5150
|
| - { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
|
| - { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447+05:30", "+5:30" },
|
| - { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447+5:30", "+5:30" },
|
| - { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u0418\\u043d\\u0434\\u0438\\u0439\\u0441\\u043a\\u043e \\u0441\\u0442\\u0430\\u043D\\u0434\\u0430\\u0440\\u0442\\u043D\\u043E \\u0432\\u0440\\u0435\\u043c\\u0435", "+5:30" },
|
| - { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
|
| - { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447+05:30", "+5:30" },
|
| - { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447+5:30", "+05:30" },
|
| - { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u0418\\u043d\\u0434\\u0438\\u0439\\u0441\\u043a\\u043e \\u0441\\u0442\\u0430\\u043D\\u0434\\u0430\\u0440\\u0442\\u043D\\u043E \\u0432\\u0440\\u0435\\u043c\\u0435", "+5:30" },
|
| - { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u0418\\u043D\\u0434\\u0438\\u044F", "Asia/Calcutta" },
|
| - { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u0418\\u043d\\u0434\\u0438\\u0439\\u0441\\u043a\\u043e \\u0441\\u0442\\u0430\\u043D\\u0434\\u0430\\u0440\\u0442\\u043D\\u043E \\u0432\\u0440\\u0435\\u043c\\u0435", "Asia/Calcutta" },
|
| - // ==========
|
| -
|
| - { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
|
| - { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
|
| - { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-8", "America/Los_Angeles" },
|
| - { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u30a2\\u30e1\\u30ea\\u30ab\\u592a\\u5e73\\u6d0b\\u6a19\\u6e96\\u6642", "America/Los_Angeles" },
|
| - { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-700" },
|
| - { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
|
| - { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-7", "America/Los_Angeles" },
|
| - { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u30a2\\u30e1\\u30ea\\u30ab\\u592a\\u5e73\\u6d0b\\u590f\\u6642\\u9593", "America/Los_Angeles" },
|
| - // icu ja.txt has exemplar city for this time zone
|
| - { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u30ED\\u30B5\\u30F3\\u30BC\\u30EB\\u30B9\\u6642\\u9593", "America/Los_Angeles" },
|
| - { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u30A2\\u30E1\\u30EA\\u30AB\\u592A\\u5e73\\u6D0B\\u6642\\u9593", "America/Los_Angeles" },
|
| - { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "VVVV", "\\u30ED\\u30B5\\u30F3\\u30BC\\u30EB\\u30B9\\u6642\\u9593", "America/Los_Angeles" },
|
| -
|
| - { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "-3:00" },
|
| - { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "-3:00" },
|
| - // icu ja.txt does not have info for this time zone
|
| - { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u30D6\\u30A8\\u30CE\\u30B9\\u30A2\\u30A4\\u30EC\\u30B9\\u6642\\u9593", "America/Buenos_Aires" },
|
| - { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "America/Buenos_Aires" },
|
| -
|
| - { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "-3:00" },
|
| - { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "-3:00" },
|
| - { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u30D6\\u30A8\\u30CE\\u30B9\\u30A2\\u30A4\\u30EC\\u30B9\\u6642\\u9593", "America/Buenos_Aires" },
|
| - { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "America/Buenos_Aires" },
|
| -
|
| - { "ja", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
|
| - { "ja", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
|
| - { "ja", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-5", "-5:00" },
|
| - { "ja", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "\\u30AD\\u30E5\\u30FC\\u30D0\\u6A19\\u6E96\\u6642", "-5:00" },
|
| - { "ja", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
|
| - { "ja", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
|
| - { "ja", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-4", "-4:00" },
|
| - { "ja", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "\\u30AD\\u30E5\\u30FC\\u30D0\\u590F\\u6642\\u9593", "-4:00" },
|
| - { "ja", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u30ad\\u30e5\\u30fc\\u30d0\\u6642\\u9593", "America/Havana" },
|
| - { "ja", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u30ad\\u30e5\\u30fc\\u30d0\\u6642\\u9593", "America/Havana" },
|
| -
|
| - { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
|
| - { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
|
| - { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
|
| - { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u590F\\u6642\\u9593", "+11:00" },
|
| - { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
|
| - { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
|
| - { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
|
| - { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u6A19\\u6E96\\u6642", "+10:00" },
|
| - // icu ja.txt does not have info for this time zone
|
| - { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u30B7\\u30C9\\u30CB\\u30FC\\u6642\\u9593", "Australia/Sydney" },
|
| - { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u6642\\u9593", "Australia/Sydney" },
|
| -
|
| - { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
|
| - { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
|
| - { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
|
| - { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u590F\\u6642\\u9593", "+11:00" },
|
| - { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
|
| - { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
|
| - { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
|
| - { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u6A19\\u6E96\\u6642", "+10:00" },
|
| - { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u30B7\\u30C9\\u30CB\\u30FC\\u6642\\u9593", "Australia/Sydney" },
|
| - { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u6642\\u9593", "Australia/Sydney" },
|
| -
|
| - { "ja", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
|
| - { "ja", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
|
| - { "ja", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
|
| - { "ja", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u30B0\\u30EA\\u30CB\\u30C3\\u30B8\\u6A19\\u6E96\\u6642", "+0:00" },
|
| - { "ja", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
|
| - { "ja", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
|
| - { "ja", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+1", "+1:00" },
|
| - { "ja", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "\\u82f1\\u56fd\\u590f\\u6642\\u9593", "+1:00" },
|
| - { "ja", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
|
| - { "ja", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
|
| - { "ja", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
|
| -
|
| - { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
|
| - { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
|
| - { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-3", "-3:00" },
|
| - { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
|
| -
|
| - // JB#5150
|
| - { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
|
| - { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
|
| - { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+5:30", "+5:30" },
|
| - { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u30A4\\u30F3\\u30C9\\u6A19\\u6E96\\u6642", "+5:30" },
|
| - { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
|
| - { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
|
| - { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+5:30", "+05:30" },
|
| - { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u30A4\\u30F3\\u30C9\\u6A19\\u6E96\\u6642", "+5:30" },
|
| - { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u30A4\\u30F3\\u30C9\\u6642\\u9593", "Asia/Calcutta" },
|
| - { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u30A4\\u30F3\\u30C9\\u6A19\\u6E96\\u6642", "Asia/Calcutta" },
|
| -
|
| - // ==========
|
| -
|
| - { "ti", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
|
| - { "ti", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
|
| - { "ti", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-8", "-8:00" },
|
| - { "ti", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "GMT-08:00", "-8:00" },
|
| - { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
|
| - { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
|
| - { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-7", "-7:00" },
|
| - { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "GMT-07:00", "-7:00" },
|
| - { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "Los Angeles", "America/Los_Angeles" },
|
| - { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "Los Angeles", "America/Los_Angeles" },
|
| -
|
| - { "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
|
| - { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
|
| - { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Buenos Aires", "America/Buenos_Aires" },
|
| - { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Buenos Aires", "America/Buenos_Aires" },
|
| -
|
| - { "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
|
| - { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
|
| - { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Buenos Aires", "America/Buenos_Aires" },
|
| - { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Buenos Aires", "America/Buenos_Aires" },
|
| -
|
| - { "ti", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
|
| - { "ti", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
|
| - { "ti", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-5", "-5:00" },
|
| - { "ti", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-05:00", "-5:00" },
|
| - { "ti", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
|
| - { "ti", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
|
| - { "ti", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-4", "-4:00" },
|
| - { "ti", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-04:00", "-4:00" },
|
| - { "ti", "America/Havana", "2004-07-15T00:00:00Z", "v", "CU", "America/Havana" },
|
| - { "ti", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "CU", "America/Havana" },
|
| -
|
| - { "ti", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
|
| - { "ti", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
|
| - { "ti", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
|
| - { "ti", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
|
| - { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
|
| - { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
|
| - { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
|
| - { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
|
| - { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "Sydney", "Australia/Sydney" },
|
| - { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "Sydney", "Australia/Sydney" },
|
| -
|
| - { "ti", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
|
| - { "ti", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
|
| - { "ti", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11", "+11:00" },
|
| - { "ti", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
|
| - { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
|
| - { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
|
| - { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
|
| - { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
|
| - { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "Sydney", "Australia/Sydney" },
|
| - { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "Sydney", "Australia/Sydney" },
|
| -
|
| - { "ti", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
|
| - { "ti", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
|
| - { "ti", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
|
| - { "ti", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "GMT", "+0:00" },
|
| - { "ti", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
|
| - { "ti", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
|
| - { "ti", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+1", "+1:00" },
|
| - { "ti", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+01:00", "+1:00" },
|
| - { "ti", "Europe/London", "2004-07-15T00:00:00Z", "v", "GB", "Europe/London" },
|
| - { "ti", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "GB", "Europe/London" },
|
| -
|
| - { "ti", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "ti", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "ti", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "ti", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
|
| - { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
|
| - { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
|
| - { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
|
| - { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
|
| - { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-3", "-3:00" },
|
| - { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
|
| -
|
| - // JB#5150
|
| - { "ti", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
|
| - { "ti", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
|
| - { "ti", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+5:30", "+5:30" },
|
| - { "ti", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
|
| - { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
|
| - { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
|
| - { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+5:30", "+05:30" },
|
| - { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
|
| - { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "IN", "Alna/Calcutta" },
|
| - { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "IN", "Asia/Calcutta" },
|
| -
|
| - // Ticket#8589 Partial location name to use country name if the zone is the golden
|
| - // zone for the time zone's country.
|
| - { "en_MX", "America/Chicago", "1995-07-15T00:00:00Z", "vvvv", "Central Time (United States)", "America/Chicago"},
|
| -
|
| - // Tests proper handling of time zones that should have empty sets when inherited from the parent.
|
| - // For example, en_GB understands CET as Central European Time, but en_HK, which inherits from en_GB
|
| - // does not
|
| - { "en_GB", "Europe/Paris", "2004-01-15T00:00:00Z", "zzzz", "Central European Standard Time", "+1:00"},
|
| - { "en_GB", "Europe/Paris", "2004-07-15T00:00:00Z", "zzzz", "Central European Summer Time", "+2:00"},
|
| - { "en_GB", "Europe/Paris", "2004-01-15T00:00:00Z", "z", "CET", "+1:00"},
|
| - { "en_GB", "Europe/Paris", "2004-07-15T00:00:00Z", "z", "CEST", "+2:00"},
|
| - { "en_HK", "Europe/Paris", "2004-01-15T00:00:00Z", "zzzz", "Central European Standard Time", "+1:00"},
|
| - { "en_HK", "Europe/Paris", "2004-07-15T00:00:00Z", "zzzz", "Central European Summer Time", "+2:00"},
|
| - { "en_HK", "Europe/Paris", "2004-01-15T00:00:00Z", "z", "GMT+1", "+1:00"},
|
| - { "en_HK", "Europe/Paris", "2004-07-15T00:00:00Z", "z", "GMT+2", "+2:00"},
|
| -
|
| - { NULL, NULL, NULL, NULL, NULL, NULL },
|
| - };
|
| -
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - Calendar *cal = GregorianCalendar::createInstance(status);
|
| - if (failure(status, "GregorianCalendar::createInstance", TRUE)) return;
|
| - SimpleDateFormat testfmt(UnicodeString("yyyy-MM-dd'T'HH:mm:ss'Z'"), status);
|
| - if (failure(status, "SimpleDateFormat constructor", TRUE)) return;
|
| - testfmt.setTimeZone(*TimeZone::getGMT());
|
| -
|
| - for (int i = 0; fallbackTests[i][0]; i++) {
|
| - const char **testLine = fallbackTests[i];
|
| - UnicodeString info[5];
|
| - for ( int j = 0 ; j < 5 ; j++ ) {
|
| - info[j] = UnicodeString(testLine[j], -1, US_INV);
|
| - }
|
| - info[4] = info[4].unescape();
|
| - logln("%s;%s;%s;%s", testLine[0], testLine[1], testLine[2], testLine[3]);
|
| -
|
| - TimeZone *tz = TimeZone::createTimeZone(info[1]);
|
| -
|
| - UDate d = testfmt.parse(testLine[2], status);
|
| - cal->setTime(d, status);
|
| - if (U_FAILURE(status)) {
|
| - errln(UnicodeString("Failed to set date: ") + testLine[2]);
|
| - }
|
| -
|
| - SimpleDateFormat fmt(info[3], Locale(testLine[0]),status);
|
| - ASSERT_OK(status);
|
| - cal->adoptTimeZone(tz);
|
| - UnicodeString result;
|
| - FieldPosition pos(0);
|
| - fmt.format(*cal,result,pos);
|
| - if (result != info[4]) {
|
| - errln(info[0] + ";" + info[1] + ";" + info[2] + ";" + info[3] + " expected: '" +
|
| - info[4] + "' but got: '" + result + "'");
|
| - }
|
| - }
|
| - delete cal;
|
| -}
|
| -
|
| -void DateFormatTest::TestRoundtripWithCalendar(void) {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| -
|
| - TimeZone *tz = TimeZone::createTimeZone("Europe/Paris");
|
| - TimeZone *gmt = TimeZone::createTimeZone("Etc/GMT");
|
| -
|
| - Calendar *calendars[] = {
|
| - Calendar::createInstance(*tz, Locale("und@calendar=gregorian"), status),
|
| - Calendar::createInstance(*tz, Locale("und@calendar=buddhist"), status),
|
| -// Calendar::createInstance(*tz, Locale("und@calendar=hebrew"), status),
|
| - Calendar::createInstance(*tz, Locale("und@calendar=islamic"), status),
|
| - Calendar::createInstance(*tz, Locale("und@calendar=japanese"), status),
|
| - NULL
|
| - };
|
| - if (U_FAILURE(status)) {
|
| - dataerrln("Failed to initialize calendars: %s", u_errorName(status));
|
| - for (int i = 0; calendars[i] != NULL; i++) {
|
| - delete calendars[i];
|
| - }
|
| - return;
|
| - }
|
| -
|
| - //FIXME The formatters commented out below are currently failing because of
|
| - // the calendar calculation problem reported by #6691
|
| -
|
| - // The order of test formatters must match the order of calendars above.
|
| - DateFormat *formatters[] = {
|
| - DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("en_US")), //calendar=gregorian
|
| - DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("th_TH")), //calendar=buddhist
|
| -// DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("he_IL@calendar=hebrew")),
|
| - DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("ar_EG@calendar=islamic")),
|
| -// DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("ja_JP@calendar=japanese")),
|
| - NULL
|
| - };
|
| -
|
| - UDate d = Calendar::getNow();
|
| - UnicodeString buf;
|
| - FieldPosition fpos;
|
| - ParsePosition ppos;
|
| -
|
| - for (int i = 0; formatters[i] != NULL; i++) {
|
| - buf.remove();
|
| - fpos.setBeginIndex(0);
|
| - fpos.setEndIndex(0);
|
| - calendars[i]->setTime(d, status);
|
| -
|
| - // Normal case output - the given calendar matches the calendar
|
| - // used by the formatter
|
| - formatters[i]->format(*calendars[i], buf, fpos);
|
| - UnicodeString refStr(buf);
|
| -
|
| - for (int j = 0; calendars[j] != NULL; j++) {
|
| - if (j == i) {
|
| - continue;
|
| - }
|
| - buf.remove();
|
| - fpos.setBeginIndex(0);
|
| - fpos.setEndIndex(0);
|
| - calendars[j]->setTime(d, status);
|
| -
|
| - // Even the different calendar type is specified,
|
| - // we should get the same result.
|
| - formatters[i]->format(*calendars[j], buf, fpos);
|
| - if (refStr != buf) {
|
| - errln((UnicodeString)"FAIL: Different format result with a different calendar for the same time -"
|
| - + "\n Reference calendar type=" + calendars[i]->getType()
|
| - + "\n Another calendar type=" + calendars[j]->getType()
|
| - + "\n Expected result=" + refStr
|
| - + "\n Actual result=" + buf);
|
| - }
|
| - }
|
| -
|
| - calendars[i]->setTimeZone(*gmt);
|
| - calendars[i]->clear();
|
| - ppos.setErrorIndex(-1);
|
| - ppos.setIndex(0);
|
| -
|
| - // Normal case parse result - the given calendar matches the calendar
|
| - // used by the formatter
|
| - formatters[i]->parse(refStr, *calendars[i], ppos);
|
| -
|
| - for (int j = 0; calendars[j] != NULL; j++) {
|
| - if (j == i) {
|
| - continue;
|
| - }
|
| - calendars[j]->setTimeZone(*gmt);
|
| - calendars[j]->clear();
|
| - ppos.setErrorIndex(-1);
|
| - ppos.setIndex(0);
|
| -
|
| - // Even the different calendar type is specified,
|
| - // we should get the same time and time zone.
|
| - formatters[i]->parse(refStr, *calendars[j], ppos);
|
| - if (calendars[i]->getTime(status) != calendars[j]->getTime(status)
|
| - || calendars[i]->getTimeZone() != calendars[j]->getTimeZone()) {
|
| - UnicodeString tzid;
|
| - errln((UnicodeString)"FAIL: Different parse result with a different calendar for the same string -"
|
| - + "\n Reference calendar type=" + calendars[i]->getType()
|
| - + "\n Another calendar type=" + calendars[j]->getType()
|
| - + "\n Date string=" + refStr
|
| - + "\n Expected time=" + calendars[i]->getTime(status)
|
| - + "\n Expected time zone=" + calendars[i]->getTimeZone().getID(tzid)
|
| - + "\n Actual time=" + calendars[j]->getTime(status)
|
| - + "\n Actual time zone=" + calendars[j]->getTimeZone().getID(tzid));
|
| - }
|
| - }
|
| - if (U_FAILURE(status)) {
|
| - errln((UnicodeString)"FAIL: " + u_errorName(status));
|
| - break;
|
| - }
|
| - }
|
| -
|
| - delete tz;
|
| - delete gmt;
|
| - for (int i = 0; calendars[i] != NULL; i++) {
|
| - delete calendars[i];
|
| - }
|
| - for (int i = 0; formatters[i] != NULL; i++) {
|
| - delete formatters[i];
|
| - }
|
| -}
|
| -
|
| -/*
|
| -void DateFormatTest::TestRelativeError(void)
|
| -{
|
| - UErrorCode status;
|
| - Locale en("en");
|
| -
|
| - DateFormat *en_reltime_reldate = DateFormat::createDateTimeInstance(DateFormat::kFullRelative,DateFormat::kFullRelative,en);
|
| - if(en_reltime_reldate == NULL) {
|
| - logln("PASS: rel date/rel time failed");
|
| - } else {
|
| - errln("FAIL: rel date/rel time created, should have failed.");
|
| - delete en_reltime_reldate;
|
| - }
|
| -}
|
| -
|
| -void DateFormatTest::TestRelativeOther(void)
|
| -{
|
| - logln("Nothing in this test. When we get more data from CLDR, put in some tests of -2, +2, etc. ");
|
| -}
|
| -*/
|
| -
|
| -void DateFormatTest::Test6338(void)
|
| -{
|
| - UErrorCode status = U_ZERO_ERROR;
|
| -
|
| - SimpleDateFormat *fmt1 = new SimpleDateFormat(UnicodeString("y-M-d"), Locale("ar"), status);
|
| - if (failure(status, "new SimpleDateFormat", TRUE)) return;
|
| -
|
| - UDate dt1 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
|
| - UnicodeString str1;
|
| - str1 = fmt1->format(dt1, str1);
|
| - logln(str1);
|
| -
|
| - UDate dt11 = fmt1->parse(str1, status);
|
| - failure(status, "fmt->parse");
|
| -
|
| - UnicodeString str11;
|
| - str11 = fmt1->format(dt11, str11);
|
| - logln(str11);
|
| -
|
| - if (str1 != str11) {
|
| - errln((UnicodeString)"FAIL: Different dates str1:" + str1
|
| - + " str2:" + str11);
|
| - }
|
| - delete fmt1;
|
| -
|
| - /////////////////
|
| -
|
| - status = U_ZERO_ERROR;
|
| - SimpleDateFormat *fmt2 = new SimpleDateFormat(UnicodeString("y M d"), Locale("ar"), status);
|
| - failure(status, "new SimpleDateFormat");
|
| -
|
| - UDate dt2 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
|
| - UnicodeString str2;
|
| - str2 = fmt2->format(dt2, str2);
|
| - logln(str2);
|
| -
|
| - UDate dt22 = fmt2->parse(str2, status);
|
| - failure(status, "fmt->parse");
|
| -
|
| - UnicodeString str22;
|
| - str22 = fmt2->format(dt22, str22);
|
| - logln(str22);
|
| -
|
| - if (str2 != str22) {
|
| - errln((UnicodeString)"FAIL: Different dates str1:" + str2
|
| - + " str2:" + str22);
|
| - }
|
| - delete fmt2;
|
| -
|
| - /////////////////
|
| -
|
| - status = U_ZERO_ERROR;
|
| - SimpleDateFormat *fmt3 = new SimpleDateFormat(UnicodeString("y-M-d"), Locale("en-us"), status);
|
| - failure(status, "new SimpleDateFormat");
|
| -
|
| - UDate dt3 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
|
| - UnicodeString str3;
|
| - str3 = fmt3->format(dt3, str3);
|
| - logln(str3);
|
| -
|
| - UDate dt33 = fmt3->parse(str3, status);
|
| - failure(status, "fmt->parse");
|
| -
|
| - UnicodeString str33;
|
| - str33 = fmt3->format(dt33, str33);
|
| - logln(str33);
|
| -
|
| - if (str3 != str33) {
|
| - errln((UnicodeString)"FAIL: Different dates str1:" + str3
|
| - + " str2:" + str33);
|
| - }
|
| - delete fmt3;
|
| -
|
| - /////////////////
|
| -
|
| - status = U_ZERO_ERROR;
|
| - SimpleDateFormat *fmt4 = new SimpleDateFormat(UnicodeString("y M d"), Locale("en-us"), status);
|
| - failure(status, "new SimpleDateFormat");
|
| -
|
| - UDate dt4 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
|
| - UnicodeString str4;
|
| - str4 = fmt4->format(dt4, str4);
|
| - logln(str4);
|
| -
|
| - UDate dt44 = fmt4->parse(str4, status);
|
| - failure(status, "fmt->parse");
|
| -
|
| - UnicodeString str44;
|
| - str44 = fmt4->format(dt44, str44);
|
| - logln(str44);
|
| -
|
| - if (str4 != str44) {
|
| - errln((UnicodeString)"FAIL: Different dates str1:" + str4
|
| - + " str2:" + str44);
|
| - }
|
| - delete fmt4;
|
| -
|
| -}
|
| -
|
| -void DateFormatTest::Test6726(void)
|
| -{
|
| - // status
|
| -// UErrorCode status = U_ZERO_ERROR;
|
| -
|
| - // fmtf, fmtl, fmtm, fmts;
|
| - UnicodeString strf, strl, strm, strs;
|
| - UDate dt = date(2008-1900, UCAL_JUNE, 10, 12, 00);
|
| -
|
| - Locale loc("ja");
|
| - DateFormat* fmtf = DateFormat::createDateTimeInstance(DateFormat::FULL, DateFormat::FULL, loc);
|
| - DateFormat* fmtl = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::FULL, loc);
|
| - DateFormat* fmtm = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL, loc);
|
| - DateFormat* fmts = DateFormat::createDateTimeInstance(DateFormat::SHORT, DateFormat::FULL, loc);
|
| - if (fmtf == NULL || fmtl == NULL || fmtm == NULL || fmts == NULL) {
|
| - dataerrln("Unable to create DateFormat. got NULL.");
|
| - /* It may not be true that if one is NULL all is NULL. Just to be safe. */
|
| - delete fmtf;
|
| - delete fmtl;
|
| - delete fmtm;
|
| - delete fmts;
|
| -
|
| - return;
|
| - }
|
| - strf = fmtf->format(dt, strf);
|
| - strl = fmtl->format(dt, strl);
|
| - strm = fmtm->format(dt, strm);
|
| - strs = fmts->format(dt, strs);
|
| -
|
| -
|
| - logln("strm.charAt(10)=%04X wanted 0x20\n", strm.charAt(10));
|
| - if (strm.charAt(10) != UChar(0x0020)) {
|
| - errln((UnicodeString)"FAIL: Improper formatted date: " + strm );
|
| - }
|
| - logln("strs.charAt(10)=%04X wanted 0x20\n", strs.charAt(8));
|
| - if (strs.charAt(10) != UChar(0x0020)) {
|
| - errln((UnicodeString)"FAIL: Improper formatted date: " + strs);
|
| - }
|
| -
|
| - delete fmtf;
|
| - delete fmtl;
|
| - delete fmtm;
|
| - delete fmts;
|
| -
|
| - return;
|
| -}
|
| -
|
| -/**
|
| - * Test DateFormat's parsing of default GMT variants. See ticket#6135
|
| - */
|
| -void DateFormatTest::TestGMTParsing() {
|
| - const char* DATA[] = {
|
| - "HH:mm:ss Z",
|
| -
|
| - // pattern, input, expected output (in quotes)
|
| - "HH:mm:ss Z", "10:20:30 GMT+03:00", "10:20:30 +0300",
|
| - "HH:mm:ss Z", "10:20:30 UT-02:00", "10:20:30 -0200",
|
| - "HH:mm:ss Z", "10:20:30 GMT", "10:20:30 +0000",
|
| - "HH:mm:ss vvvv", "10:20:30 UT+10:00", "10:20:30 +1000",
|
| - "HH:mm:ss zzzz", "10:20:30 UTC", "10:20:30 +0000", // standalone "UTC"
|
| - "ZZZZ HH:mm:ss", "UT 10:20:30", "10:20:30 +0000",
|
| - "z HH:mm:ss", "UT+0130 10:20:30", "10:20:30 +0130",
|
| - "z HH:mm:ss", "UTC+0130 10:20:30", "10:20:30 +0130",
|
| - // Note: GMT-1100 no longer works because of the introduction of the short
|
| - // localized GMT support. Previous implementation support this level of
|
| - // leniency (no separator char in localized GMT format), but the new
|
| - // implementation handles GMT-11 as the legitimate short localized GMT format
|
| - // and stop at there. Otherwise, roundtrip would be broken.
|
| - //"HH mm Z ss", "10 20 GMT-1100 30", "10:20:30 -1100",
|
| - "HH mm Z ss", "10 20 GMT-11 30", "10:20:30 -1100",
|
| - "HH:mm:ssZZZZZ", "14:25:45Z", "14:25:45 +0000",
|
| - "HH:mm:ssZZZZZ", "15:00:00-08:00", "15:00:00 -0800",
|
| - };
|
| - const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
|
| - expectParse(DATA, DATA_len, Locale("en"));
|
| -}
|
| -
|
| -// Test case for localized GMT format parsing
|
| -// with no delimitters in offset format (Chinese locale)
|
| -void DateFormatTest::Test6880() {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UDate d1, d2, dp1, dp2, dexp1, dexp2;
|
| - UnicodeString s1, s2;
|
| -
|
| - TimeZone *tz = TimeZone::createTimeZone("Asia/Shanghai");
|
| - GregorianCalendar gcal(*tz, status);
|
| - if (failure(status, "construct GregorianCalendar", TRUE)) return;
|
| -
|
| - gcal.clear();
|
| - gcal.set(1900, UCAL_JULY, 1, 12, 00); // offset 8:05:43
|
| - d1 = gcal.getTime(status);
|
| -
|
| - gcal.clear();
|
| - gcal.set(1950, UCAL_JULY, 1, 12, 00); // offset 8:00
|
| - d2 = gcal.getTime(status);
|
| -
|
| - gcal.clear();
|
| - gcal.set(1970, UCAL_JANUARY, 1, 12, 00);
|
| - dexp2 = gcal.getTime(status);
|
| - dexp1 = dexp2 - (5*60 + 43)*1000; // subtract 5m43s
|
| -
|
| - if (U_FAILURE(status)) {
|
| - errln("FAIL: Gregorian calendar error");
|
| - }
|
| -
|
| - DateFormat *fmt = DateFormat::createTimeInstance(DateFormat::kFull, Locale("zh"));
|
| - if (fmt == NULL) {
|
| - dataerrln("Unable to create DateFormat. Got NULL.");
|
| - return;
|
| - }
|
| - fmt->adoptTimeZone(tz);
|
| -
|
| - fmt->format(d1, s1);
|
| - fmt->format(d2, s2);
|
| -
|
| - dp1 = fmt->parse(s1, status);
|
| - dp2 = fmt->parse(s2, status);
|
| -
|
| - if (U_FAILURE(status)) {
|
| - errln("FAIL: Parse failure");
|
| - }
|
| -
|
| - if (dp1 != dexp1) {
|
| - errln("FAIL: Failed to parse " + s1 + " parsed: " + dp1 + " expected: " + dexp1);
|
| - }
|
| - if (dp2 != dexp2) {
|
| - errln("FAIL: Failed to parse " + s2 + " parsed: " + dp2 + " expected: " + dexp2);
|
| - }
|
| -
|
| - delete fmt;
|
| -}
|
| -
|
| -typedef struct {
|
| - const char * localeStr;
|
| - UBool lenient;
|
| - UBool expectFail;
|
| - UnicodeString datePattern;
|
| - UnicodeString dateString;
|
| -} NumAsStringItem;
|
| -
|
| -void DateFormatTest::TestNumberAsStringParsing()
|
| -{
|
| - const NumAsStringItem items[] = {
|
| - // loc lenient fail? datePattern dateString
|
| - { "", FALSE, TRUE, UnicodeString("y MMMM d HH:mm:ss"), UnicodeString("2009 7 14 08:43:57") },
|
| - { "", TRUE, FALSE, UnicodeString("y MMMM d HH:mm:ss"), UnicodeString("2009 7 14 08:43:57") },
|
| - { "en", FALSE, FALSE, UnicodeString("MMM d, y"), UnicodeString("Jul 14, 2009") },
|
| - { "en", TRUE, FALSE, UnicodeString("MMM d, y"), UnicodeString("Jul 14, 2009") },
|
| - { "en", FALSE, TRUE, UnicodeString("MMM d, y"), UnicodeString("7 14, 2009") },
|
| - { "en", TRUE, FALSE, UnicodeString("MMM d, y"), UnicodeString("7 14, 2009") },
|
| - { "ja", FALSE, FALSE, UnicodeString("yyyy/MM/dd"), UnicodeString("2009/07/14") },
|
| - { "ja", TRUE, FALSE, UnicodeString("yyyy/MM/dd"), UnicodeString("2009/07/14") },
|
| - //{ "ja", FALSE, FALSE, UnicodeString("yyyy/MMMMM/d"), UnicodeString("2009/7/14") }, // #8860 covers test failure
|
| - { "ja", TRUE, FALSE, UnicodeString("yyyy/MMMMM/d"), UnicodeString("2009/7/14") },
|
| - { "ja", FALSE, FALSE, CharsToUnicodeString("y\\u5E74M\\u6708d\\u65E5"), CharsToUnicodeString("2009\\u5E747\\u670814\\u65E5") },
|
| - { "ja", TRUE, FALSE, CharsToUnicodeString("y\\u5E74M\\u6708d\\u65E5"), CharsToUnicodeString("2009\\u5E747\\u670814\\u65E5") },
|
| - { "ja", FALSE, FALSE, CharsToUnicodeString("y\\u5E74MMMd\\u65E5"), CharsToUnicodeString("2009\\u5E747\\u670814\\u65E5") },
|
| - { "ja", TRUE, FALSE, CharsToUnicodeString("y\\u5E74MMMd\\u65E5"), CharsToUnicodeString("2009\\u5E747\\u670814\\u65E5") }, // #8820 fixes test failure
|
| - { "ko", FALSE, FALSE, UnicodeString("yyyy. M. d."), UnicodeString("2009. 7. 14.") },
|
| - { "ko", TRUE, FALSE, UnicodeString("yyyy. M. d."), UnicodeString("2009. 7. 14.") },
|
| - { "ko", FALSE, FALSE, UnicodeString("yyyy. MMMMM d."), CharsToUnicodeString("2009. 7\\uC6D4 14.") },
|
| - { "ko", TRUE, FALSE, UnicodeString("yyyy. MMMMM d."), CharsToUnicodeString("2009. 7\\uC6D4 14.") }, // #8820 fixes test failure
|
| - { "ko", FALSE, FALSE, CharsToUnicodeString("y\\uB144 M\\uC6D4 d\\uC77C"), CharsToUnicodeString("2009\\uB144 7\\uC6D4 14\\uC77C") },
|
| - { "ko", TRUE, FALSE, CharsToUnicodeString("y\\uB144 M\\uC6D4 d\\uC77C"), CharsToUnicodeString("2009\\uB144 7\\uC6D4 14\\uC77C") },
|
| - { "ko", FALSE, FALSE, CharsToUnicodeString("y\\uB144 MMM d\\uC77C"), CharsToUnicodeString("2009\\uB144 7\\uC6D4 14\\uC77C") },
|
| - { "ko", TRUE, FALSE, CharsToUnicodeString("y\\uB144 MMM d\\uC77C"), CharsToUnicodeString("2009\\uB144 7\\uC6D4 14\\uC77C") }, // #8820 fixes test failure
|
| - { NULL, FALSE, FALSE, UnicodeString(""), UnicodeString("") }
|
| - };
|
| - const NumAsStringItem * itemPtr;
|
| - for (itemPtr = items; itemPtr->localeStr != NULL; itemPtr++ ) {
|
| - Locale locale = Locale::createFromName(itemPtr->localeStr);
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - SimpleDateFormat *formatter = new SimpleDateFormat(itemPtr->datePattern, locale, status);
|
| - if (formatter == NULL || U_FAILURE(status)) {
|
| - dataerrln("Unable to create SimpleDateFormat - %s", u_errorName(status));
|
| - return;
|
| - }
|
| -
|
| - formatter->setLenient(itemPtr->lenient);
|
| - formatter->setBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, itemPtr->lenient, status).setBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, itemPtr->lenient, status);
|
| - UDate date1 = formatter->parse(itemPtr->dateString, status);
|
| - if (U_FAILURE(status)) {
|
| - if (!itemPtr->expectFail) {
|
| - errln("FAIL, err when expected success: Locale \"" + UnicodeString(itemPtr->localeStr) + "\", lenient " + itemPtr->lenient +
|
| - ": using pattern \"" + itemPtr->datePattern + "\", could not parse \"" + itemPtr->dateString + "\"; err: " + u_errorName(status) );
|
| - }
|
| - } else if (itemPtr->expectFail) {
|
| - errln("FAIL, expected err but got none: Locale \"" + UnicodeString(itemPtr->localeStr) + "\", lenient " + itemPtr->lenient +
|
| - ": using pattern \"" + itemPtr->datePattern + "\", did parse \"" + itemPtr->dateString + "\"." );
|
| - } else if (!itemPtr->lenient) {
|
| - UnicodeString formatted;
|
| - formatter->format(date1, formatted);
|
| - if (formatted != itemPtr->dateString) {
|
| - errln("FAIL, mismatch formatting parsed date: Locale \"" + UnicodeString(itemPtr->localeStr) + "\", lenient " + itemPtr->lenient +
|
| - ": using pattern \"" + itemPtr->datePattern + "\", did parse \"" + itemPtr->dateString + "\", formatted result \"" + formatted + "\".");
|
| - }
|
| - }
|
| -
|
| - delete formatter;
|
| - }
|
| -}
|
| -
|
| -void DateFormatTest::TestISOEra() {
|
| -
|
| - const char* data[] = {
|
| - // input, output
|
| - "BC 4004-10-23T07:00:00Z", "BC 4004-10-23T07:00:00Z",
|
| - "AD 4004-10-23T07:00:00Z", "AD 4004-10-23T07:00:00Z",
|
| - "-4004-10-23T07:00:00Z" , "BC 4005-10-23T07:00:00Z",
|
| - "4004-10-23T07:00:00Z" , "AD 4004-10-23T07:00:00Z",
|
| - };
|
| -
|
| - int32_t numData = 8;
|
| -
|
| - UErrorCode status = U_ZERO_ERROR;
|
| -
|
| - // create formatter
|
| - SimpleDateFormat *fmt1 = new SimpleDateFormat(UnicodeString("GGG yyyy-MM-dd'T'HH:mm:ss'Z"), status);
|
| - failure(status, "new SimpleDateFormat", TRUE);
|
| - if (status == U_MISSING_RESOURCE_ERROR) {
|
| - if (fmt1 != NULL) {
|
| - delete fmt1;
|
| - }
|
| - return;
|
| - }
|
| - for(int i=0; i < numData; i+=2) {
|
| - // create input string
|
| - UnicodeString in = data[i];
|
| -
|
| - // parse string to date
|
| - UDate dt1 = fmt1->parse(in, status);
|
| - failure(status, "fmt->parse", TRUE);
|
| -
|
| - // format date back to string
|
| - UnicodeString out;
|
| - out = fmt1->format(dt1, out);
|
| - logln(out);
|
| -
|
| - // check that roundtrip worked as expected
|
| - UnicodeString expected = data[i+1];
|
| - if (out != expected) {
|
| - dataerrln((UnicodeString)"FAIL: " + in + " -> " + out + " expected -> " + expected);
|
| - }
|
| - }
|
| -
|
| - delete fmt1;
|
| -}
|
| -void DateFormatTest::TestFormalChineseDate() {
|
| -
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UnicodeString pattern ("y\\u5e74M\\u6708d\\u65e5", -1, US_INV );
|
| - pattern = pattern.unescape();
|
| - UnicodeString override ("y=hanidec;M=hans;d=hans", -1, US_INV );
|
| -
|
| - // create formatter
|
| - SimpleDateFormat *sdf = new SimpleDateFormat(pattern,override,Locale::getChina(),status);
|
| - if (failure(status, "new SimpleDateFormat with override", TRUE)) {
|
| - return;
|
| - }
|
| -
|
| - UDate thedate = date(2009-1900, UCAL_JULY, 28);
|
| - FieldPosition pos(0);
|
| - UnicodeString result;
|
| - sdf->format(thedate,result,pos);
|
| -
|
| - UnicodeString expected = "\\u4e8c\\u3007\\u3007\\u4e5d\\u5e74\\u4e03\\u6708\\u4e8c\\u5341\\u516b\\u65e5";
|
| - expected = expected.unescape();
|
| - if (result != expected) {
|
| - dataerrln((UnicodeString)"FAIL: -> " + result + " expected -> " + expected);
|
| - }
|
| -
|
| - UDate parsedate = sdf->parse(expected,status);
|
| - if ( parsedate != thedate ) {
|
| - UnicodeString pat1 ("yyyy-MM-dd'T'HH:mm:ss'Z'", -1, US_INV );
|
| - SimpleDateFormat *usf = new SimpleDateFormat(pat1,Locale::getEnglish(),status);
|
| - UnicodeString parsedres,expres;
|
| - usf->format(parsedate,parsedres,pos);
|
| - usf->format(thedate,expres,pos);
|
| - dataerrln((UnicodeString)"FAIL: parsed -> " + parsedres + " expected -> " + expres);
|
| - delete usf;
|
| - }
|
| - delete sdf;
|
| -}
|
| -
|
| -// Test case for #8675
|
| -// Incorrect parse offset with stand alone GMT string on 2nd or later iteration.
|
| -void DateFormatTest::TestStandAloneGMTParse() {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - SimpleDateFormat *sdf = new SimpleDateFormat("ZZZZ", Locale(""), status);
|
| -
|
| - if (U_SUCCESS(status)) {
|
| -
|
| - UnicodeString inText("GMT$$$");
|
| - for (int32_t i = 0; i < 10; i++) {
|
| - ParsePosition pos(0);
|
| - sdf->parse(inText, pos);
|
| - if (pos.getIndex() != 3) {
|
| - errln((UnicodeString)"FAIL: Incorrect output parse position: actual=" + pos.getIndex() + " expected=3");
|
| - }
|
| - }
|
| -
|
| - delete sdf;
|
| - } else {
|
| - dataerrln("Unable to create SimpleDateFormat - %s", u_errorName(status));
|
| - }
|
| -}
|
| -
|
| -void DateFormatTest::TestParsePosition() {
|
| - const char* TestData[][4] = {
|
| - // {<pattern>, <lead>, <date string>, <trail>}
|
| - {"yyyy-MM-dd HH:mm:ssZ", "", "2010-01-10 12:30:00+0500", ""},
|
| - {"yyyy-MM-dd HH:mm:ss ZZZZ", "", "2010-01-10 12:30:00 GMT+05:00", ""},
|
| - {"Z HH:mm:ss", "", "-0100 13:20:30", ""},
|
| - {"y-M-d Z", "", "2011-8-25 -0400", " Foo"},
|
| - {"y/M/d H:mm:ss z", "", "2011/7/1 12:34:00 PDT", ""},
|
| - {"y/M/d H:mm:ss z", "+123", "2011/7/1 12:34:00 PDT", " PST"},
|
| - {"vvvv a h:mm:ss", "", "Pacific Time AM 10:21:45", ""},
|
| - {"HH:mm v M/d", "111", "14:15 PT 8/10", " 12345"},
|
| - {"'time zone:' VVVV 'date:' yyyy-MM-dd", "xxxx", "time zone: Los Angeles Time date: 2010-02-25", "xxxx"},
|
| - {"yG", "", "2012AD", ""},
|
| - {"yG", "", "2012", "x"},
|
| - {0, 0, 0, 0},
|
| - };
|
| -
|
| - for (int32_t i = 0; TestData[i][0]; i++) {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - SimpleDateFormat *sdf = new SimpleDateFormat(UnicodeString(TestData[i][0]), status);
|
| - if (failure(status, "new SimpleDateFormat", TRUE)) return;
|
| -
|
| - int32_t startPos, resPos;
|
| -
|
| - // lead text
|
| - UnicodeString input(TestData[i][1]);
|
| - startPos = input.length();
|
| -
|
| - // date string
|
| - input += TestData[i][2];
|
| - resPos = input.length();
|
| -
|
| - // trail text
|
| - input += TestData[i][3];
|
| -
|
| - ParsePosition pos(startPos);
|
| - //UDate d = sdf->parse(input, pos);
|
| - (void)sdf->parse(input, pos);
|
| -
|
| - if (pos.getIndex() != resPos) {
|
| - errln(UnicodeString("FAIL: Parsing [") + input + "] with pattern [" + TestData[i][0] + "] returns position - "
|
| - + pos.getIndex() + ", expected - " + resPos);
|
| - }
|
| -
|
| - delete sdf;
|
| - }
|
| -}
|
| -
|
| -
|
| -typedef struct {
|
| - int32_t era;
|
| - int32_t year;
|
| - int32_t month; // 1-based
|
| - int32_t isLeapMonth;
|
| - int32_t day;
|
| -} ChineseCalTestDate;
|
| -
|
| -#define NUM_TEST_DATES 3
|
| -
|
| -typedef struct {
|
| - const char * locale;
|
| - int32_t style; // <0 => custom
|
| - UnicodeString dateString[NUM_TEST_DATES];
|
| -} MonthPatternItem;
|
| -
|
| -void DateFormatTest::TestMonthPatterns()
|
| -{
|
| - const ChineseCalTestDate dates[NUM_TEST_DATES] = {
|
| - // era yr mo lp da
|
| - { 78, 29, 4, 0, 2 }, // (in chinese era 78) gregorian 2012-4-22
|
| - { 78, 29, 4, 1, 2 }, // (in chinese era 78) gregorian 2012-5-22
|
| - { 78, 29, 5, 0, 2 }, // (in chinese era 78) gregorian 2012-6-20
|
| - };
|
| -
|
| - const MonthPatternItem items[] = {
|
| - // locale date style; expected formats for the 3 dates above
|
| - { "root@calendar=chinese", DateFormat::kLong, { UnicodeString("2012(ren-chen) M04 2"), UnicodeString("2012(ren-chen) M04bis 2"), UnicodeString("2012(ren-chen) M05 2") } },
|
| - { "root@calendar=chinese", DateFormat::kShort, { UnicodeString("2012-04-02"), UnicodeString("2012-04bis-02"), UnicodeString("2012-05-02") } },
|
| - { "root@calendar=chinese", -1, { UnicodeString("29-4-2"), UnicodeString("29-4bis-2"), UnicodeString("29-5-2") } },
|
| - { "root@calendar=chinese", -2, { UnicodeString("78x29-4-2"), UnicodeString("78x29-4bis-2"), UnicodeString("78x29-5-2") } },
|
| - { "root@calendar=chinese", -3, { UnicodeString("ren-chen-4-2"), UnicodeString("ren-chen-4bis-2"), UnicodeString("ren-chen-5-2") } },
|
| - { "root@calendar=chinese", -4, { UnicodeString("ren-chen M04 2"), UnicodeString("ren-chen M04bis 2"), UnicodeString("ren-chen M05 2") } },
|
| - { "en@calendar=gregorian", -3, { UnicodeString("2012-4-22"), UnicodeString("2012-5-22"), UnicodeString("2012-6-20") } },
|
| - { "en@calendar=chinese", DateFormat::kLong, { UnicodeString("Month4 2, 2012(ren-chen)"), UnicodeString("Month4bis 2, 2012(ren-chen)"), UnicodeString("Month5 2, 2012(ren-chen)") } },
|
| - { "en@calendar=chinese", DateFormat::kShort, { UnicodeString("4/2/2012"), UnicodeString("4bis/2/2012"), UnicodeString("5/2/2012") } },
|
| - { "zh@calendar=chinese", DateFormat::kLong, { CharsToUnicodeString("2012\\u58EC\\u8FB0\\u5E74\\u56DB\\u6708\\u521D\\u4E8C"),
|
| - CharsToUnicodeString("2012\\u58EC\\u8FB0\\u5E74\\u95F0\\u56DB\\u6708\\u521D\\u4E8C"),
|
| - CharsToUnicodeString("2012\\u58EC\\u8FB0\\u5E74\\u4E94\\u6708\\u521D\\u4E8C") } },
|
| - { "zh@calendar=chinese", DateFormat::kShort, { CharsToUnicodeString("2012-4-2"),
|
| - CharsToUnicodeString("2012-\\u95F04-2"),
|
| - CharsToUnicodeString("2012-5-2") } },
|
| - { "zh@calendar=chinese", -3, { CharsToUnicodeString("\\u58EC\\u8FB0-4-2"),
|
| - CharsToUnicodeString("\\u58EC\\u8FB0-\\u95F04-2"),
|
| - CharsToUnicodeString("\\u58EC\\u8FB0-5-2") } },
|
| - { "zh@calendar=chinese", -4, { CharsToUnicodeString("\\u58EC\\u8FB0 \\u56DB\\u6708 2"),
|
| - CharsToUnicodeString("\\u58EC\\u8FB0 \\u95F0\\u56DB\\u6708 2"),
|
| - CharsToUnicodeString("\\u58EC\\u8FB0 \\u4E94\\u6708 2") } },
|
| - { "zh_Hant@calendar=chinese", DateFormat::kLong, { CharsToUnicodeString("2012\\u58EC\\u8FB0\\u5E74\\u56DB\\u6708\\u521D\\u4E8C"),
|
| - CharsToUnicodeString("2012\\u58EC\\u8FB0\\u5E74\\u958F\\u56DB\\u6708\\u521D\\u4E8C"),
|
| - CharsToUnicodeString("2012\\u58EC\\u8FB0\\u5E74\\u4E94\\u6708\\u521D\\u4E8C") } },
|
| - { "zh_Hant@calendar=chinese", DateFormat::kShort, { CharsToUnicodeString("2012/4/2"),
|
| - CharsToUnicodeString("2012/\\u958F4/2"),
|
| - CharsToUnicodeString("2012/5/2") } },
|
| - { "fr@calendar=chinese", DateFormat::kLong, { CharsToUnicodeString("2 s\\u00ECyu\\u00E8 ren-chen"),
|
| - CharsToUnicodeString("2 s\\u00ECyu\\u00E8bis ren-chen"),
|
| - CharsToUnicodeString("2 w\\u01D4yu\\u00E8 ren-chen") } },
|
| - { "fr@calendar=chinese", DateFormat::kShort, { UnicodeString("2/4/29"), UnicodeString("2/4bis/29"), UnicodeString("2/5/29") } },
|
| - { "en@calendar=dangi", DateFormat::kLong, { UnicodeString("Month3bis 2, 2012(29)"), UnicodeString("Month4 2, 2012(29)"), UnicodeString("Month5 1, 2012(29)") } },
|
| - { "en@calendar=dangi", DateFormat::kShort, { UnicodeString("3bis/2/2012"), UnicodeString("4/2/2012"), UnicodeString("5/1/2012") } },
|
| - { "en@calendar=dangi", -2, { UnicodeString("78x29-3bis-2"), UnicodeString("78x29-4-2"), UnicodeString("78x29-5-1") } },
|
| - { "ko@calendar=dangi", DateFormat::kLong, { CharsToUnicodeString("\\uC784\\uC9C4\\uB144 \\uC7243\\uC6D4 2\\uC77C"),
|
| - CharsToUnicodeString("\\uC784\\uC9C4\\uB144 4\\uC6D4 2\\uC77C"),
|
| - CharsToUnicodeString("\\uC784\\uC9C4\\uB144 5\\uC6D4 1\\uC77C") } },
|
| - { "ko@calendar=dangi", DateFormat::kShort, { CharsToUnicodeString("29. \\uC7243. 2."),
|
| - CharsToUnicodeString("29. 4. 2."),
|
| - CharsToUnicodeString("29. 5. 1.") } },
|
| - // terminator
|
| - { NULL, 0, { UnicodeString(""), UnicodeString(""), UnicodeString("") } }
|
| - };
|
| -
|
| - //. style: -1 -2 -3 -4
|
| - const UnicodeString customPatterns[] = { "y-Ml-d", "G'x'y-Ml-d", "U-M-d", "U MMM d" }; // like old root pattern, using 'l'
|
| -
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - Locale rootChineseCalLocale = Locale::createFromName("root@calendar=chinese");
|
| - Calendar * rootChineseCalendar = Calendar::createInstance(rootChineseCalLocale, status);
|
| - if (U_SUCCESS(status)) {
|
| - const MonthPatternItem * itemPtr;
|
| - for (itemPtr = items; itemPtr->locale != NULL; itemPtr++ ) {
|
| - Locale locale = Locale::createFromName(itemPtr->locale);
|
| - DateFormat * dmft = (itemPtr->style >= 0)?
|
| - DateFormat::createDateInstance((DateFormat::EStyle)itemPtr->style, locale):
|
| - new SimpleDateFormat(customPatterns[-itemPtr->style - 1], locale, status);
|
| - if ( dmft != NULL ) {
|
| - if (U_SUCCESS(status)) {
|
| - const ChineseCalTestDate * datePtr = dates;
|
| - int32_t idate;
|
| - for (idate = 0; idate < NUM_TEST_DATES; idate++, datePtr++) {
|
| - rootChineseCalendar->clear();
|
| - rootChineseCalendar->set(UCAL_ERA, datePtr->era);
|
| - rootChineseCalendar->set(datePtr->year, datePtr->month-1, datePtr->day);
|
| - rootChineseCalendar->set(UCAL_IS_LEAP_MONTH, datePtr->isLeapMonth);
|
| - UnicodeString result;
|
| - FieldPosition fpos(0);
|
| - dmft->format(*rootChineseCalendar, result, fpos);
|
| - if ( result.compare(itemPtr->dateString[idate]) != 0 ) {
|
| - errln( UnicodeString("FAIL: Chinese calendar format for locale ") + UnicodeString(itemPtr->locale) + ", style " + itemPtr->style +
|
| - ", expected \"" + itemPtr->dateString[idate] + "\", got \"" + result + "\"");
|
| - } else {
|
| - // formatted OK, try parse
|
| - ParsePosition ppos(0);
|
| - // ensure we are really parsing the fields we should be
|
| - rootChineseCalendar->set(UCAL_YEAR, 1);
|
| - rootChineseCalendar->set(UCAL_MONTH, 0);
|
| - rootChineseCalendar->set(UCAL_IS_LEAP_MONTH, 0);
|
| - rootChineseCalendar->set(UCAL_DATE, 1);
|
| - //
|
| - dmft->parse(result, *rootChineseCalendar, ppos);
|
| - int32_t year = rootChineseCalendar->get(UCAL_YEAR, status);
|
| - int32_t month = rootChineseCalendar->get(UCAL_MONTH, status) + 1;
|
| - int32_t isLeapMonth = rootChineseCalendar->get(UCAL_IS_LEAP_MONTH, status);
|
| - int32_t day = rootChineseCalendar->get(UCAL_DATE, status);
|
| - if ( ppos.getIndex() < result.length() || year != datePtr->year || month != datePtr->month || isLeapMonth != datePtr->isLeapMonth || day != datePtr->day ) {
|
| - errln( UnicodeString("FAIL: Chinese calendar parse for locale ") + UnicodeString(itemPtr->locale) + ", style " + itemPtr->style +
|
| - ", string \"" + result + "\", expected " + datePtr->year +"-"+datePtr->month+"("+datePtr->isLeapMonth+")-"+datePtr->day + ", got pos " +
|
| - ppos.getIndex() + " " + year +"-"+month+"("+isLeapMonth+")-"+day);
|
| - }
|
| - }
|
| - }
|
| - } else {
|
| - dataerrln("Error creating SimpleDateFormat for Chinese calendar- %s", u_errorName(status));
|
| - }
|
| - delete dmft;
|
| - } else {
|
| - dataerrln("FAIL: Unable to create DateFormat for Chinese calendar- %s", u_errorName(status));
|
| - }
|
| - }
|
| - delete rootChineseCalendar;
|
| - } else {
|
| - errln(UnicodeString("FAIL: Unable to create Calendar for root@calendar=chinese"));
|
| - }
|
| -}
|
| -
|
| -typedef struct {
|
| - const char * locale;
|
| - UnicodeString pattern;
|
| - UDisplayContext capitalizationContext;
|
| - UnicodeString expectedFormat;
|
| -} TestContextItem;
|
| -
|
| -void DateFormatTest::TestContext()
|
| -{
|
| - const UDate july022008 = 1215000001979.0;
|
| - const TestContextItem items[] = {
|
| - //locale pattern capitalizationContext expected formatted date
|
| - { "fr", UnicodeString("MMMM y"), UDISPCTX_CAPITALIZATION_NONE, UnicodeString("juillet 2008") },
|
| -#if !UCONFIG_NO_BREAK_ITERATION
|
| - { "fr", UnicodeString("MMMM y"), UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, UnicodeString("juillet 2008") },
|
| - { "fr", UnicodeString("MMMM y"), UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, UnicodeString("Juillet 2008") },
|
| - { "fr", UnicodeString("MMMM y"), UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, UnicodeString("juillet 2008") },
|
| - { "fr", UnicodeString("MMMM y"), UDISPCTX_CAPITALIZATION_FOR_STANDALONE, UnicodeString("Juillet 2008") },
|
| -#endif
|
| - { "cs", UnicodeString("LLLL y"), UDISPCTX_CAPITALIZATION_NONE, CharsToUnicodeString("\\u010Dervenec 2008") },
|
| -#if !UCONFIG_NO_BREAK_ITERATION
|
| - { "cs", UnicodeString("LLLL y"), UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, CharsToUnicodeString("\\u010Dervenec 2008") },
|
| - { "cs", UnicodeString("LLLL y"), UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, CharsToUnicodeString("\\u010Cervenec 2008") },
|
| - { "cs", UnicodeString("LLLL y"), UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, CharsToUnicodeString("\\u010Cervenec 2008") },
|
| - { "cs", UnicodeString("LLLL y"), UDISPCTX_CAPITALIZATION_FOR_STANDALONE, CharsToUnicodeString("\\u010Dervenec 2008") },
|
| -#endif
|
| - // terminator
|
| - { NULL, UnicodeString(""), (UDisplayContext)0, UnicodeString("") }
|
| - };
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - Calendar* cal = Calendar::createInstance(status);
|
| - if (U_FAILURE(status)) {
|
| - dataerrln(UnicodeString("FAIL: Unable to create Calendar for default timezone and locale."));
|
| - } else {
|
| - cal->setTime(july022008, status);
|
| - const TestContextItem * itemPtr;
|
| - for (itemPtr = items; itemPtr->locale != NULL; itemPtr++ ) {
|
| - Locale locale = Locale::createFromName(itemPtr->locale);
|
| - status = U_ZERO_ERROR;
|
| - SimpleDateFormat * sdmft = new SimpleDateFormat(itemPtr->pattern, locale, status);
|
| - if (U_FAILURE(status)) {
|
| - dataerrln(UnicodeString("FAIL: Unable to create SimpleDateFormat for specified pattern with locale ") + UnicodeString(itemPtr->locale));
|
| - } else {
|
| - sdmft->setContext(itemPtr->capitalizationContext, status);
|
| - UnicodeString result;
|
| - FieldPosition pos(0);
|
| - sdmft->format(*cal, result, pos);
|
| - if (result.compare(itemPtr->expectedFormat) != 0) {
|
| - errln(UnicodeString("FAIL: format for locale ") + UnicodeString(itemPtr->locale) +
|
| - ", status " + (int)status +
|
| - ", capitalizationContext " + (int)itemPtr->capitalizationContext +
|
| - ", expected " + itemPtr->expectedFormat + ", got " + result);
|
| - }
|
| - }
|
| - if (sdmft) {
|
| - delete sdmft;
|
| - }
|
| - }
|
| - }
|
| - if (cal) {
|
| - delete cal;
|
| - }
|
| -}
|
| -
|
| -// test item for a particular locale + calendar and date format
|
| -typedef struct {
|
| - int32_t era;
|
| - int32_t year;
|
| - int32_t month;
|
| - int32_t day;
|
| - int32_t hour;
|
| - int32_t minute;
|
| - UnicodeString formattedDate;
|
| -} CalAndFmtTestItem;
|
| -
|
| -// test item giving locale + calendar, date format, and CalAndFmtTestItems
|
| -typedef struct {
|
| - const char * locale; // with calendar
|
| - DateFormat::EStyle style;
|
| - UnicodeString pattern; // ignored unless style == DateFormat::kNone
|
| - const CalAndFmtTestItem *caftItems;
|
| -} TestNonGregoItem;
|
| -
|
| -void DateFormatTest::TestNonGregoFmtParse()
|
| -{
|
| - // test items for he@calendar=hebrew, long date format
|
| - const CalAndFmtTestItem cafti_he_hebrew_long[] = {
|
| - { 0, 4999, 12, 29, 12, 0, CharsToUnicodeString("\\u05DB\\u05F4\\u05D8 \\u05D1\\u05D0\\u05DC\\u05D5\\u05DC \\u05D3\\u05F3\\u05EA\\u05EA\\u05E7\\u05E6\\u05F4\\u05D8") },
|
| - { 0, 5100, 0, 1, 12, 0, CharsToUnicodeString("\\u05D0\\u05F3 \\u05D1\\u05EA\\u05E9\\u05E8\\u05D9 \\u05E7\\u05F3") },
|
| - { 0, 5774, 5, 1, 12, 0, CharsToUnicodeString("\\u05D0\\u05F3 \\u05D1\\u05D0\\u05D3\\u05E8 \\u05D0\\u05F3 \\u05EA\\u05E9\\u05E2\\u05F4\\u05D3") },
|
| - { 0, 5999, 12, 29, 12, 0, CharsToUnicodeString("\\u05DB\\u05F4\\u05D8 \\u05D1\\u05D0\\u05DC\\u05D5\\u05DC \\u05EA\\u05EA\\u05E7\\u05E6\\u05F4\\u05D8") },
|
| - { 0, 6100, 0, 1, 12, 0, CharsToUnicodeString("\\u05D0\\u05F3 \\u05D1\\u05EA\\u05E9\\u05E8\\u05D9 \\u05D5\\u05F3\\u05E7\\u05F3") },
|
| - { 0, 0, 0, 0, 0, 0, UnicodeString("") } // terminator
|
| - };
|
| - const CalAndFmtTestItem cafti_zh_chinese_custU[] = {
|
| - { 78, 31, 0, 1, 12, 0, CharsToUnicodeString("2014\\u7532\\u5348\\u5E74\\u6B63\\u67081") },
|
| - { 77, 31, 0, 1, 12, 0, CharsToUnicodeString("1954\\u7532\\u5348\\u5E74\\u6B63\\u67081") },
|
| - { 0, 0, 0, 0, 0, 0, UnicodeString("") } // terminator
|
| - };
|
| - const CalAndFmtTestItem cafti_zh_chinese_custNoU[] = {
|
| - { 78, 31, 0, 1, 12, 0, CharsToUnicodeString("2014\\u5E74\\u6B63\\u67081") },
|
| - { 77, 31, 0, 1, 12, 0, CharsToUnicodeString("1954\\u5E74\\u6B63\\u67081") },
|
| - { 0, 0, 0, 0, 0, 0, UnicodeString("") } // terminator
|
| - };
|
| - const CalAndFmtTestItem cafti_ja_japanese_custGy[] = {
|
| - {235, 26, 2, 5, 12, 0, CharsToUnicodeString("2014(\\u5E73\\u621026)\\u5E743\\u67085\\u65E5") },
|
| - {234, 60, 2, 5, 12, 0, CharsToUnicodeString("1985(\\u662D\\u548C60)\\u5E743\\u67085\\u65E5") },
|
| - { 0, 0, 0, 0, 0, 0, UnicodeString("") } // terminator
|
| - };
|
| - const CalAndFmtTestItem cafti_ja_japanese_custNoGy[] = {
|
| - {235, 26, 2, 5, 12, 0, CharsToUnicodeString("2014\\u5E743\\u67085\\u65E5") },
|
| - {234, 60, 2, 5, 12, 0, CharsToUnicodeString("1985\\u5E743\\u67085\\u65E5") },
|
| - { 0, 0, 0, 0, 0, 0, UnicodeString("") } // terminator
|
| - };
|
| - const CalAndFmtTestItem cafti_en_islamic_cust[] = {
|
| - { 0, 1384, 0, 1, 12, 0, UnicodeString("1 Muh. 1384 AH, 1964") },
|
| - { 0, 1436, 0, 1, 12, 0, UnicodeString("1 Muh. 1436 AH, 2014") },
|
| - { 0, 1487, 0, 1, 12, 0, UnicodeString("1 Muh. 1487 AH, 2064") },
|
| - { 0, 0, 0, 0, 0, 0, UnicodeString("") } // terminator
|
| - };
|
| - // overal test items
|
| - const TestNonGregoItem items[] = {
|
| - { "he@calendar=hebrew", DateFormat::kLong, UnicodeString(""), cafti_he_hebrew_long },
|
| - { "zh@calendar=chinese", DateFormat::kNone, CharsToUnicodeString("rU\\u5E74MMMd"), cafti_zh_chinese_custU },
|
| - { "zh@calendar=chinese", DateFormat::kNone, CharsToUnicodeString("r\\u5E74MMMd"), cafti_zh_chinese_custNoU },
|
| - { "ja@calendar=japanese", DateFormat::kNone, CharsToUnicodeString("r(Gy)\\u5E74M\\u6708d\\u65E5"), cafti_ja_japanese_custGy },
|
| - { "ja@calendar=japanese", DateFormat::kNone, CharsToUnicodeString("r\\u5E74M\\u6708d\\u65E5"), cafti_ja_japanese_custNoGy },
|
| - { "en@calendar=islamic", DateFormat::kNone, UnicodeString("d MMM y G, r"), cafti_en_islamic_cust },
|
| - { NULL, DateFormat::kNone, UnicodeString(""), NULL } // terminator
|
| - };
|
| - const TestNonGregoItem * itemPtr;
|
| - for (itemPtr = items; itemPtr->locale != NULL; itemPtr++) {
|
| - Locale locale = Locale::createFromName(itemPtr->locale);
|
| - DateFormat * dfmt = NULL;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - if (itemPtr->style != DateFormat::kNone) {
|
| - dfmt = DateFormat::createDateInstance(itemPtr->style, locale);
|
| - } else {
|
| - dfmt = new SimpleDateFormat(itemPtr->pattern, locale, status);
|
| - }
|
| - if (U_FAILURE(status)) {
|
| - dataerrln("new SimpleDateFormat fails for locale %s", itemPtr->locale);
|
| - } else if (dfmt == NULL) {
|
| - dataerrln("DateFormat::createDateInstance fails for locale %s", itemPtr->locale);
|
| - } else {
|
| - Calendar * cal = (dfmt->getCalendar())->clone();
|
| - if (cal == NULL) {
|
| - dataerrln("(DateFormat::getCalendar)->clone() fails for locale %s", itemPtr->locale);
|
| - } else {
|
| - const CalAndFmtTestItem * caftItemPtr;
|
| - for (caftItemPtr = itemPtr->caftItems; caftItemPtr->year != 0; caftItemPtr++) {
|
| - cal->clear();
|
| - cal->set(UCAL_ERA, caftItemPtr->era);
|
| - cal->set(UCAL_YEAR, caftItemPtr->year);
|
| - cal->set(UCAL_MONTH, caftItemPtr->month);
|
| - cal->set(UCAL_DATE, caftItemPtr->day);
|
| - cal->set(UCAL_HOUR_OF_DAY, caftItemPtr->hour);
|
| - cal->set(UCAL_MINUTE, caftItemPtr->minute);
|
| - UnicodeString result;
|
| - FieldPosition fpos(0);
|
| - dfmt->format(*cal, result, fpos);
|
| - if ( result.compare(caftItemPtr->formattedDate) != 0 ) {
|
| - errln( UnicodeString("FAIL: date format for locale ") + UnicodeString(itemPtr->locale) + ", style " + itemPtr->style +
|
| - ", expected \"" + caftItemPtr->formattedDate + "\", got \"" + result + "\"");
|
| - } else {
|
| - // formatted OK, try parse
|
| - ParsePosition ppos(0);
|
| - dfmt->parse(result, *cal, ppos);
|
| - status = U_ZERO_ERROR;
|
| - int32_t era = cal->get(UCAL_ERA, status);
|
| - int32_t year = cal->get(UCAL_YEAR, status);
|
| - int32_t month = cal->get(UCAL_MONTH, status);
|
| - int32_t day = cal->get(UCAL_DATE, status);
|
| - if ( U_FAILURE(status) || ppos.getIndex() < result.length() || era != caftItemPtr->era ||
|
| - year != caftItemPtr->year || month != caftItemPtr->month || day != caftItemPtr->day ) {
|
| - errln( UnicodeString("FAIL: date parse for locale ") + UnicodeString(itemPtr->locale) +
|
| - ", style " + itemPtr->style + ", string \"" + result + "\", expected " +
|
| - caftItemPtr->era +":"+caftItemPtr->year +"-"+caftItemPtr->month+"-"+caftItemPtr->day + ", got pos " +
|
| - ppos.getIndex() + " " + year +"-"+month+"-"+day + " status " + UnicodeString(u_errorName(status)) );
|
| - }
|
| - }
|
| - }
|
| - delete cal;
|
| - }
|
| - delete dfmt;
|
| - }
|
| - }
|
| -}
|
| -
|
| -static const UDate TEST_DATE = 1326585600000.; // 2012-jan-15
|
| -
|
| -void DateFormatTest::TestDotAndAtLeniency() {
|
| - // Test for date/time parsing regression with CLDR 22.1/ICU 50 pattern strings.
|
| - // For details see http://bugs.icu-project.org/trac/ticket/9789
|
| - static const char *locales[] = { "en", "fr" };
|
| - for (int32_t i = 0; i < UPRV_LENGTHOF(locales); ++i) {
|
| - Locale locale(locales[i]);
|
| -
|
| - for (DateFormat::EStyle dateStyle = DateFormat::FULL; dateStyle <= DateFormat::SHORT;
|
| - dateStyle = static_cast<DateFormat::EStyle>(dateStyle + 1)) {
|
| - LocalPointer<DateFormat> dateFormat(DateFormat::createDateInstance(dateStyle, locale));
|
| -
|
| - for (DateFormat::EStyle timeStyle = DateFormat::FULL; timeStyle <= DateFormat::SHORT;
|
| - timeStyle = static_cast<DateFormat::EStyle>(timeStyle + 1)) {
|
| - LocalPointer<DateFormat> format(DateFormat::createDateTimeInstance(dateStyle, timeStyle, locale));
|
| - LocalPointer<DateFormat> timeFormat(DateFormat::createTimeInstance(timeStyle, locale));
|
| - UnicodeString formattedString;
|
| - if (format.isNull()) {
|
| - dataerrln("Unable to create DateFormat");
|
| - continue;
|
| - }
|
| - format->format(TEST_DATE, formattedString);
|
| -
|
| - if (!showParse(*format, formattedString)) {
|
| - errln(UnicodeString(" with date-time: dateStyle=") + dateStyle + " timeStyle=" + timeStyle);
|
| - }
|
| -
|
| - UnicodeString ds, ts;
|
| - formattedString = dateFormat->format(TEST_DATE, ds) + " " + timeFormat->format(TEST_DATE, ts);
|
| - if (!showParse(*format, formattedString)) {
|
| - errln(UnicodeString(" with date sp sp time: dateStyle=") + dateStyle + " timeStyle=" + timeStyle);
|
| - }
|
| - if (formattedString.indexOf("n ") >= 0) { // will add "." after the end of text ending in 'n', like Jan.
|
| - UnicodeString plusDot(formattedString);
|
| - plusDot.findAndReplace("n ", "n. ").append(".");
|
| - if (!showParse(*format, plusDot)) {
|
| - errln(UnicodeString(" with date plus-dot time: dateStyle=") + dateStyle + " timeStyle=" + timeStyle);
|
| - }
|
| - }
|
| - if (formattedString.indexOf(". ") >= 0) { // will subtract "." at the end of strings.
|
| - UnicodeString minusDot(formattedString);
|
| - minusDot.findAndReplace(". ", " ");
|
| - if (!showParse(*format, minusDot)) {
|
| - errln(UnicodeString(" with date minus-dot time: dateStyle=") + dateStyle + " timeStyle=" + timeStyle);
|
| - }
|
| - }
|
| - }
|
| - }
|
| - }
|
| -}
|
| -
|
| -UBool DateFormatTest::showParse(DateFormat &format, const UnicodeString &formattedString) {
|
| - ParsePosition parsePosition;
|
| - UDate parsed = format.parse(formattedString, parsePosition);
|
| - UBool ok = TEST_DATE == parsed && parsePosition.getIndex() == formattedString.length();
|
| - UnicodeString pattern;
|
| - static_cast<SimpleDateFormat &>(format).toPattern(pattern);
|
| - if (ok) {
|
| - logln(pattern + " parsed: " + formattedString);
|
| - } else {
|
| - errln(pattern + " fails to parse: " + formattedString);
|
| - }
|
| - return ok;
|
| -}
|
| -
|
| -
|
| -typedef struct {
|
| - const char * locale;
|
| - UBool leniency;
|
| - UnicodeString parseString;
|
| - UnicodeString pattern;
|
| - UnicodeString expectedResult; // empty string indicates expected error
|
| -} TestDateFormatLeniencyItem;
|
| -
|
| -void DateFormatTest::TestDateFormatLeniency() {
|
| - // For details see http://bugs.icu-project.org/trac/ticket/10261
|
| -
|
| - const UDate july022008 = 1215000001979.0;
|
| - const TestDateFormatLeniencyItem items[] = {
|
| - //locale leniency parse String pattern expected result
|
| - { "en", true, UnicodeString("2008-07 02"), UnicodeString("yyyy-LLLL dd"), UnicodeString("2008-July 02") },
|
| - { "en", false, UnicodeString("2008-07 02"), UnicodeString("yyyy-LLLL dd"), UnicodeString("") },
|
| - { "en", true, UnicodeString("2008-Jan 02"), UnicodeString("yyyy-LLL. dd"), UnicodeString("2008-Jan. 02") },
|
| - { "en", false, UnicodeString("2008-Jan 02"), UnicodeString("yyyy-LLL. dd"), UnicodeString("") },
|
| - { "en", true, UnicodeString("2008-Jan--02"), UnicodeString("yyyy-MMM' -- 'dd"), UnicodeString("2008-Jan -- 02") },
|
| - { "en", false, UnicodeString("2008-Jan--02"), UnicodeString("yyyy-MMM' -- 'dd"), UnicodeString("") },
|
| - // terminator
|
| - { NULL, true, UnicodeString(""), UnicodeString(""), UnicodeString("") }
|
| - };
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - LocalPointer<Calendar> cal(Calendar::createInstance(status));
|
| - if (U_FAILURE(status)) {
|
| - dataerrln(UnicodeString("FAIL: Unable to create Calendar for default timezone and locale."));
|
| - return;
|
| - }
|
| - cal->setTime(july022008, status);
|
| - const TestDateFormatLeniencyItem * itemPtr;
|
| - LocalPointer<SimpleDateFormat> sdmft;
|
| - for (itemPtr = items; itemPtr->locale != NULL; itemPtr++ ) {
|
| -
|
| - Locale locale = Locale::createFromName(itemPtr->locale);
|
| - status = U_ZERO_ERROR;
|
| - ParsePosition pos(0);
|
| - sdmft.adoptInsteadAndCheckErrorCode(new SimpleDateFormat(itemPtr->pattern, locale, status), status);
|
| - if (U_FAILURE(status)) {
|
| - dataerrln("Unable to create SimpleDateFormat - %s", u_errorName(status));
|
| - continue;
|
| - }
|
| - sdmft->setBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, itemPtr->leniency, status).
|
| - setBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, itemPtr->leniency, status).
|
| - setBooleanAttribute(UDAT_PARSE_PARTIAL_LITERAL_MATCH, itemPtr->leniency, status);
|
| - UDate d = sdmft->parse(itemPtr->parseString, pos);
|
| -
|
| - if(itemPtr->expectedResult.length() == 0) {
|
| - if(pos.getErrorIndex() != -1) {
|
| - continue;
|
| - } else {
|
| - errln("error: unexpected parse success - " + itemPtr->parseString +
|
| - " - pattern " + itemPtr->pattern +
|
| - " - error index " + pos.getErrorIndex() +
|
| - " - leniency " + itemPtr->leniency);
|
| - continue;
|
| - }
|
| - }
|
| - if(pos.getErrorIndex() != -1) {
|
| - errln("error: parse error for string - " + itemPtr->parseString +
|
| - " - pattern " + itemPtr->pattern +
|
| - " - idx " + pos.getIndex() +
|
| - " - error index "+pos.getErrorIndex() +
|
| - " - leniency " + itemPtr->leniency);
|
| - continue;
|
| - }
|
| -
|
| - UnicodeString formatResult("");
|
| - sdmft->format(d, formatResult);
|
| - if(formatResult.compare(itemPtr->expectedResult) != 0) {
|
| - errln("error: unexpected format result. pattern["+itemPtr->pattern+"] expected[" + itemPtr->expectedResult + "] but result was[" + formatResult + "]");
|
| - continue;
|
| - } else {
|
| - logln("formatted results match! - " + formatResult);
|
| - }
|
| -
|
| - }
|
| -}
|
| -
|
| -
|
| -typedef struct {
|
| - UBool leniency;
|
| - UnicodeString parseString;
|
| - UnicodeString pattern;
|
| - UnicodeString expectedResult; // empty string indicates expected error
|
| -} TestMultiPatternMatchItem;
|
| -
|
| -void DateFormatTest::TestParseMultiPatternMatch() {
|
| - // For details see http://bugs.icu-project.org/trac/ticket/10336
|
| - const TestMultiPatternMatchItem items[] = {
|
| - // leniency parse String pattern expected result
|
| - {true, UnicodeString("2013-Sep 13"), UnicodeString("yyyy-MMM dd"), UnicodeString("2013-Sep 13")},
|
| - {true, UnicodeString("2013-September 14"), UnicodeString("yyyy-MMM dd"), UnicodeString("2013-Sep 14")},
|
| - {false, UnicodeString("2013-September 15"), UnicodeString("yyyy-MMM dd"), UnicodeString("")},
|
| - {false, UnicodeString("2013-September 16"), UnicodeString("yyyy-MMMM dd"), UnicodeString("2013-September 16")},
|
| - {true, UnicodeString("2013-Sep 17"), UnicodeString("yyyy-LLL dd"), UnicodeString("2013-Sep 17")},
|
| - {true, UnicodeString("2013-September 18"), UnicodeString("yyyy-LLL dd"), UnicodeString("2013-Sep 18")},
|
| - {false, UnicodeString("2013-September 19"), UnicodeString("yyyy-LLL dd"), UnicodeString("")},
|
| - {false, UnicodeString("2013-September 20"), UnicodeString("yyyy-LLLL dd"), UnicodeString("2013-September 20")},
|
| - {true, UnicodeString("2013 Sat Sep 21"), UnicodeString("yyyy EEE MMM dd"), UnicodeString("2013 Sat Sep 21")},
|
| - {true, UnicodeString("2013 Sunday Sep 22"), UnicodeString("yyyy EEE MMM dd"), UnicodeString("2013 Sun Sep 22")},
|
| - {false, UnicodeString("2013 Monday Sep 23"), UnicodeString("yyyy EEE MMM dd"), UnicodeString("")},
|
| - {false, UnicodeString("2013 Tuesday Sep 24"), UnicodeString("yyyy EEEE MMM dd"), UnicodeString("2013 Tuesday Sep 24")},
|
| - {true, UnicodeString("2013 Wed Sep 25"), UnicodeString("yyyy eee MMM dd"), UnicodeString("2013 Wed Sep 25")},
|
| - {true, UnicodeString("2013 Thu Sep 26"), UnicodeString("yyyy eee MMM dd"), UnicodeString("2013 Thu Sep 26")},
|
| - {false, UnicodeString("2013 Friday Sep 27"), UnicodeString("yyyy eee MMM dd"), UnicodeString("")},
|
| - {false, UnicodeString("2013 Saturday Sep 28"), UnicodeString("yyyy eeee MMM dd"), UnicodeString("2013 Saturday Sep 28")},
|
| - {true, UnicodeString("2013 Sun Sep 29"), UnicodeString("yyyy ccc MMM dd"), UnicodeString("2013 Sun Sep 29")},
|
| - {true, UnicodeString("2013 Monday Sep 30"), UnicodeString("yyyy ccc MMM dd"), UnicodeString("2013 Mon Sep 30")},
|
| - {false, UnicodeString("2013 Sunday Oct 13"), UnicodeString("yyyy ccc MMM dd"), UnicodeString("")},
|
| - {false, UnicodeString("2013 Monday Oct 14"), UnicodeString("yyyy cccc MMM dd"), UnicodeString("2013 Monday Oct 14")},
|
| - {true, UnicodeString("2013 Oct 15 Q4"), UnicodeString("yyyy MMM dd QQQ"), UnicodeString("2013 Oct 15 Q4")},
|
| - {true, UnicodeString("2013 Oct 16 4th quarter"), UnicodeString("yyyy MMM dd QQQ"), UnicodeString("2013 Oct 16 Q4")},
|
| - {false, UnicodeString("2013 Oct 17 4th quarter"), UnicodeString("yyyy MMM dd QQQ"), UnicodeString("")},
|
| - {false, UnicodeString("2013 Oct 18 Q4"), UnicodeString("yyyy MMM dd QQQ"), UnicodeString("2013 Oct 18 Q4")},
|
| - {true, UnicodeString("2013 Oct 19 Q4"), UnicodeString("yyyy MMM dd qqqq"), UnicodeString("2013 Oct 19 4th quarter")},
|
| - {true, UnicodeString("2013 Oct 20 4th quarter"), UnicodeString("yyyy MMM dd qqqq"), UnicodeString("2013 Oct 20 4th quarter")},
|
| - {false, UnicodeString("2013 Oct 21 Q4"), UnicodeString("yyyy MMM dd qqqq"), UnicodeString("")},
|
| - {false, UnicodeString("2013 Oct 22 4th quarter"), UnicodeString("yyyy MMM dd qqqq"), UnicodeString("2013 Oct 22 4th quarter")},
|
| - {false, UnicodeString("--end--"), UnicodeString(""), UnicodeString("")},
|
| - };
|
| -
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - LocalPointer<Calendar> cal(Calendar::createInstance(status));
|
| - if (U_FAILURE(status)) {
|
| - dataerrln(UnicodeString("FAIL: Unable to create Calendar for default timezone and locale."));
|
| - return;
|
| - }
|
| - const TestMultiPatternMatchItem * itemPtr;
|
| - DateFormat* sdmft = DateFormat::createDateInstance();
|
| - if (sdmft == NULL) {
|
| - dataerrln(UnicodeString("FAIL: Unable to create DateFormat"));
|
| - return;
|
| - }
|
| - for (itemPtr = items; itemPtr->parseString != "--end--"; itemPtr++ ) {
|
| - status = U_ZERO_ERROR;
|
| - ParsePosition pos(0);
|
| - ((SimpleDateFormat*) sdmft)->applyPattern(itemPtr->pattern);
|
| - if (U_FAILURE(status)) {
|
| - dataerrln("Unable to create SimpleDateFormat - %s", u_errorName(status));
|
| - continue;
|
| - }
|
| - sdmft->setBooleanAttribute(UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH, itemPtr->leniency, status);
|
| - UDate d = sdmft->parse(itemPtr->parseString, pos);
|
| -
|
| - if(itemPtr->expectedResult.length() == 0) {
|
| - if(pos.getErrorIndex() != -1) {
|
| - continue;
|
| - } else {
|
| - errln("error: unexpected parse success - " + itemPtr->parseString +
|
| - " - error index " + pos.getErrorIndex() +
|
| - " - leniency " + itemPtr->leniency);
|
| - continue;
|
| - }
|
| - }
|
| - if(pos.getErrorIndex() != -1) {
|
| - errln("error: parse error for string - " +itemPtr->parseString + " -- idx["+pos.getIndex()+"] errIdx["+pos.getErrorIndex()+"]");
|
| - continue;
|
| - }
|
| -
|
| - UnicodeString formatResult("");
|
| - sdmft->format(d, formatResult);
|
| - if(formatResult.compare(itemPtr->expectedResult) != 0) {
|
| - errln("error: unexpected format result. expected[" + itemPtr->expectedResult + "] but result was[" + formatResult + "]");
|
| - } else {
|
| - logln("formatted results match! - " + formatResult);
|
| - }
|
| - }
|
| - delete sdmft;
|
| -}
|
| -
|
| -void DateFormatTest::TestParseLeniencyAPIs() {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - LocalPointer<DateFormat> dateFormat(DateFormat::createDateInstance());
|
| - DateFormat *fmt = dateFormat.getAlias();
|
| - if (fmt == NULL) {
|
| - dataerrln("Failed calling dateFormat.getAlias()");
|
| - return;
|
| - }
|
| -
|
| - assertTrue("isLenient default", fmt->isLenient());
|
| - assertTrue("isCalendarLenient default", fmt->isCalendarLenient());
|
| - assertTrue("ALLOW_WHITESPACE default", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, status));
|
| - assertTrue("ALLOW_NUMERIC default", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, status));
|
| - assertTrue("PARTIAL_MATCH default", fmt->getBooleanAttribute(UDAT_PARSE_PARTIAL_LITERAL_MATCH, status));
|
| - assertTrue("MULTIPLE_PATTERNS default", fmt->getBooleanAttribute(UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH, status));
|
| -
|
| - // Set calendar to strict
|
| - fmt->setCalendarLenient(FALSE);
|
| -
|
| - assertFalse("isLeninent after setCalendarLenient(FALSE)", fmt->isLenient());
|
| - assertFalse("isCalendarLenient after setCalendarLenient(FALSE)", fmt->isCalendarLenient());
|
| - assertTrue("ALLOW_WHITESPACE after setCalendarLenient(FALSE)", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, status));
|
| - assertTrue("ALLOW_NUMERIC after setCalendarLenient(FALSE)", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, status));
|
| -
|
| - // Set to strict
|
| - fmt->setLenient(FALSE);
|
| -
|
| - assertFalse("isLeninent after setLenient(FALSE)", fmt->isLenient());
|
| - assertFalse("isCalendarLenient after setLenient(FALSE)", fmt->isCalendarLenient());
|
| - assertFalse("ALLOW_WHITESPACE after setLenient(FALSE)", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, status));
|
| - assertFalse("ALLOW_NUMERIC after setLenient(FALSE)", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, status));
|
| - // These two boolean attributes are NOT affected according to the API specification
|
| - assertTrue("PARTIAL_MATCH after setLenient(FALSE)", fmt->getBooleanAttribute(UDAT_PARSE_PARTIAL_LITERAL_MATCH, status));
|
| - assertTrue("MULTIPLE_PATTERNS after setLenient(FALSE)", fmt->getBooleanAttribute(UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH, status));
|
| -
|
| - // Allow white space leniency
|
| - fmt->setBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, TRUE, status);
|
| -
|
| - assertFalse("isLeninent after ALLOW_WHITESPACE/TRUE", fmt->isLenient());
|
| - assertFalse("isCalendarLenient after ALLOW_WHITESPACE/TRUE", fmt->isCalendarLenient());
|
| - assertTrue("ALLOW_WHITESPACE after ALLOW_WHITESPACE/TRUE", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, status));
|
| - assertFalse("ALLOW_NUMERIC after ALLOW_WHITESPACE/TRUE", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, status));
|
| -
|
| - // Set to lenient
|
| - fmt->setLenient(TRUE);
|
| -
|
| - assertTrue("isLenient after setLenient(TRUE)", fmt->isLenient());
|
| - assertTrue("isCalendarLenient after setLenient(TRUE)", fmt->isCalendarLenient());
|
| - assertTrue("ALLOW_WHITESPACE after setLenient(TRUE)", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, status));
|
| - assertTrue("ALLOW_NUMERIC after setLenient(TRUE)", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, status));
|
| -}
|
| -
|
| -void DateFormatTest::TestNumberFormatOverride() {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UnicodeString fields = (UnicodeString) "M";
|
| -
|
| - LocalPointer<SimpleDateFormat> fmt;
|
| - fmt.adoptInsteadAndCheckErrorCode(new SimpleDateFormat((UnicodeString)"MM d", status), status);
|
| - if (!assertSuccess("SimpleDateFormat with pattern MM d", status)) {
|
| - return;
|
| - }
|
| -
|
| -
|
| - for(int i=0; i<3; i++){
|
| - NumberFormat* check_nf = NumberFormat::createInstance(Locale("en_US"), status);
|
| - assertSuccess("NumberFormat en_US", status);
|
| - fmt->adoptNumberFormat(fields, check_nf, status);
|
| - assertSuccess("adoptNumberFormat check_nf", status);
|
| -
|
| - const NumberFormat* get_nf = fmt->getNumberFormatForField('M');
|
| - if (get_nf != check_nf) errln("FAIL: getter and setter do not work");
|
| - }
|
| - NumberFormat* check_nf = NumberFormat::createInstance(Locale("en_US"), status);
|
| - assertSuccess("NumberFormat en_US", status);
|
| - fmt->adoptNumberFormat(check_nf); // make sure using the same NF will not crash
|
| -
|
| - const char * DATA [][2] = {
|
| - { "", "\\u521D\\u516D \\u5341\\u4E94"},
|
| - { "M", "\\u521D\\u516D 15"},
|
| - { "Mo", "\\u521D\\u516D 15"},
|
| - { "Md", "\\u521D\\u516D \\u5341\\u4E94"},
|
| - { "MdMMd", "\\u521D\\u516D \\u5341\\u4E94"},
|
| - { "mixed", "\\u521D\\u516D \\u5341\\u4E94"}
|
| - };
|
| -
|
| - UDate test_date = date(97, 6 - 1, 15);
|
| -
|
| - for(int i=0; i < (int)(sizeof(DATA)/sizeof(DATA[0])); i++){
|
| - fields = DATA[i][0];
|
| -
|
| - LocalPointer<SimpleDateFormat> fmt;
|
| - fmt.adoptInsteadAndCheckErrorCode(new SimpleDateFormat((UnicodeString)"MM d", status), status);
|
| - assertSuccess("SimpleDateFormat with pattern MM d", status);
|
| - NumberFormat* overrideNF = NumberFormat::createInstance(Locale::createFromName("zh@numbers=hanidays"),status);
|
| - assertSuccess("NumberFormat zh@numbers=hanidays", status);
|
| -
|
| - if (fields == (UnicodeString) "") { // use the one w/o fields
|
| - fmt->adoptNumberFormat(overrideNF);
|
| - } else if (fields == (UnicodeString) "mixed") { // set 1 field at first but then full override, both(M & d) should be override
|
| - NumberFormat* singleOverrideNF = NumberFormat::createInstance(Locale::createFromName("en@numbers=hebr"),status);
|
| - assertSuccess("NumberFormat en@numbers=hebr", status);
|
| -
|
| - fields = (UnicodeString) "M";
|
| - fmt->adoptNumberFormat(fields, singleOverrideNF, status);
|
| - assertSuccess("adoptNumberFormat singleOverrideNF", status);
|
| -
|
| - fmt->adoptNumberFormat(overrideNF);
|
| - } else if (fields == (UnicodeString) "Mo"){ // o is invlid field
|
| - fmt->adoptNumberFormat(fields, overrideNF, status);
|
| - if(status == U_INVALID_FORMAT_ERROR) {
|
| - status = U_ZERO_ERROR;
|
| - continue;
|
| - }
|
| - } else {
|
| - fmt->adoptNumberFormat(fields, overrideNF, status);
|
| - assertSuccess("adoptNumberFormat overrideNF", status);
|
| - }
|
| -
|
| - UnicodeString result;
|
| - FieldPosition pos(0);
|
| - fmt->format(test_date,result, pos);
|
| -
|
| - UnicodeString expected = ((UnicodeString)DATA[i][1]).unescape();;
|
| -
|
| - if (result != expected)
|
| - errln("FAIL: Expected " + expected + " get: " + result);
|
| - }
|
| -}
|
| -
|
| -void DateFormatTest::TestCreateInstanceForSkeleton() {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - LocalPointer<DateFormat> fmt(DateFormat::createInstanceForSkeleton(
|
| - "yMMMMd", "en", status));
|
| - if (!assertSuccess("Create with pattern yMMMMd", status)) {
|
| - return;
|
| - }
|
| - UnicodeString result;
|
| - FieldPosition pos(0);
|
| - fmt->format(date(98, 5-1, 25), result, pos);
|
| - assertEquals("format yMMMMd", "May 25, 1998", result);
|
| - fmt.adoptInstead(DateFormat::createInstanceForSkeleton(
|
| - "yMd", "en", status));
|
| - if (!assertSuccess("Create with pattern yMd", status)) {
|
| - return;
|
| - }
|
| - result.remove();
|
| - fmt->format(date(98, 5-1, 25), result, pos);
|
| - assertEquals("format yMd", "5/25/1998", result);
|
| -}
|
| -
|
| -void DateFormatTest::TestCreateInstanceForSkeletonDefault() {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - Locale savedLocale;
|
| - Locale::setDefault(Locale::getUS(), status);
|
| - LocalPointer<DateFormat> fmt(DateFormat::createInstanceForSkeleton(
|
| - "yMMMd", status));
|
| - Locale::setDefault(savedLocale, status);
|
| - if (!assertSuccess("Create with pattern yMMMd", status)) {
|
| - return;
|
| - }
|
| - UnicodeString result;
|
| - FieldPosition pos(0);
|
| - fmt->format(date(98, 5-1, 25), result, pos);
|
| - assertEquals("format yMMMd", "May 25, 1998", result);
|
| -}
|
| -
|
| -void DateFormatTest::TestCreateInstanceForSkeletonWithCalendar() {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - LocalPointer<DateFormat> fmt(
|
| - DateFormat::createInstanceForSkeleton(
|
| - Calendar::createInstance(
|
| - TimeZone::createTimeZone("GMT-3:00"),
|
| - status),
|
| - "yMdHm", "en", status));
|
| - if (!assertSuccess("Create with pattern yMMMMd", status)) {
|
| - return;
|
| - }
|
| - UnicodeString result;
|
| - FieldPosition pos(0);
|
| -
|
| - LocalPointer<Calendar> cal(Calendar::createInstance(
|
| - TimeZone::createTimeZone("GMT-7:00"),
|
| - status));
|
| - if (!assertSuccess("Creating GMT-7 time zone failed", status)) {
|
| - return;
|
| - }
|
| - cal->clear();
|
| - cal->set(1998, 5-1, 25, 0, 0, 0);
|
| -
|
| - // date format time zone should be 4 hours ahead.
|
| - fmt->format(cal->getTime(status), result, pos);
|
| - assertEquals("format yMdHm", "5/25/1998, 04:00", result);
|
| - assertSuccess("", status);
|
| -}
|
| -
|
| -void DateFormatTest::TestDFSCreateForLocaleNonGregorianLocale() {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - Locale fa("fa");
|
| - LocalPointer<DateFormatSymbols> sym(
|
| - DateFormatSymbols::createForLocale(fa, status));
|
| - if (!assertSuccess("", status)) {
|
| - return;
|
| - }
|
| -
|
| - // Farsi should default to the persian calendar, not gregorian
|
| - int32_t count;
|
| - const UnicodeString *months = sym->getShortMonths(count);
|
| -
|
| - // First persian month.
|
| - UnicodeString expected("\\u0641\\u0631\\u0648\\u0631\\u062f\\u06cc\\u0646");
|
| - assertEquals("", expected.unescape(), months[0]);
|
| -}
|
| -
|
| -void DateFormatTest::TestDFSCreateForLocaleWithCalendarInLocale() {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - Locale en_heb("en@calendar=hebrew");
|
| - LocalPointer<DateFormatSymbols> sym(
|
| - DateFormatSymbols::createForLocale(en_heb, status));
|
| - if (!assertSuccess("", status)) {
|
| - return;
|
| - }
|
| -
|
| - // We should get the months of the hebrew calendar, not the gregorian
|
| - // calendar.
|
| - int32_t count;
|
| - const UnicodeString *months = sym->getShortMonths(count);
|
| -
|
| - // First hebrew month.
|
| - UnicodeString expected("Tishri");
|
| - assertEquals("", expected, months[0]);
|
| -}
|
| -
|
| -void DateFormatTest::TestChangeCalendar() {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - Locale en("en");
|
| - Locale en_heb("en@calendar=hebrew");
|
| - LocalPointer<DateFormat> fmt(
|
| - DateFormat::createInstanceForSkeleton("yMMMd", en, status));
|
| - if (!assertSuccess("", status)) {
|
| - return;
|
| - }
|
| - fmt->adoptCalendar(Calendar::createInstance(en_heb, status));
|
| - if (!assertSuccess("", status)) {
|
| - return;
|
| - }
|
| - UnicodeString result;
|
| - FieldPosition pos(0);
|
| - fmt->format(date(98, 5-1, 25), result, pos);
|
| - assertEquals("format yMMMd", "Iyar 29, 5758", result);
|
| -}
|
| -
|
| -
|
| -#endif /* #if !UCONFIG_NO_FORMATTING */
|
| -
|
| -//eof
|
|
|