dtfmttst.cpp revision b13da9df870a61b11249bf741347908dbea0edd8
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/********************************************************************
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT:
3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Copyright (c) 1997-2007, International Business Machines Corporation and
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved.
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h"
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "dtfmttst.h"
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/timezone.h"
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/gregocal.h"
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h"
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/datefmt.h"
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/simpletz.h"
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/strenum.h"
18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dtfmtsym.h"
19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h"
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h"
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "caltest.h"  // for fieldName
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdio.h> // for sprintf
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef U_WINDOWS
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "windttst.h"
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define ARRAY_SIZE(array) (sizeof array / sizeof array[0])
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define ASSERT_OK(status)  if(U_FAILURE(status)) {errln(#status " = %s @ %s:%d", u_errorName(status), __FILE__, __LINE__); return; }
31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------------------------------
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Time bomb - allows temporary behavior that expires at a given
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//             release
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------------------------------
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const UVersionInfo ICU_39 = {3,9,0,0};
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *****************************************************************************
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class DateFormatTest
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *****************************************************************************
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // if (exec) logln((UnicodeString)"TestSuite DateFormatTest");
45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    switch (index) {
46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(0,TestEquals);
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(1,TestTwoDigitYearDSTParse);
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(2,TestFieldPosition);
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(3,TestPartialParse994);
50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(4,TestRunTogetherPattern985);
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(5,TestRunTogetherPattern917);
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(6,TestCzechMonths459);
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(7,TestLetterDPattern212);
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(8,TestDayOfYearPattern195);
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(9,TestQuotePattern161);
56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(10,TestBadInput135);
57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(11,TestBadInput135a);
58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(12,TestTwoDigitYear);
59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(13,TestDateFormatZone061);
60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(14,TestDateFormatZone146);
61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(15,TestLocaleDateFormat);
62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(16,TestWallyWedel);
63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(17,TestDateFormatCalendar);
64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(18,TestSpaceParsing);
65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(19,TestExactCountFormat);
66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(20,TestWhiteSpaceParsing);
67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(21,TestInvalidPattern);
68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(22,TestGeneral);
69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(23,TestGreekMay);
70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(24,TestGenericTime);
71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(25,TestGenericTimeZoneOrder);
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(26,TestHost);
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(27,TestEras);
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(28,TestNarrowNames);
75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(29,TestStandAloneDays);
76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(30,TestStandAloneMonths);
77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(31,TestQuarters);
78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(32,TestZTimeZoneParsing);
79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(33,TestRelative);
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(34,TestRelativeClone);
81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(35,TestHostClone);
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(36,TestTimeZoneDisplayName);
83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(37,TestRelativeError);
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(38,TestRelativeOther);
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        */
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        default: name = ""; break;
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test written by Wally Wedel and emailed to me.
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestWallyWedel()
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Instantiate a TimeZone so we can get the ids.
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *tz = new SimpleTimeZone(7,"");
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Computational variables.
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t offset, hours, minutes, seconds;
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Instantiate a SimpleDateFormat set up to produce a full time
105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     zone name.
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *sdf = new SimpleDateFormat((UnicodeString)"zzzz", status);
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * A String array for the time zone ids.
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t ids_length;
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    StringEnumeration* ids = TimeZone::createEnumeration();
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ids_length = ids->count(status);
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * How many ids do we have?
116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Time Zone IDs size: %d", ids_length);
118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Column headings (sort of)
120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Ordinal ID offset(h:m) name");
122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Loop through the tzs.
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate today = Calendar::getNow();
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal = Calendar::createInstance(status);
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i = 0; i < ids_length; i++) {
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // logln(i + " " + ids[i]);
129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const UnicodeString* id = ids->snext(status);
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TimeZone *ttz = TimeZone::createTimeZone(*id);
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // offset = ttz.getRawOffset();
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->setTimeZone(*ttz);
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->setTime(today, status);
134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        offset = cal->get(UCAL_ZONE_OFFSET, status) + cal->get(UCAL_DST_OFFSET, status);
135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // logln(i + " " + ids[i] + " offset " + offset);
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* sign = "+";
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (offset < 0) {
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            sign = "-";
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            offset = -offset;
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        hours = offset/3600000;
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        minutes = (offset%3600000)/60000;
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        seconds = (offset%60000)/1000;
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString dstOffset = (UnicodeString)"" + sign + (hours < 10 ? "0" : "") +
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            (int32_t)hours + ":" + (minutes < 10 ? "0" : "") + (int32_t)minutes;
146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (seconds != 0) {
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            dstOffset = dstOffset + ":" + (seconds < 10 ? "0" : "") + seconds;
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Instantiate a date so we can display the time zone name.
151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         */
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf->setTimeZone(*ttz);
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Format the output.
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         */
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString fmtOffset;
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FieldPosition pos(0);
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf->format(today,fmtOffset, pos);
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // UnicodeString fmtOffset = tzS.toString();
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString *fmtDstOffset = 0;
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (fmtOffset.startsWith("GMT"))
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            //fmtDstOffset = fmtOffset->substring(3);
164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmtDstOffset = new UnicodeString();
165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmtOffset.extract(3, fmtOffset.length(), *fmtDstOffset);
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Show our result.
169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         */
170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UBool ok = fmtDstOffset == 0 || *fmtDstOffset == dstOffset;
171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (ok)
172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(UnicodeString() + i + " " + *id + " " + dstOffset +
174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " " + fmtOffset +
175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  (fmtDstOffset != 0 ? " ok" : " ?"));
176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else
178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString() + i + " " + *id + " " + dstOffset +
180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " " + fmtOffset + " *** FAIL ***");
181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete ttz;
183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmtDstOffset;
184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //  delete ids;   // TODO:  BAD API
187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete ids;
188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete sdf;
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete tz;
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test operator==
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestEquals()
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* fmtA = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL);
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* fmtB = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL);
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if ( fmtA == NULL || fmtB == NULL){
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateTimeInstance");
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmtA;
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmtB;
206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(*fmtA == *fmtB)) errln((UnicodeString)"FAIL");
210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmtA;
211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmtB;
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* test = TimeZone::createTimeZone("PDT");
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete test;
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the parsing of 2-digit years.
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestTwoDigitYearDSTParse(void)
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* fullFmt = new SimpleDateFormat((UnicodeString)"EEE MMM dd HH:mm:ss.SSS zzz yyyy G", status);
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *fmt = new SimpleDateFormat((UnicodeString)"dd-MMM-yy h:mm:ss 'o''clock' a z", Locale::getEnglish(), status);
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //DateFormat* fmt = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL, Locale::ENGLISH);
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString* s = new UnicodeString("03-Apr-04 2:20:47 o'clock AM PST", "");
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* defaultTZ = TimeZone::createDefault();
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* PST = TimeZone::createTimeZone("PST");
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t defaultOffset = defaultTZ->getRawOffset();
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t PSTOffset = PST->getRawOffset();
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t hour = 2 + (defaultOffset - PSTOffset) / (60*60*1000);
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // hour is the expected hour of day, in units of seconds
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    hour = ((hour < 0) ? hour + 24 : hour) * 60*60;
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Could not set up test. exitting");
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = fmt->parse(*s, status);
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(*s + " P> " + ((DateFormat*)fullFmt)->format(d, str));
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t y, m, day, hr, min, sec;
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateToFields(d, y, m, day, hr, min, sec);
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    hour += defaultTZ->inDaylightTime(d, status) ? 1 : 0;
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    hr = hr*60*60;
251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (hr != hour)
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Should parse to hour " + hour + " but got " + hr);
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: " + (int32_t)status);
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete s;
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullFmt;
260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete PST;
261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete defaultTZ;
262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUChar toHexString(int32_t i) { return (UChar)(i + (i < 10 ? 0x30 : (0x41 - 10))); }
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString&
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::escape(UnicodeString& s)
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString buf;
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i=0; i<s.length(); ++i)
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UChar c = s[(int32_t)i];
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (c <= (UChar)0x7F) buf += c;
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += (UChar)0x5c; buf += (UChar)0x55;
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0xF000) >> 12);
279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0x0F00) >> 8);
280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0x00F0) >> 4);
281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString(c & 0x000F);
282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return (s = buf);
285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This MUST be kept in sync with DateFormatSymbols.gPatternChars.
291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* PATTERN_CHARS = "GyMdkHmsSEDFwWahKzYeugAZvcLQqV";
293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A list of the names of all the fields in DateFormat.
296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This MUST be kept in sync with DateFormat.
297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* DATEFORMAT_FIELD_NAMES[] = {
299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "ERA_FIELD",
300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "YEAR_FIELD",
301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MONTH_FIELD",
302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DATE_FIELD",
303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR_OF_DAY1_FIELD",
304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR_OF_DAY0_FIELD",
305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MINUTE_FIELD",
306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "SECOND_FIELD",
307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MILLISECOND_FIELD",
308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DAY_OF_WEEK_FIELD",
309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DAY_OF_YEAR_FIELD",
310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DAY_OF_WEEK_IN_MONTH_FIELD",
311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "WEEK_OF_YEAR_FIELD",
312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "WEEK_OF_MONTH_FIELD",
313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "AM_PM_FIELD",
314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR1_FIELD",
315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR0_FIELD",
316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "TIMEZONE_FIELD",
317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "YEAR_WOY_FIELD",
318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DOW_LOCAL_FIELD",
319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "EXTENDED_YEAR_FIELD",
320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "JULIAN_DAY_FIELD",
321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MILLISECONDS_IN_DAY_FIELD",
322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "TIMEZONE_RFC_FIELD",
323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "GENERIC_TIMEZONE_FIELD",
324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "STAND_ALONE_DAY_FIELD",
325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "STAND_ALONE_MONTH_FIELD",
326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "QUARTER_FIELD",
327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "STAND_ALONE_QUARTER_FIELD",
328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "TIMEZONE_SPECIAL_FIELD"
329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const int32_t DATEFORMAT_FIELD_NAMES_LENGTH =
332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sizeof(DATEFORMAT_FIELD_NAMES) / sizeof(DATEFORMAT_FIELD_NAMES[0]);
333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that returned field position indices are correct.
336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestFieldPosition() {
338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i, j, exp;
340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString buf;
341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Verify data
343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormatSymbols rootSyms(Locale(""), ec);
344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertSuccess("DateFormatSymbols", ec);
345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // local pattern chars data is not longer loaded
347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // from icu locale bundle
348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("patternChars", PATTERN_CHARS, rootSyms.getLocalPatternChars(buf));
349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("patternChars", PATTERN_CHARS, DateFormatSymbols::getPatternUChars());
350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertTrue("DATEFORMAT_FIELD_NAMES", DATEFORMAT_FIELD_NAMES_LENGTH == UDAT_FIELD_COUNT);
351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertTrue("Data", UDAT_FIELD_COUNT == uprv_strlen(PATTERN_CHARS));
352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Create test formatters
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t COUNT = 4;
355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* dateFormats[COUNT];
356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[0] = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale::getUS());
357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[1] = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale::getFrance());
358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Make the pattern "G y M d..."
359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    buf.remove().append(PATTERN_CHARS);
360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (j=buf.length()-1; j>=0; --j) buf.insert(j, (UChar)32/*' '*/);
361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[2] = new SimpleDateFormat(buf, Locale::getUS(), ec);
362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Make the pattern "GGGG yyyy MMMM dddd..."
363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (j=buf.length()-1; j>=0; j-=2) {
364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i=0; i<3; ++i) {
365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf.insert(j, buf.charAt(j));
366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[3] = new SimpleDateFormat(buf, Locale::getUS(), ec);
369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(ec)){
370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("Could not create SimpleDateFormat object for locale en_US. Error: " )+ UnicodeString(u_errorName(ec)));
371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate aug13 = 871508052513.0;
374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Expected output field values for above DateFormats on aug13
376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Fields are given in order of DateFormat field number
377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* EXPECTED[] = {
378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "", "1997", "August", "13", "", "", "34", "12", "",
379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Wednesday", "", "", "", "", "PM", "2", "", "", "", "", "", "", "", "", "PT", "", "", "", "","",
380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "", "1997", "ao\\u00FBt", "13", "", "14", "34", "12", "",
382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "mercredi", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "\\u00C9tats-Unis (Los Angeles)",  "", "", "", "", "",
383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "AD", "1997", "8", "13", "14", "14", "34", "12", "5",
385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Wed", "225", "2", "33", "3", "PM", "2", "2", "PDT", "1997", "4", "1997", "2450674", "52452513", "-0700", "PT",  "4", "8", "3", "3","PDT",
386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Anno Domini", "1997", "August", "0013", "0014", "0014", "0034", "0012", "5130",
388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Wednesday", "0225", "0002", "0033", "0003", "PM", "0002", "0002", "Pacific Daylight Time", "1997", "0004", "1997", "2450674", "52452513", "GMT-07:00",
389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Pacific Time",  "Wednesday", "August", "3rd quarter", "3rd quarter", "United States (Los Angeles)"
390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t EXPECTED_LENGTH = sizeof(EXPECTED)/sizeof(EXPECTED[0]);
393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertTrue("data size", EXPECTED_LENGTH == COUNT * UDAT_FIELD_COUNT);
395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* PT = TimeZone::createTimeZone("America/Los_Angeles");
397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (j = 0, exp = 0; j < COUNT; ++j) {
398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //  String str;
399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat* df = dateFormats[j];
400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        df->setTimeZone(*PT);
401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (df->getDynamicClassID() == SimpleDateFormat::getStaticClassID()) {
402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(" Pattern = " + ((SimpleDateFormat*) df)->toPattern(buf.remove()));
403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(" Pattern = ? (not a SimpleDateFormat)");
405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"  Result = " + df->format(aug13, buf.remove()));
407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i = 0; i < UDAT_FIELD_COUNT; ++i, ++exp) {
409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            FieldPosition pos(i);
410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf.remove();
411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            df->format(aug13, buf, pos);
412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString field;
413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf.extractBetween(pos.getBeginIndex(), pos.getEndIndex(), field);
414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"field #" + i + " " + DATEFORMAT_FIELD_NAMES[i],
415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(EXPECTED[exp]), field);
416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (i=0; i<COUNT; ++i) {
420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete dateFormats[i];
421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete PT;
423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * General parse/format tests.  Add test cases as needed.
429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGeneral() {
431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss.SSS",
433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Milliseconds are left-justified, since they format as fractions of a second
435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm:ss.S", "fp", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.6", "2004 03 10 16:36:31.600",
436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm:ss.SS", "fp", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.57", "2004 03 10 16:36:31.570",
437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm:ss.SSS", "F", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.567",
438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm:ss.SSSS", "pf", "2004/3/10 16:36:31.5679", "2004 03 10 16:36:31.568", "2004/3/10 16:36:31.5680",
439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(DATA, ARRAY_SIZE(DATA), Locale("en", "", ""));
441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that strings which contain incomplete specifications are parsed
447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * correctly.  In some instances, this means not being parsed at all, and
448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * returning an appropriate error.
449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestPartialParse994()
452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* f = new SimpleDateFormat(status);
455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate null = 0;
457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10:11:42", date(97, 1 - 1, 17, 10, 11, 42));
458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10:", null);
459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10", null);
460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 ", null);
461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17", null);
462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete f;
464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::tryPat994(SimpleDateFormat* format, const char* pat, const char* str, UDate expected)
470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate null = 0;
473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("Pattern \"") + pat + "\"   String \"" + str + "\"");
474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        format->applyPattern(pat);
476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate date = format->parse(str, status);
477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status) || date == null)
478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"ParseException: " + (int32_t)status);
480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (expected != null) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else
483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString f;
485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            ((DateFormat*)format)->format(date, f);
486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(UnicodeString(" parse(") + str + ") -> " + dateToString(date));
487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)" format -> " + f);
488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (expected == null ||
489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                !(date == expected)) errln((UnicodeString)"FAIL: Expected null");//" + expected);
490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!(f == str)) errln(UnicodeString("FAIL: Expected ") + str);
491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    logln((UnicodeString)"ParseException: " + e.getMessage());
495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    if (expected != null) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Exception e) {
498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    errln((UnicodeString)"*** Exception:");
499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    e.printStackTrace();
500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the behavior of patterns in which digits for different fields run together
507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * without intervening separators.
508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestRunTogetherPattern985()
511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString format("yyyyMMddHHmmssSSS");
514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString now, then;
515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //UBool flag;
516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *formatter = new SimpleDateFormat(format, status);
517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date1 = Calendar::getNow();
519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((DateFormat*)formatter)->format(date1, now);
520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(now);
521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos(0);
522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date2 = formatter->parse(now, pos);
523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (date2 == 0) then = "Parse stopped at " + pos.getIndex();
524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else ((DateFormat*)formatter)->format(date2, then);
525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(then);
526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(date2 == date1)) errln((UnicodeString)"FAIL");
527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the behavior of patterns in which digits for different fields run together
535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * without intervening separators.
536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestRunTogetherPattern917()
539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* fmt;
542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString myDate;
543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt = new SimpleDateFormat((UnicodeString)"yyyy/MM/dd", status);
544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    myDate = "1997/02/03";
546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testIt917(fmt, myDate, date(97, 2 - 1, 3));
547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt = new SimpleDateFormat((UnicodeString)"yyyyMMdd", status);
549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    myDate = "19970304";
550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testIt917(fmt, myDate, date(97, 3 - 1, 4));
551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::testIt917(SimpleDateFormat* fmt, UnicodeString& str, UDate expected)
559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pattern;
562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"pattern=" + fmt->toPattern(pattern) + "   string=" + str);
563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable o;
564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ((Format*)fmt)->parseObject(str, o, status);
566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) return;
568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    e.printStackTrace();
570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    return;
571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Parsed object: " + dateToString(o.getDate()));
573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(o.getDate() == expected)) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString formatted; ((Format*)fmt)->format(o, formatted, status);
575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Formatted string: " + formatted);
576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(formatted == str)) errln((UnicodeString)"FAIL: Expected " + str);
577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the handling of Czech June and July, which have the unique attribute that
584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * one is a proper prefix substring of the other.
585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestCzechMonths459()
588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* fmt = DateFormat::createDateInstance(DateFormat::FULL, Locale("cs", "", ""));
591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (fmt == NULL){
592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateInstance()");
593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pattern;
597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Pattern " + ((SimpleDateFormat*) fmt)->toPattern(pattern));
598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate june = date(97, UCAL_JUNE, 15);
599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate july = date(97, UCAL_JULY, 15);
600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString juneStr; fmt->format(june, juneStr);
601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString julyStr; fmt->format(july, julyStr);
602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"format(June 15 1997) = " + juneStr);
604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d = fmt->parse(juneStr, status);
605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString s; fmt->format(d, s);
606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t month,yr,day,hr,min,sec; dateToFields(d,yr,month,day,hr,min,sec);
607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"  -> parse -> " + s + " (month = " + month + ")");
608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (month != UCAL_JUNE) errln((UnicodeString)"FAIL: Month should be June");
609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"format(July 15 1997) = " + julyStr);
610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        d = fmt->parse(julyStr, status);
611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt->format(d, s);
612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dateToFields(d,yr,month,day,hr,min,sec);
613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"  -> parse -> " + s + " (month = " + month + ")");
614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (month != UCAL_JULY) errln((UnicodeString)"FAIL: Month should be July");
615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"Exception: " + (int32_t)status);
619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of 'D' in patterns.
627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestLetterDPattern212()
630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString dateString("1995-040.05:01:29");
633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString bigD("yyyy-DDD.hh:mm:ss");
634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString littleD("yyyy-ddd.hh:mm:ss");
635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate expLittleD = date(95, 0, 1, 5, 1, 29);
636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate expBigD = expLittleD + 39 * 24 * 3600000.0;
637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expLittleD = expBigD; // Expect the same, with default lenient parsing
638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"dateString= " + dateString);
639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *formatter = new SimpleDateFormat(bigD, status);
640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos(0);
642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate myDate = formatter->parse(dateString, pos);
643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Using " + bigD + " -> " + myDate);
644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (myDate != expBigD) errln((UnicodeString)"FAIL: Expected " + dateToString(expBigD));
645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    formatter = new SimpleDateFormat(littleD, status);
647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pos = ParsePosition(0);
649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    myDate = formatter->parse(dateString, pos);
650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Using " + littleD + " -> " + dateToString(myDate));
651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (myDate != expLittleD) errln((UnicodeString)"FAIL: Expected " + dateToString(expLittleD));
652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the day of year pattern.
660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestDayOfYearPattern195()
663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate today = Calendar::getNow();
666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t year,month,day,hour,min,sec; dateToFields(today,year,month,day,hour,min,sec);
667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate expected = date(year, month, day);
668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Test Date: " + dateToString(today));
669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* sdf = (SimpleDateFormat*)DateFormat::createDateInstance();
670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (sdf == NULL){
671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateInstance()");
672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPattern(*sdf, today, 0, expected);
675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPattern(*sdf, today, "G yyyy DDD", expected);
676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete sdf;
677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::tryPattern(SimpleDateFormat& sdf, UDate d, const char* pattern, UDate expected)
684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pattern != 0) sdf.applyPattern(pattern);
687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString thePat;
688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"pattern: " + sdf.toPattern(thePat));
689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString formatResult; (*(DateFormat*)&sdf).format(d, formatResult);
690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" format -> " + formatResult);
691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // try {
692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d2 = sdf.parse(formatResult, status);
693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)" parse(" + formatResult + ") -> " + dateToString(d2));
694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (d2 != expected) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString format2; (*(DateFormat*)&sdf).format(d2, format2);
696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)" format -> " + format2);
697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!(formatResult == format2)) errln((UnicodeString)"FAIL: Round trip drift");
698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Exception e) {
700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"Error: " + (int32_t)status);
702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of single quotes in patterns.
709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestQuotePattern161()
712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* formatter = new SimpleDateFormat((UnicodeString)"MM/dd/yyyy 'at' hh:mm:ss a zzz", status);
715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate currentTime_1 = date(97, UCAL_AUGUST, 13, 10, 42, 28);
717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString dateString; ((DateFormat*)formatter)->format(currentTime_1, dateString);
718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString exp("08/13/1997 at 10:42:28 AM ");
719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"format(" + dateToString(currentTime_1) + ") = " + dateString);
720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (0 != dateString.compareBetween(0, exp.length(), exp, 0, exp.length())) errln((UnicodeString)"FAIL: Expected " + exp);
721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the correct behavior when handling invalid input strings.
729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestBadInput135()
732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat::EStyle looks[] = {
735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat::SHORT, DateFormat::MEDIUM, DateFormat::LONG, DateFormat::FULL
736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t looks_length = (int32_t)(sizeof(looks) / sizeof(looks[0]));
738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* strings[] = {
739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Mar 15", "Mar 15 1997", "asdf", "3/1/97 1:23:", "3/1/00 1:23:45 AM"
740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t strings_length = (int32_t)(sizeof(strings) / sizeof(strings[0]));
742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::LONG);
743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(full==NULL) {
744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      errln("could not create date time instance");
745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString expected("March 1, 2000 1:23:45 AM ");
748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i = 0; i < strings_length;++i) {
749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* text = strings[i];
750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (int32_t j = 0; j < looks_length;++j) {
751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            DateFormat::EStyle dateLook = looks[j];
752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            for (int32_t k = 0; k < looks_length;++k) {
753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                DateFormat::EStyle timeLook = looks[k];
754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                DateFormat *df = DateFormat::createDateTimeInstance(dateLook, timeLook);
755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (df == NULL){
756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    dataerrln("Error calling DateFormat::createDateTimeInstance()");
757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    continue;
758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString prefix = UnicodeString(text) + ", " + dateLook + "/" + timeLook + ": ";
760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //try {
761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    UDate when = df->parse(text, status);
762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (when == 0 && U_SUCCESS(status)) {
763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        errln(prefix + "SHOULD NOT HAPPEN: parse returned 0.");
764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        continue;
765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (U_SUCCESS(status))
767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    {
768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        UnicodeString format;
769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        full->format(when, format);
770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        logln(prefix + "OK: " + format);
771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        if (0!=format.compareBetween(0, expected.length(), expected, 0, expected.length()))
772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            errln((UnicodeString)"FAIL: Expected " + expected + " got " + format);
773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //}
775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //catch(ParseException e) {
776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    else
777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        status = U_ZERO_ERROR;
778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //}
779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //catch(StringIndexOutOfBoundsException e) {
780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //    errln(prefix + "SHOULD NOT HAPPEN: " + (int)status);
781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //}
782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                delete df;
783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* const parseFormats[] = {
792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MMMM d, yyyy",
793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MMMM d yyyy",
794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "M/d/yy",
795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "d MMMM, yyyy",
796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "d MMMM yyyy",
797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "d MMMM",
798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MMMM d",
799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "yyyy",
800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "h:mm a MMMM d, yyyy"
801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* const inputStrings[] = {
804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "bogus string", 0, 0, 0, 0, 0, 0, 0, 0, 0,
805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "April 1, 1997", "April 1, 1997", 0, 0, 0, 0, 0, "April 1", 0, 0,
806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "Jan 1, 1970", "January 1, 1970", 0, 0, 0, 0, 0, "January 1", 0, 0,
807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "Jan 1 2037", 0, "January 1 2037", 0, 0, 0, 0, "January 1", 0, 0,
808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "1/1/70", 0, 0, "1/1/70", 0, 0, 0, 0, "0001", 0,
809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "5 May 1997", 0, 0, 0, 0, "5 May 1997", "5 May", 0, "0005", 0,
810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "16 May", 0, 0, 0, 0, 0, "16 May", 0, "0016", 0,
811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "April 30", 0, 0, 0, 0, 0, 0, "April 30", 0, 0,
812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "1998", 0, 0, 0, 0, 0, 0, 0, "1998", 0,
813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "1", 0, 0, 0, 0, 0, 0, 0, "0001", 0,
814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "3:00 pm Jan 1, 1997", 0, 0, 0, 0, 0, 0, 0, "0003", "3:00 PM January 1, 1997",
815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the correct behavior when parsing an array of inputs against an
821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * array of patterns, with known results.  The results are encoded after
822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the input strings in each row.
823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestBadInput135a()
826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode status = U_ZERO_ERROR;
828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  SimpleDateFormat* dateParse = new SimpleDateFormat(status);
829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_FAILURE(status)) {
830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln("Failed creating SimpleDateFormat with %s. Quitting test", u_errorName(status));
831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete dateParse;
832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return;
833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char* s;
835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UDate date;
836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const uint32_t PF_LENGTH = (int32_t)(sizeof(parseFormats)/sizeof(parseFormats[0]));
837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const uint32_t INPUT_LENGTH = (int32_t)(sizeof(inputStrings)/sizeof(inputStrings[0]));
838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  dateParse->applyPattern("d MMMM, yyyy");
840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  dateParse->adoptTimeZone(TimeZone::createDefault());
841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  s = "not parseable";
842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString thePat;
843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  logln(UnicodeString("Trying to parse \"") + s + "\" with " + dateParse->toPattern(thePat));
844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //try {
845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  date = dateParse->parse(s, status);
846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if (U_SUCCESS(status))
847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln((UnicodeString)"FAIL: Expected exception during parse");
848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //}
849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //catch(Exception ex) {
850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  else
851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Exception during parse: " + (int32_t)status);
852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  status = U_ZERO_ERROR;
853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //}
854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  for (uint32_t i = 0; i < INPUT_LENGTH; i += (PF_LENGTH + 1)) {
855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition parsePosition(0);
856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s( inputStrings[i]);
857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (uint32_t index = 0; index < PF_LENGTH;++index) {
858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      const char* expected = inputStrings[i + 1 + index];
859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      dateParse->applyPattern(parseFormats[index]);
860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      dateParse->adoptTimeZone(TimeZone::createDefault());
861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //try {
862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      parsePosition.setIndex(0);
863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      date = dateParse->parse(s, parsePosition);
864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if (parsePosition.getIndex() != 0) {
865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString s1, s2;
866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s.extract(0, parsePosition.getIndex(), s1);
867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s.extract(parsePosition.getIndex(), s.length(), s2);
868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (date == 0) {
869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          errln((UnicodeString)"ERROR: null result fmt=\"" +
870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     parseFormats[index] +
871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     "\" pos=" + parsePosition.getIndex() + " " +
872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     s1 + "|" + s2);
873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          UnicodeString result;
876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          ((DateFormat*)dateParse)->format(date, result);
877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          logln((UnicodeString)"Parsed \"" + s + "\" using \"" + dateParse->toPattern(thePat) + "\" to: " + result);
878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          if (expected == 0)
879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: Expected parse failure");
880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          else if (!(result == expected))
881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("FAIL: Expected ") + expected);
882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      else if (expected != 0) {
885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("FAIL: Expected ") + expected + " from \"" +
886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     s + "\" with \"" + dateParse->toPattern(thePat) + "\"");
887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //}
889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //catch(Exception ex) {
890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if (U_FAILURE(status))
891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"An exception was thrown during parse: " + (int32_t)status);
892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //}
893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  delete dateParse;
896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if (U_FAILURE(status))
897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the parsing of two-digit years.
904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestTwoDigitYear()
907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("dd/MM/yy", Locale::getUK(), ec);
910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: SimpleDateFormat constructor");
912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    parse2DigitYear(fmt, "5/6/17", date(117, UCAL_JUNE, 5));
915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    parse2DigitYear(fmt, "4/6/34", date(34, UCAL_JUNE, 4));
916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::parse2DigitYear(DateFormat& fmt, const char* str, UDate expected)
922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d = fmt.parse(str, status);
926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString thePat;
927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Parsing \"") + str + "\" with " + ((SimpleDateFormat*)&fmt)->toPattern(thePat) +
928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "  => " + dateToString(d));
929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (d != expected) errln((UnicodeString)"FAIL: Expected " + expected);
930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status))
933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Got exception");
934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the formatting of time zones.
941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestDateFormatZone061()
944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date;
947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *formatter;
948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    date= 859248000000.0;
949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date 1997/3/25 00:00 GMT: " + date);
950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    formatter = new SimpleDateFormat((UnicodeString)"dd-MMM-yyyyy HH:mm", Locale::getUK(), status);
951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      errln("Failed creating SimpleDateFormat with %s. Quitting test", u_errorName(status));
953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      delete formatter;
954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    formatter->adoptTimeZone(TimeZone::createTimeZone("GMT"));
957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString temp; formatter->format(date, temp);
958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Formatted in GMT to: " + temp);
959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate tempDate = formatter->parse(temp, status);
961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"Parsed to: " + dateToString(tempDate));
962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (tempDate != date) errln((UnicodeString)"FAIL: Expected " + dateToString(date));
963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Throwable t) {
965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"Date Formatter throws: " + (int32_t)status);
967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the formatting of time zones.
975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestDateFormatZone146()
978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *saveDefault = TimeZone::createDefault();
980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //try {
982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *thedefault = TimeZone::createTimeZone("GMT");
983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone::setDefault(*thedefault);
984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // java.util.Locale.setDefault(new java.util.Locale("ar", "", ""));
985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // check to be sure... its GMT all right
987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TimeZone *testdefault = TimeZone::createDefault();
988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString testtimezone;
989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        testdefault->getID(testtimezone);
990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (testtimezone == "GMT")
991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln("Test timezone = " + testtimezone);
992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else
993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("Test timezone should be GMT, not " + testtimezone);
994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // now try to use the default GMT time zone
997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        GregorianCalendar *greenwichcalendar =
998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            new GregorianCalendar(1997, 3, 4, 23, 0, status);
999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        failure(status, "new GregorianCalendar");
1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //*****************************greenwichcalendar.setTimeZone(TimeZone.getDefault());
1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //greenwichcalendar.set(1997, 3, 4, 23, 0);
1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // try anything to set hour to 23:00 !!!
1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        greenwichcalendar->set(UCAL_HOUR_OF_DAY, 23);
1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // get time
1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate greenwichdate = greenwichcalendar->getTime(status);
1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // format every way
1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString DATA [] = {
1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString("simple format:  "), UnicodeString("04/04/97 23:00 GMT+00:00"),
1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString("MM/dd/yy HH:mm z"),
1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString("full format:    "), UnicodeString("Friday, April 4, 1997 11:00:00 o'clock PM GMT+00:00"),
1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString("EEEE, MMMM d, yyyy h:mm:ss 'o''clock' a z"),
1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString("long format:    "), UnicodeString("April 4, 1997 11:00:00 PM GMT+00:00"),
1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString("MMMM d, yyyy h:mm:ss a z"),
1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString("default format: "), UnicodeString("04-Apr-97 11:00:00 PM"),
1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString("dd-MMM-yy h:mm:ss a"),
1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString("short format:   "), UnicodeString("4/4/97 11:00 PM"),
1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString("M/d/yy h:mm a")
1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t DATA_length = (int32_t)(sizeof(DATA) / sizeof(DATA[0]));
1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (int32_t i=0; i<DATA_length; i+=3) {
1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            DateFormat *fmt = new SimpleDateFormat(DATA[i+2], Locale::getEnglish(), status);
1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(failure(status, "new SimpleDateFormat")) break;
1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt->setCalendar(*greenwichcalendar);
1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString result;
1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            result = fmt->format(greenwichdate, result);
1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(DATA[i] + result);
1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (result != DATA[i+1])
1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln("FAIL: Expected " + DATA[i+1] + ", got " + result);
1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            delete fmt;
1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //finally {
1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TimeZone::adoptDefault(saveDefault);
1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete testdefault;
1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete greenwichcalendar;
1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete thedefault;
1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the formatting of dates in different locales.
1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestLocaleDateFormat() // Bug 495
1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate testDate = date(97, UCAL_SEPTEMBER, 15);
1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *dfFrench = DateFormat::createDateTimeInstance(DateFormat::FULL,
1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat::FULL, Locale::getFrench());
1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *dfUS = DateFormat::createDateTimeInstance(DateFormat::FULL,
1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat::FULL, Locale::getUS());
1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString expectedFRENCH ( "lundi 15 septembre 1997 00:00:00 \\u00C9tats-Unis (Los Angeles)" );
1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectedFRENCH = expectedFRENCH.unescape();
1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //UnicodeString expectedUS ( "Monday, September 15, 1997 12:00:00 o'clock AM PDT" );
1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString expectedUS ( "Monday, September 15, 1997 12:00:00 AM PT" );
1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date set to : " + dateToString(testDate));
1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString out;
1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (dfUS == NULL || dfFrench == NULL){
1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateTimeInstance)");
1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete dfUS;
1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete dfFrench;
1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dfFrench->format(testDate, out);
1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date Formated with French Locale " + out);
1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(out == expectedFRENCH))
1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected " + expectedFRENCH);
1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    out.truncate(0);
1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dfUS->format(testDate, out);
1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date Formated with US Locale " + out);
1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(out == expectedUS))
1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected " + expectedUS);
1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete dfUS;
1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete dfFrench;
1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test DateFormat(Calendar) API
1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestDateFormatCalendar() {
1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *date=0, *time=0, *full=0;
1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal=0;
1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos;
1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate when;
1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a formatter for date fields. */
1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    date = DateFormat::createDateInstance(DateFormat::kShort, Locale::getUS());
1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (date == NULL) {
1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: createDateInstance failed");
1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a formatter for time fields. */
1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    time = DateFormat::createTimeInstance(DateFormat::kShort, Locale::getUS());
1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (time == NULL) {
1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: createTimeInstance failed");
1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a full format for output */
1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull,
1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                              Locale::getUS());
1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: createInstance failed");
1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a calendar */
1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal = Calendar::createInstance(Locale::getUS(), ec);
1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (cal == NULL || U_FAILURE(ec)) {
1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Calendar::createInstance failed with " +
1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              u_errorName(ec));
1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Parse the date */
1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->clear();
1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str = UnicodeString("4/5/2001", "");
1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pos.setIndex(0);
1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    date->parse(str, *cal, pos);
1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pos.getIndex() != str.length()) {
1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: DateFormat::parse(4/5/2001) failed at " +
1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              pos.getIndex());
1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Parse the time */
1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str = UnicodeString("5:45 PM", "");
1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pos.setIndex(0);
1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    time->parse(str, *cal, pos);
1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pos.getIndex() != str.length()) {
1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: DateFormat::parse(17:45) failed at " +
1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              pos.getIndex());
1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Check result */
1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    when = cal->getTime(ec);
1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: cal->getTime() failed with " + u_errorName(ec));
1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.truncate(0);
1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(when, str);
1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Thursday, April 5, 2001 5:45:00 PM PDT 986517900000
1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (when == 986517900000.0) {
1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("Ok: Parsed result: " + str);
1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Parsed result: " + str + ", exp 4/5/2001 5:45 PM");
1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FAIL:
1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete date;
1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete time;
1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test DateFormat's parsing of space characters.  See jitterbug 1916.
1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestSpaceParsing() {
1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // pattern, input, expected parse or NULL if expect parse failure
1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM d yy", " 04 05 06",  NULL, // MMMM wants Apr/April
1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,        "04 05 06",   NULL,
1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MM d yy",   " 04 05 06",  "2006 04 05 00:00:00",
1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,        "04 05 06",   "2006 04 05 00:00:00",
1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM d yy", " Apr 05 06", "2006 04 05 00:00:00",
1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,        "Apr 05 06",  "2006 04 05 00:00:00",
1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectParse(DATA, DATA_len, Locale("en"));
1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test handling of "HHmmss" pattern.
1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestExactCountFormat() {
1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // pattern, input, expected parse or NULL if expect parse failure
1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "HHmmss", "123456", "1970 01 01 12:34:56",
1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "12345",  "1970 01 01 01:23:45",
1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "1234",   NULL,
1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "00-05",  NULL,
1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "12-34",  NULL,
1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "00+05",  NULL,
1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ahhmm",  "PM730",  "1970 01 01 19:30:00",
1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectParse(DATA, DATA_len, Locale("en"));
1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test handling of white space.
1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestWhiteSpaceParsing() {
1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd",
1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // pattern, input, expected parse or null if expect parse failure
1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Pattern space run should parse input text space run
1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MM   d yy",   " 04 01 03",    "2003 04 01",
1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,          " 04  01   03 ", "2003 04 01",
1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectParse(DATA, DATA_len, Locale("en"));
1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestInvalidPattern() {
1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat f(UnicodeString("Yesterday"), ec);
1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(ec);
1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString out;
1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos;
1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    f.format((UDate)0, out, pos);
1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(out);
1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // The bug is that the call to format() will crash.  By not
1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // crashing, the test passes.
1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGreekMay() {
1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date = -9896080848000.0;
1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("EEEE, dd MMMM yyyy h:mm:ss a", Locale("el", "", ""), ec);
1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!assertSuccess("SimpleDateFormat::ct", ec)) return;
1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(date, str);
1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos(0);
1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d2 = fmt.parse(str, pos);
1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (date != d2) {
1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: unable to parse strings where case-folding changes length");
1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestStandAloneMonths()
1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy LLLL dd H:mm:ss", "F",  "2004 03 10 16:36:31", "2004 March 10 16:36:31",
1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 01 01 0:00:00", "January",   "1970 01 01 0:00:00",
1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 02 01 0:00:00", "February",  "1970 02 01 0:00:00",
1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 03 01 0:00:00", "March",     "1970 03 01 0:00:00",
1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 04 01 0:00:00", "April",     "1970 04 01 0:00:00",
1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 05 01 0:00:00", "May",       "1970 05 01 0:00:00",
1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 06 01 0:00:00", "June",      "1970 06 01 0:00:00",
1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 07 01 0:00:00", "July",      "1970 07 01 0:00:00",
1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 08 01 0:00:00", "August",    "1970 08 01 0:00:00",
1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 09 01 0:00:00", "September", "1970 09 01 0:00:00",
1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 10 01 0:00:00", "October",   "1970 10 01 0:00:00",
1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 11 01 0:00:00", "November",  "1970 11 01 0:00:00",
1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 12 01 0:00:00", "December",  "1970 12 01 0:00:00",
1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 01 01 0:00:00", "Jan", "1970 01 01 0:00:00",
1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 02 01 0:00:00", "Feb", "1970 02 01 0:00:00",
1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 03 01 0:00:00", "Mar", "1970 03 01 0:00:00",
1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 04 01 0:00:00", "Apr", "1970 04 01 0:00:00",
1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 05 01 0:00:00", "May", "1970 05 01 0:00:00",
1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 06 01 0:00:00", "Jun", "1970 06 01 0:00:00",
1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 07 01 0:00:00", "Jul", "1970 07 01 0:00:00",
1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 08 01 0:00:00", "Aug", "1970 08 01 0:00:00",
1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 09 01 0:00:00", "Sep", "1970 09 01 0:00:00",
1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 10 01 0:00:00", "Oct", "1970 10 01 0:00:00",
1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 11 01 0:00:00", "Nov", "1970 11 01 0:00:00",
1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 12 01 0:00:00", "Dec", "1970 12 01 0:00:00",
1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *CS_DATA[] = {
1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy LLL dd H:mm:ss",  "fp", "2004 04 10 16:36:31", "2004 4. 10 16:36:31",   "2004 04 10 16:36:31",
1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy LLLL dd H:mm:ss", "F",  "2004 04 10 16:36:31", "2004 duben 10 16:36:31",
1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MMMM dd H:mm:ss", "F",  "2004 04 10 16:36:31", "2004 dubna 10 16:36:31",
1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 01 01 0:00:00", "leden",               "1970 01 01 0:00:00",
1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 02 01 0:00:00", "\\u00FAnor",           "1970 02 01 0:00:00",
1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 03 01 0:00:00", "b\\u0159ezen",         "1970 03 01 0:00:00",
1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 04 01 0:00:00", "duben",               "1970 04 01 0:00:00",
1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 05 01 0:00:00", "kv\\u011Bten",         "1970 05 01 0:00:00",
1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 06 01 0:00:00", "\\u010Derven",         "1970 06 01 0:00:00",
1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 07 01 0:00:00", "\\u010Dervenec",       "1970 07 01 0:00:00",
1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 08 01 0:00:00", "srpen",               "1970 08 01 0:00:00",
1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 09 01 0:00:00", "z\\u00E1\\u0159\\u00ED", "1970 09 01 0:00:00",
1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 10 01 0:00:00", "\\u0159\\u00EDjen",     "1970 10 01 0:00:00",
1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 11 01 0:00:00", "listopad",            "1970 11 01 0:00:00",
1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 12 01 0:00:00", "prosinec",            "1970 12 01 0:00:00",
1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 01 01 0:00:00", "1.",  "1970 01 01 0:00:00",
1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 02 01 0:00:00", "2.",  "1970 02 01 0:00:00",
1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 03 01 0:00:00", "3.",  "1970 03 01 0:00:00",
1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 04 01 0:00:00", "4.",  "1970 04 01 0:00:00",
1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 05 01 0:00:00", "5.",  "1970 05 01 0:00:00",
1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 06 01 0:00:00", "6.",  "1970 06 01 0:00:00",
1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 07 01 0:00:00", "7.",  "1970 07 01 0:00:00",
1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 08 01 0:00:00", "8.",  "1970 08 01 0:00:00",
1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 09 01 0:00:00", "9.",  "1970 09 01 0:00:00",
1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 10 01 0:00:00", "10.", "1970 10 01 0:00:00",
1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 11 01 0:00:00", "11.", "1970 11 01 0:00:00",
1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 12 01 0:00:00", "12.", "1970 12 01 0:00:00",
1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestStandAloneDays()
1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 04 0:00:00", "Sunday",    "1970 01 04 0:00:00",
1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 05 0:00:00", "Monday",    "1970 01 05 0:00:00",
1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 06 0:00:00", "Tuesday",   "1970 01 06 0:00:00",
1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 07 0:00:00", "Wednesday", "1970 01 07 0:00:00",
1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 01 0:00:00", "Thursday",  "1970 01 01 0:00:00",
1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 02 0:00:00", "Friday",    "1970 01 02 0:00:00",
1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 03 0:00:00", "Saturday",  "1970 01 03 0:00:00",
1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 04 0:00:00", "Sun", "1970 01 04 0:00:00",
1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 05 0:00:00", "Mon", "1970 01 05 0:00:00",
1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 06 0:00:00", "Tue", "1970 01 06 0:00:00",
1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 07 0:00:00", "Wed", "1970 01 07 0:00:00",
1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 01 0:00:00", "Thu", "1970 01 01 0:00:00",
1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 02 0:00:00", "Fri", "1970 01 02 0:00:00",
1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 03 0:00:00", "Sat", "1970 01 03 0:00:00",
1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *CS_DATA[] = {
1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 04 0:00:00", "ned\\u011Ble",       "1970 01 04 0:00:00",
1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 05 0:00:00", "pond\\u011Bl\\u00ED", "1970 01 05 0:00:00",
1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 06 0:00:00", "\\u00FAter\\u00FD",   "1970 01 06 0:00:00",
1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 07 0:00:00", "st\\u0159eda",       "1970 01 07 0:00:00",
1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 01 0:00:00", "\\u010Dtvrtek",      "1970 01 01 0:00:00",
1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 02 0:00:00", "p\\u00E1tek",        "1970 01 02 0:00:00",
1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 03 0:00:00", "sobota",            "1970 01 03 0:00:00",
1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 04 0:00:00", "ne",      "1970 01 04 0:00:00",
1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 05 0:00:00", "po",      "1970 01 05 0:00:00",
1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 06 0:00:00", "\\u00FAt", "1970 01 06 0:00:00",
1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 07 0:00:00", "st",      "1970 01 07 0:00:00",
1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 01 0:00:00", "\\u010Dt", "1970 01 01 0:00:00",
1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 02 0:00:00", "p\\u00E1", "1970 01 02 0:00:00",
1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 03 0:00:00", "so",      "1970 01 03 0:00:00",
1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestNarrowNames()
1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MM dd HH:mm:ss",
1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MMMMM dd H:mm:ss", "2004 03 10 16:36:31", "2004 M 10 16:36:31",
1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy LLLLL dd H:mm:ss",  "2004 03 10 16:36:31", "2004 M 10 16:36:31",
1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 01 01 0:00:00", "J",
1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 02 01 0:00:00", "F",
1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 03 01 0:00:00", "M",
1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 04 01 0:00:00", "A",
1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 05 01 0:00:00", "M",
1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 06 01 0:00:00", "J",
1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 07 01 0:00:00", "J",
1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 08 01 0:00:00", "A",
1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 09 01 0:00:00", "S",
1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 10 01 0:00:00", "O",
1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 11 01 0:00:00", "N",
1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 12 01 0:00:00", "D",
1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 01 01 0:00:00", "J",
1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 02 01 0:00:00", "F",
1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 03 01 0:00:00", "M",
1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 04 01 0:00:00", "A",
1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 05 01 0:00:00", "M",
1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 06 01 0:00:00", "J",
1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 07 01 0:00:00", "J",
1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 08 01 0:00:00", "A",
1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 09 01 0:00:00", "S",
1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 10 01 0:00:00", "O",
1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 11 01 0:00:00", "N",
1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 12 01 0:00:00", "D",
1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 04 0:00:00", "S",
1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 05 0:00:00", "M",
1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 06 0:00:00", "T",
1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 07 0:00:00", "W",
1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 01 0:00:00", "T",
1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 02 0:00:00", "F",
1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 03 0:00:00", "S",
1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 04 0:00:00", "S",
1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 05 0:00:00", "M",
1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 06 0:00:00", "T",
1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 07 0:00:00", "W",
1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 01 0:00:00", "T",
1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 02 0:00:00", "F",
1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 03 0:00:00", "S",
1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char *CS_DATA[] = {
1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MM dd HH:mm:ss",
1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy LLLLL dd H:mm:ss", "2004 04 10 16:36:31", "2004 d 10 16:36:31",
1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MMMMM dd H:mm:ss", "2004 04 10 16:36:31", "2004 d 10 16:36:31",
1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 01 01 0:00:00", "l",
1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 02 01 0:00:00", "\\u00FA",
1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 03 01 0:00:00", "b",
1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 04 01 0:00:00", "d",
1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 05 01 0:00:00", "k",
1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 06 01 0:00:00", "\\u010D",
1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 07 01 0:00:00", "\\u010D",
1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 08 01 0:00:00", "s",
1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 09 01 0:00:00", "z",
1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 10 01 0:00:00", "\\u0159",
1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 11 01 0:00:00", "l",
1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 12 01 0:00:00", "p",
1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 01 01 0:00:00", "l",
1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 02 01 0:00:00", "\\u00FA",
1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 03 01 0:00:00", "b",
1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 04 01 0:00:00", "d",
1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 05 01 0:00:00", "k",
1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 06 01 0:00:00", "\\u010D",
1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 07 01 0:00:00", "\\u010D",
1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 08 01 0:00:00", "s",
1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 09 01 0:00:00", "z",
1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 10 01 0:00:00", "\\u0159",
1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 11 01 0:00:00", "l",
1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 12 01 0:00:00", "p",
1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 04 0:00:00", "N",
1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 05 0:00:00", "P",
1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 06 0:00:00", "\\u00DA",
1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 07 0:00:00", "S",
1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 01 0:00:00", "\\u010C",
1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 02 0:00:00", "P",
1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 03 0:00:00", "S",
1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 04 0:00:00", "N",
1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 05 0:00:00", "P",
1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 06 0:00:00", "\\u00DA",
1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 07 0:00:00", "S",
1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 01 0:00:00", "\\u010C",
1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 02 0:00:00", "P",
1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 03 0:00:00", "S",
1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      expectFormat(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      expectFormat(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestEras()
1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd",
1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy G",    "fp", "1951 07 17", "July 17 1951 AD",          "1951 07 17",
1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GG",   "fp", "1951 07 17", "July 17 1951 AD",          "1951 07 17",
1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGG",  "fp", "1951 07 17", "July 17 1951 AD",          "1951 07 17",
1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGGG", "fp", "1951 07 17", "July 17 1951 Anno Domini", "1951 07 17",
1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy G",    "fp", "-438 07 17", "July 17 0439 BC",            "-438 07 17",
1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GG",   "fp", "-438 07 17", "July 17 0439 BC",            "-438 07 17",
1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGG",  "fp", "-438 07 17", "July 17 0439 BC",            "-438 07 17",
1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGGG", "fp", "-438 07 17", "July 17 0439 Before Christ", "-438 07 17",
1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestQuarters()
1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd",
1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Q",    "fp", "1970 01 01", "1",           "1970 01 01",
1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "QQ",   "fp", "1970 04 01", "02",          "1970 04 01",
1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "QQQ",  "fp", "1970 07 01", "Q3",          "1970 07 01",
1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "QQQQ", "fp", "1970 10 01", "4th quarter", "1970 10 01",
1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "q",    "fp", "1970 01 01", "1",           "1970 01 01",
1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "qq",   "fp", "1970 04 01", "02",          "1970 04 01",
1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "qqq",  "fp", "1970 07 01", "Q3",          "1970 07 01",
1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "qqqq", "fp", "1970 10 01", "4th quarter", "1970 10 01",
1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test parsing.  Input is an array that starts with the following
1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * header:
1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [0]   = pattern string to parse [i+2] with
1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * followed by test cases, each of which is 3 array elements:
1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i]   = pattern, or NULL to reuse prior pattern
1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+1] = input string
1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+2] = expected parse result (parsed with pattern [0])
1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If expect parse failure, then [i+2] should be NULL.
1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::expectParse(const char** data, int32_t data_length,
1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 const Locale& loc) {
1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UDate FAIL = (UDate) -1;
1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UnicodeString FAIL_STR("parse failure");
1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = 0;
1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("", loc, ec);
1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat ref(data[i++], loc, ec);
1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat gotfmt("G yyyy MM dd HH:mm:ss z", loc, ec);
1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: SimpleDateFormat constructor");
1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* currentPat = NULL;
1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (i<data_length) {
1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pattern  = data[i++];
1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* input    = data[i++];
1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* expected = data[i++];
1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ec = U_ZERO_ERROR;
1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pattern != NULL) {
1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.applyPattern(pattern);
1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            currentPat = pattern;
1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate got = fmt.parse(input, ec);
1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString gotstr(FAIL_STR);
1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(ec)) {
1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            got = FAIL;
1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            gotstr.remove();
1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            gotfmt.format(got, gotstr);
1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode ec2 = U_ZERO_ERROR;
1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate exp = FAIL;
1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString expstr(FAIL_STR);
1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (expected != NULL) {
1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            expstr = expected;
1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            exp = ref.parse(expstr, ec2);
1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(ec2)) {
1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // This only happens if expected is in wrong format --
1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // should never happen once test is debugged.
1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln("FAIL: Internal test error");
1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                return;
1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (got == exp) {
1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"Ok: " + input + " x " +
1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  currentPat + " => " + gotstr);
1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: " + input + " x " +
1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  currentPat + " => " + gotstr + ", expected " +
1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  expstr);
1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test formatting and parsing.  Input is an array that starts
1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with the following header:
1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [0]   = pattern string to parse [i+2] with
1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * followed by test cases, each of which is 3 array elements:
1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i]   = pattern, or null to reuse prior pattern
1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+1] = control string, either "fp", "pf", or "F".
1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+2..] = data strings
1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The number of data strings depends on the control string.
1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Examples:
1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 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",
1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'f': Format date [i+2] (as parsed using pattern [0]) and expect string [i+3].
1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'p': Parse string [i+3] and expect date [i+4].
1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 2. "y/M/d H:mm:ss.SSS", "F", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.567"
1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'F': Format date [i+2] and expect string [i+3],
1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      then parse string [i+3] and expect date [i+2].
1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 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",
1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'p': Parse string [i+2] and expect date [i+3].
1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'f': Format date [i+3] and expect string [i+4].
1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::expect(const char** data, int32_t data_length,
1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            const Locale& loc) {
1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = 0;
1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str, str2;
1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("", loc, ec);
1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat ref(data[i++], loc, ec);
1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat univ("EE G yyyy MM dd HH:mm:ss.SSS z", loc, ec);
1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!assertSuccess("construct SimpleDateFormat", ec)) return;
1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString currentPat;
1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (i<data_length) {
1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pattern  = data[i++];
1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pattern != NULL) {
1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.applyPattern(pattern);
1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            currentPat = pattern;
1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* control = data[i++];
1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (uprv_strcmp(control, "fp") == 0) {
1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'f'
1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* datestr = data[i++];
1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* string = data[i++];
1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate date = ref.parse(ctou(datestr), ec);
1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(string),
1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         fmt.format(date, str.remove()));
1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'p'
1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            datestr = data[i++];
1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            date = ref.parse(ctou(datestr), ec);
1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate parsedate = fmt.parse(ctou(string), ec);
1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(date, str.remove()),
1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(parsedate, str2.remove()));
1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else if (uprv_strcmp(control, "pf") == 0) {
1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'p'
1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* string = data[i++];
1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* datestr = data[i++];
1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate date = ref.parse(ctou(datestr), ec);
1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate parsedate = fmt.parse(ctou(string), ec);
1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(date, str.remove()),
1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(parsedate, str2.remove()));
1671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'f'
1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            string = data[i++];
1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(string),
1676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         fmt.format(date, str.remove()));
1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else if (uprv_strcmp(control, "F") == 0) {
1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* datestr  = data[i++];
1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* string   = data[i++];
1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate date = ref.parse(ctou(datestr), ec);
1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(string),
1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         fmt.format(date, str.remove()));
1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate parsedate = fmt.parse(string, ec);
1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(date, str.remove()),
1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(parsedate, str2.remove()));
1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: Invalid control string " + control);
1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test formatting.  Input is an array that starts
1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with the following header:
1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [0]   = pattern string to parse [i+2] with
1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * followed by test cases, each of which is 3 array elements:
1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i]   = pattern, or null to reuse prior pattern
1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+1] = data string a
1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+2] = data string b
1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Examples:
1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Format date [i+1] and expect string [i+2].
1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "y/M/d H:mm:ss.SSSS", "2004/3/10 16:36:31.5679", "2004 03 10 16:36:31.567"
1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::expectFormat(const char** data, int32_t data_length,
1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            const Locale& loc) {
1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = 0;
1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str, str2;
1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("", loc, ec);
1726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat ref(data[i++], loc, ec);
1727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat univ("EE G yyyy MM dd HH:mm:ss.SSS z", loc, ec);
1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!assertSuccess("construct SimpleDateFormat", ec)) return;
1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString currentPat;
1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (i<data_length) {
1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pattern  = data[i++];
1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pattern != NULL) {
1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.applyPattern(pattern);
1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            currentPat = pattern;
1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* datestr = data[i++];
1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* string = data[i++];
1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate date = ref.parse(ctou(datestr), ec);
1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!assertSuccess("parse", ec)) return;
1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        ctou(string),
1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        fmt.format(date, str.remove()));
1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGenericTime() {
1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // any zone pattern should parse any zone
1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const Locale en("en");
1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char* ZDATA[] = {
1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm zzz",
1754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // round trip
1755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Standard Time",
1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
1757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm vvvv", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
1758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm v", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PT",
1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // non-generic timezone string influences dst offset even if wrong for date/time
1760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // generic timezone generates dst offset appropriate for local time
1765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // daylight savings time transition edge cases.
1770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // time to parse does not really exist, PT interpreted as earlier time
1771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm", "pf", "2005/4/3 2:30", "2005 04 03 03:30 PDT", "2005/4/3 3:30",
1778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // time to parse is ambiguous, PT interpreted as later time
1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm", "pf", "2005/10/30 1:30 PT", "2005 10 30 01:30 PST", "2005/10/30 1:30",
1782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "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",
1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm", "pf", "2004/10/31 1:30", "2004 10 31 01:30 PST", "2004/10/31 1:30",
1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
1791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const int32_t ZDATA_length = sizeof(ZDATA)/ sizeof(ZDATA[0]);
1792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  expect(ZDATA, ZDATA_length, en);
1793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode status = U_ZERO_ERROR;
1795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  logln("cross format/parse tests");
1797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString basepat("yy/MM/dd H:mm ");
1798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  SimpleDateFormat formats[] = {
1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "vvv", en, status),
1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "vvvv", en, status),
1801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "zzz", en, status),
1802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "zzzz", en, status)
1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ASSERT_OK(status);
1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const int32_t formats_length = sizeof(formats)/sizeof(formats[0]);
1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString test;
1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  SimpleDateFormat univ("yyyy MM dd HH:mm zzz", en, status);
1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ASSERT_OK(status);
1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const UnicodeString times[] = {
1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "2004 01 02 03:04 PST",
1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "2004 07 08 09:10 PDT"
1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  int32_t times_length = sizeof(times)/sizeof(times[0]);
1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  for (int i = 0; i < times_length; ++i) {
1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = univ.parse(times[i], status);
1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("\ntime: ") + d);
1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int j = 0; j < formats_length; ++j) {
1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      test.remove();
1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      formats[j].format(d, test);
1821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      logln("\ntest: '" + test + "'");
1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      for (int k = 0; k < formats_length; ++k) {
1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate t = formats[k].parse(test, status);
1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_SUCCESS(status)) {
1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          if (d != t) {
1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: format " + k +
1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " incorrectly parsed output of format " + j +
1828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " (" + test + "), returned " +
1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  dateToString(t) + " instead of " + dateToString(d));
1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          } else {
1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"OK: format " + k + " parsed ok");
1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          }
1833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (status == U_PARSE_ERROR) {
1834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          errln((UnicodeString)"FAIL: format " + k +
1835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                " could not parse output of format " + j +
1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                " (" + test + ")");
1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
1841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGenericTimeZoneOrder() {
1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // generic times should parse the same no matter what the placement of the time zone string
1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // should work for standard and daylight times
1846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char* XDATA[] = {
1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "yyyy MM dd HH:mm zzz",
1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // standard time, explicit daylight/standard
1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "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",
1851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "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",
1852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "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",
1853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // standard time, generic
1855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "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",
1856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "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",
1857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "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",
1858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // dahylight time, explicit daylight/standard
1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "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",
1861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "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",
1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "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",
1863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // daylight time, generic
1865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "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",
1866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "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",
1867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "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",
1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const int32_t XDATA_length = sizeof(XDATA)/sizeof(XDATA[0]);
1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  Locale en("en");
1871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  expect(XDATA, XDATA_length, en);
1872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestZTimeZoneParsing(void) {
1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const Locale en("en");
1877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString test;
1878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //SimpleDateFormat univ("yyyy-MM-dd'T'HH:mm Z", en, status);
1879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat univ("HH:mm Z", en, status);
1880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const TimeZone *t = TimeZone::getGMT();
1881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    univ.setTimeZone(*t);
1882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    univ.setLenient(false);
1884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pp(0);
1885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
1886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    struct {
1887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString input;
1888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString expected_result;
1889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } tests[] = {
1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 -0200", "13:00 +0000" },
1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 +0200", "09:00 +0000" },
1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 +0400", "07:00 +0000" },
1893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 +0530", "05:30 +0000" }
1894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result;
1897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t tests_length = sizeof(tests)/sizeof(tests[0]);
1898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int i = 0; i < tests_length; ++i) {
1899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        pp.setIndex(0);
1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d = univ.parse(tests[i].input, pp);
1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(pp.getIndex() != tests[i].input.length()){
1902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("setZoneString() did not succeed. Consumed: %i instead of %i",
1903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  pp.getIndex(), tests[i].input.length());
1904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        result.remove();
1907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        univ.format(d, result);
1908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(result != tests[i].expected_result) {
1909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("Expected " + tests[i].expected_result
1910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  + " got " + result);
1911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("SUCCESS: Parsed " + tests[i].input
1914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              + " got " + result
1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              + " expected " + tests[i].expected_result);
1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestHost(void)
1920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef U_WINDOWS
1922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Win32DateTimeTest::testLocales(this);
1923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
1924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Relative Date Tests
1927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelative(int daysdelta,
1929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  const Locale& loc,
1930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  const char *expectChars) {
1931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char banner[25];
1932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sprintf(banner, "%d", daysdelta);
1933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString bannerStr(banner, "");
1934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos(0);
1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString test;
1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale en("en");
1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *fullrelative = DateFormat::createDateInstance(DateFormat::kFullRelative, loc);
1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (fullrelative == NULL) {
1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("DateFormat::createDateInstance(DateFormat::kFullRelative, %s) returned NULL", loc.getName());
1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full         = DateFormat::createDateInstance(DateFormat::kFull        , loc);
1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("DateFormat::createDateInstance(DateFormat::kFull, %s) returned NULL", loc.getName());
1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *en_full =         DateFormat::createDateInstance(DateFormat::kFull,         en);
1955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (en_full == NULL) {
1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("DateFormat::createDateInstance(DateFormat::kFull, en) returned NULL");
1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *en_fulltime =         DateFormat::createDateTimeInstance(DateFormat::kFull,DateFormat::kFull,en);
1962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (en_fulltime == NULL) {
1964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, en) returned NULL");
1965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result;
1969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString normalResult;
1970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString expect;
1971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString parseResult;
1972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *c = Calendar::createInstance(status);
1974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Today = Today
1976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->setTime(Calendar::getNow(), status);
1977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(daysdelta != 0) {
1978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        c->add(Calendar::DATE,daysdelta,status);
1979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
1981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // calculate the expected string
1983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(expectChars != NULL) {
1984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect = expectChars;
1985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
1986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        full->format(*c, expect, pos); // expected = normal full
1987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullrelative   ->format(*c, result, pos);
1990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    en_full        ->format(*c, normalResult, pos);
1991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(result != expect) {
1993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Relative Format ["+bannerStr+"] of "+normalResult+" failed, expected "+expect+" but got " + result);
1994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
1995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("PASS: Relative Format ["+bannerStr+"] of "+normalResult+" got " + result);
1996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //verify
2000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = fullrelative->parse(result, status);
2001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
2002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString parseFormat; // parse rel->format full
2004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    en_full->format(d, parseFormat, status);
2005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString origFormat;
2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    en_full->format(*c, origFormat, pos);
2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(parseFormat!=origFormat) {
2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Relative Parse ["+bannerStr+"] of "+result+" failed, expected "+parseFormat+" but got "+origFormat);
2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("PASS: Relative Parse ["+bannerStr+"] of "+result+" passed, got "+parseFormat);
2013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullrelative;
2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete en_fulltime;
2018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete en_full;
2019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete c;
2020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelative(void)
2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale en("en");
2026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 0, en, "Today");
2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative(-1, en, "Yesterday");
2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 1, en, "Tomorrow");
2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 2, en, NULL);
2030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( -2, en, NULL);
2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 3, en, NULL);
2032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( -3, en, NULL);
2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 300, en, NULL);
2034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( -300, en, NULL);
2035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelativeClone(void)
2038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
2040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Verify that a cloned formatter gives the same results
2041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    and is useable after the original has been deleted.
2042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc("en");
2045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate now = Calendar::getNow();
2046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full = DateFormat::createDateInstance(DateFormat::kFullRelative, loc);
2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Can't create Relative date instance");
2049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result1;
2052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(now, result1, status);
2053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Format *fullClone = full->clone();
2054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = NULL;
2056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result2;
2058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullClone->format(now, result2, status);
2059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
2060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result1 != result2) {
2061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Clone returned different result from non-clone.");
2062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullClone;
2064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestHostClone(void)
2067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
2069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Verify that a cloned formatter gives the same results
2070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    and is useable after the original has been deleted.
2071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
2072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // This is mainly important on Windows.
2073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc("en_US@compat=host");
2075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate now = Calendar::getNow();
2076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full = DateFormat::createDateInstance(DateFormat::kFull, loc);
2077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
2078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Can't create Relative date instance");
2079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result1;
2082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(now, result1, status);
2083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Format *fullClone = full->clone();
2084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = NULL;
2086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result2;
2088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullClone->format(now, result2, status);
2089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
2090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result1 != result2) {
2091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Clone returned different result from non-clone.");
2092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullClone;
2094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestTimeZoneDisplayName()
2097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // This test data was ported from ICU4J.  Don't know why the 6th column in there because it's not being
2099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // used currently.
2100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *fallbackTests[][6]  = {
2101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
2103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "PST", "America/Los_Angeles" },
2104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "V", "PST", "America/Los_Angeles" },
2105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "Pacific Standard Time", "America/Los_Angeles" },
2106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "PDT", "America/Los_Angeles" },
2109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "V", "PDT", "America/Los_Angeles" },
2110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "Pacific Daylight Time", "America/Los_Angeles" },
2111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "PT", "America/Los_Angeles" },
2112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "Pacific Time", "America/Los_Angeles" },
2113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "VVVV", "United States (Los Angeles)", "America/Los_Angeles" },
2114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en_GB", "America/Los_Angeles", "2004-01-15T12:00:00Z", "z", "PST", "America/Los_Angeles" },
2115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "Z", "-0700", "-7:00" },
2116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "z", "MST", "America/Phoenix" },
2118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "V", "MST", "America/Phoenix" },
2119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "zzzz", "Mountain Standard Time", "America/Phoenix" },
2120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "z", "MST", "America/Phoenix" },
2123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "V", "MST", "America/Phoenix" },
2124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "zzzz", "Mountain Standard Time", "America/Phoenix" },
2125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "v", "MST", "America/Phoenix" },
2126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "vvvv", "Mountain Standard Time", "America/Phoenix" },
2127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "VVVV", "United States (Phoenix)", "America/Phoenix" },
2128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "V", "ART", "-3:00" },
2133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentina Time", "-3:00" },
2134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "V", "ART", "-3:00" },
2138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentina Time", "-3:00" },
2139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Argentina (Buenos Aires)", "America/Buenos_Aires" },
2140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentina Time", "America/Buenos_Aires" },
2141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "VVVV", "Argentina (Buenos Aires)", "America/Buenos_Aires" },
2142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "V", "ART", "-3:00" },
2147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentina Time", "-3:00" },
2148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "V", "ART", "-3:00" },
2152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentina Time", "-3:00" },
2153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Argentina (Buenos Aires)", "America/Buenos_Aires" },
2154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentina Time", "America/Buenos_Aires" },
2155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "VVVV", "Argentina (Buenos Aires)", "America/Buenos_Aires" },
2156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
2159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-05:00", "-5:00" },
2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "V", "CST (Cuba)", "-5:00" },
2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "Cuba Standard Time", "-5:00" },
2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
2164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-04:00", "-4:00" },
2165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "V", "CDT (Cuba)", "-4:00" },
2166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "Cuba Daylight Time", "-4:00" },
2167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "v", "Cuba Time", "America/Havana" },
2168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "Cuba Time", "America/Havana" },
2169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "VVVV", "Cuba Time", "America/Havana" },
2170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "V", "AEDT", "+11:00" },
2175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "Australian Eastern Daylight Time", "+11:00" },
2176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "V", "AEST", "+10:00" },
2180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "Australian Eastern Standard Time", "+10:00" },
2181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "Australia (Sydney)", "Australia/Sydney" },
2182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "Eastern Australia Time", "Australia/Sydney" },
2183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "VVVV", "Australia (Sydney)", "Australia/Sydney" },
2184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "V", "AEDT", "+11:00" },
2189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "Australian Eastern Daylight Time", "+11:00" },
2190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "V", "AEST", "+10:00" },
2194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "Australian Eastern Standard Time", "+10:00" },
2195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "Australia (Sydney)", "Australia/Sydney" },
2196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "Eastern Australia Time", "Australia/Sydney" },
2197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "VVVV", "Australia (Sydney)", "Australia/Sydney" },
2198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+00:00", "+0:00" },
2201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
2202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "V", "GMT", "+0:00" },
2203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "Greenwich Mean Time", "+0:00" },
2204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
2206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+01:00", "Europe/London" },
2207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "V", "BST", "Europe/London" },
2208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "British Summer Time", "Europe/London" },
2209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu en.txt has exemplar city for this time zone
2210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "v", "United Kingdom Time", "Europe/London" },
2211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "United Kingdom Time", "Europe/London" },
2212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "United Kingdom Time", "Europe/London" },
2213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-03:00", "-3:00" },
2223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+05:30", "+5:30" },
2229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "V", "IST", "+5:30" },
2230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "India Standard Time", "+5:30" },
2231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+05:30", "+05:30" },
2234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "V", "IST", "+05:30" },
2235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "India Standard Time", "+5:30" },
2236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "India Time", "Asia/Calcutta" },
2237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "India Standard Time", "Asia/Calcutta" },
2238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
2243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-08:00", "-8:00" },
2244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "GMT-08:00", "-8:00" },
2245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-07:00", "-7:00" },
2248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "GMT-07:00", "-7:00" },
2249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "Vereinigte Staaten (Los Angeles)", "America/Los_Angeles" },
2250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "Vereinigte Staaten (Los Angeles)", "America/Los_Angeles" },
2251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Argentinien (Buenos Aires)", "America/Buenos_Aires" },
2261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentinien (Buenos Aires)", "America/Buenos_Aires" },
2262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Argentinien (Buenos Aires)", "America/Buenos_Aires" },
2272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentinien (Buenos Aires)", "America/Buenos_Aires" },
2273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
2276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-05:00", "-5:00" },
2277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-05:00", "-5:00" },
2278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
2280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-04:00", "-4:00" },
2281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-04:00", "-4:00" },
2282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "v", "Kuba", "America/Havana" },
2283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "Kuba", "America/Havana" },
2284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // added to test proper fallback of country name
2285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de_CH", "America/Havana", "2004-07-15T00:00:00Z", "v", "Kuba", "America/Havana" },
2286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de_CH", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "Kuba", "America/Havana" },
2287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
2292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
2296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "Australien (Sydney)", "Australia/Sydney" },
2297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "Australien (Sydney)", "Australia/Sydney" },
2298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
2303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
2307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "Australien (Sydney)", "Australia/Sydney" },
2308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "Australien (Sydney)", "Australia/Sydney" },
2309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+00:00", "+0:00" },
2312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT+00:00", "+0:00" },
2313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "GMT+00:00", "+0:00" },
2314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
2316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+01:00", "+1:00" },
2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+01:00", "+1:00" },
2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "v", "Vereinigtes K\\u00f6nigreich", "Europe/London" },
2319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "Vereinigtes K\\u00f6nigreich", "Europe/London" },
2320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-03:00", "-3:00" },
2330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+05:30", "+5:30" },
2336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
2337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+05:30", "+05:30" },
2340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "Indien", "Asia/Calcutta" },
2342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "Indien", "Asia/Calcutta" },
2343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0800", "-8:00" },
2348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-0800", "America/Los_Angeles" },
2349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u592a\\u5e73\\u6d0b\\u6807\\u51c6\\u65f6\\u95f4", "America/Los_Angeles" },
2350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0700", "-7:00" },
2352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-0700", "America/Los_Angeles" },
2353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u592a\\u5e73\\u6d0b\\u590f\\u4ee4\\u65f6\\u95f4", "America/Los_Angeles" },
2354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu zh.txt has exemplar city for this time zone
2355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u7f8e\\u56fd (\\u6d1b\\u6749\\u77f6)", "America/Los_Angeles" },
2356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u7f8e\\u56fd (\\u6d1b\\u6749\\u77f6)", "America/Los_Angeles" },
2357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu zh.txt does not have info for this time zone
2367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u963f\\u6839\\u5ef7 (\\u5e03\\u5b9c\\u8bfa\\u65af\\u827e\\u5229\\u65af)", "America/Buenos_Aires" },
2368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u963f\\u6839\\u5ef7 (\\u5e03\\u5b9c\\u8bfa\\u65af\\u827e\\u5229\\u65af)", "America/Buenos_Aires" },
2369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u963f\\u6839\\u5ef7 (\\u5e03\\u5b9c\\u8bfa\\u65af\\u827e\\u5229\\u65af)", "America/Buenos_Aires" },
2379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u963f\\u6839\\u5ef7 (\\u5e03\\u5b9c\\u8bfa\\u65af\\u827e\\u5229\\u65af)", "America/Buenos_Aires" },
2380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0500", "-5:00" },
2383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-0500", "-5:00" },
2384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-0500", "-5:00" },
2385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0400", "-4:00" },
2387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-0400", "-4:00" },
2388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-0400", "-4:00" },
2389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u53e4\\u5df4", "America/Havana" },
2390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u53e4\\u5df4", "America/Havana" },
2391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+1100", "+11:00" },
2394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+1100", "+11:00" },
2395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u590f\\u4ee4\\u65f6\\u95f4", "+11:00" },
2396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+1000", "+10:00" },
2398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+1000", "+10:00" },
2399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+1000", "+10:00" },
2400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu zh.txt does not have info for this time zone
2401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u6fb3\\u5927\\u5229\\u4e9a (\\u6089\\u5c3c)", "Australia/Sydney" },
2402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u6fb3\\u5927\\u5229\\u4e9a (\\u6089\\u5c3c)", "Australia/Sydney" },
2403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+1100", "+11:00" },
2406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+1100", "+11:00" },
2407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u590f\\u4ee4\\u65f6\\u95f4", "+11:00" },
2408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+1000", "+10:00" },
2410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+1000", "+10:00" },
2411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+1000", "+10:00" },
2412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u6fb3\\u5927\\u5229\\u4e9a (\\u6089\\u5c3c)", "Australia/Sydney" },
2413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u6fb3\\u5927\\u5229\\u4e9a (\\u6089\\u5c3c)", "Australia/Sydney" },
2414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+0000", "+0:00" },
2417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT+0000", "+0:00" },
2418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "V", "GMT", "+0:00" },
2419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u683C\\u6797\\u5C3C\\u6CBB\\u6807\\u51C6\\u65F6\\u95F4", "+0:00" },
2420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+0100", "+1:00" },
2422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+0100", "+1:00" },
2423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "V", "BST", "+1:00" },
2424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+0100", "+1:00" },
2425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u82f1\\u56fd", "Europe/London" },
2426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u82f1\\u56fd", "Europe/London" },
2427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "\\u82f1\\u56fd", "Europe/London" },
2428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-0300", "-3:00" },
2438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-0300", "-3:00" },
2439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+0530", "+5:30" },
2443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+0530", "+5:30" },
2444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "GMT+0530", "+5:30" },
2445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+0530", "+5:30" },
2447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+0530", "+05:30" },
2448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "GMT+0530", "+5:30" },
2449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u5370\\u5ea6", "Asia/Calcutta" },
2450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u5370\\u5EA6", "Asia/Calcutta" },
2451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u096e:\\u0966\\u0966", "-8:00" },
2456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u096e:\\u0966\\u0966", "-8:00" },
2457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u096e:\\u0966\\u0966", "-8:00" },
2458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u096d:\\u0966\\u0966", "-7:00" },
2460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u096d:\\u0966\\u0966", "-7:00" },
2461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u096d:\\u0966\\u0966", "-7:00" },
2462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u0938\\u0902\\u092f\\u0941\\u0915\\u094d\\u0924 \\u0930\\u093e\\u091c\\u094d\\u092f \\u0905\\u092e\\u0930\\u093f\\u0915\\u093e (Los Angeles)", "America/Los_Angeles" },
2463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u0938\\u0902\\u092f\\u0941\\u0915\\u094d\\u0924 \\u0930\\u093e\\u091c\\u094d\\u092f \\u0905\\u092e\\u0930\\u093f\\u0915\\u093e (Los Angeles)", "America/Los_Angeles" },
2464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0905\\u0930\\u094d\\u091c\\u0947\\u0928\\u094d\\u091f\\u0940\\u0928\\u093e (Buenos Aires)", "America/Buenos_Aires" },
2474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0905\\u0930\\u094d\\u091c\\u0947\\u0928\\u094d\\u091f\\u0940\\u0928\\u093e (Buenos Aires)", "America/Buenos_Aires" },
2475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0905\\u0930\\u094d\\u091c\\u0947\\u0928\\u094d\\u091f\\u0940\\u0928\\u093e (Buenos Aires)", "America/Buenos_Aires" },
2485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0905\\u0930\\u094d\\u091c\\u0947\\u0928\\u094d\\u091f\\u0940\\u0928\\u093e (Buenos Aires)", "America/Buenos_Aires" },
2486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u096b:\\u0966\\u0966", "-5:00" },
2489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u096b:\\u0966\\u0966", "-5:00" },
2490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u096b:\\u0966\\u0966", "-5:00" },
2491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u096a:\\u0966\\u0966", "-4:00" },
2493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u096a:\\u0966\\u0966", "-4:00" },
2494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u096a:\\u0966\\u0966", "-4:00" },
2495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u0915\\u094d\\u092f\\u0942\\u092c\\u093e", "America/Havana" },
2496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u0915\\u094d\\u092f\\u0942\\u092c\\u093e", "America/Havana" },
2497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u0911\\u0938\\u094d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e (Sydney)", "Australia/Sydney" },
2507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u0911\\u0938\\u094d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e (Sydney)", "Australia/Sydney" },
2508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u0911\\u0938\\u094d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e (Sydney)", "Australia/Sydney" },
2518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u0911\\u0938\\u094d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e (Sydney)", "Australia/Sydney" },
2519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+\\u0966\\u0966:\\u0966\\u0966", "+0:00" },
2522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT+\\u0966\\u0966:\\u0966\\u0966", "+0:00" },
2523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "GMT+\\u0966\\u0966:\\u0966\\u0966", "+0:00" },
2524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+\\u0966\\u0967:\\u0966\\u0966", "+1:00" },
2526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+\\u0966\\u0967:\\u0966\\u0966", "+1:00" },
2527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+\\u0966\\u0967:\\u0966\\u0966", "+1:00" },
2528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u092C\\u094D\\u0930\\u093F\\u0924\\u0928", "Europe/London" },
2529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u092C\\u094D\\u0930\\u093F\\u0924\\u0928", "Europe/London" },
2530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+\\u0966\\u096B:\\u0969\\u0966", "+5:30" },
2544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "IST", "+5:30" },
2545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u0938\\u092E\\u092F", "+5:30" },
2546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+\\u0966\\u096B:\\u0969\\u0966", "+5:30" },
2548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "IST", "+05:30" },
2549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u0938\\u092E\\u092F", "+5:30" },
2550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "IST", "Asia/Calcutta" },
2551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u0938\\u092E\\u092F", "Asia/Calcutta" },
2552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0800", "-8:00" },
2557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-0800", "America/Los_Angeles" },
2558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "V", "PST", "America/Los_Angeles" },
2559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u0422\\u0438\\u0445\\u043E\\u043E\\u043A\\u0435\\u0430\\u043D\\u0441\\u043A\\u0430 \\u0447\\u0430\\u0441\\u043E\\u0432\\u0430 \\u0437\\u043E\\u043D\\u0430", "America/Los_Angeles" },
2560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0700", "-7:00" },
2562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-0700", "America/Los_Angeles" },
2563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "V", "PDT", "America/Los_Angeles" },
2564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u0422\\u0438\\u0445\\u043E\\u043E\\u043A\\u0435\\u0430\\u043D\\u0441\\u043A\\u0430 \\u043B\\u044F\\u0442\\u043D\\u0430 \\u0447\\u0430\\u0441\\u043E\\u0432\\u0430 \\u0437\\u043E\\u043D\\u0430", "America/Los_Angeles" },
2565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu bg.txt has exemplar city for this time zone
2566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u0421\\u0410\\u0429 (\\u041b\\u043e\\u0441 \\u0410\\u043d\\u0436\\u0435\\u043b\\u0438\\u0441)", "America/Los_Angeles" },
2567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u0421\\u0410\\u0429 (\\u041b\\u043e\\u0441 \\u0410\\u043d\\u0436\\u0435\\u043b\\u0438\\u0441)", "America/Los_Angeles" },
2568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "VVVV", "\\u0421\\u0410\\u0429 (\\u041b\\u043e\\u0441 \\u0410\\u043d\\u0436\\u0435\\u043b\\u0438\\u0441)", "America/Los_Angeles" },
2569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0410\\u0440\\u0436\\u0435\\u043d\\u0442\\u0438\\u043d\\u0430 (\\u0411\\u0443\\u0435\\u043D\\u043E\\u0441 \\u0410\\u0439\\u0440\\u0435\\u0441)", "America/Buenos_Aires" },
2579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0440\\u0436\\u0435\\u043d\\u0442\\u0438\\u043d\\u0430 (\\u0411\\u0443\\u0435\\u043D\\u043E\\u0441 \\u0410\\u0439\\u0440\\u0435\\u0441)", "America/Buenos_Aires" },
2580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu bg.txt does not have info for this time zone
2590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0410\\u0440\\u0436\\u0435\\u043d\\u0442\\u0438\\u043d\\u0430 (\\u0411\\u0443\\u0435\\u043D\\u043E\\u0441 \\u0410\\u0439\\u0440\\u0435\\u0441)", "America/Buenos_Aires" },
2591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0440\\u0436\\u0435\\u043d\\u0442\\u0438\\u043d\\u0430 (\\u0411\\u0443\\u0435\\u043D\\u043E\\u0441 \\u0410\\u0439\\u0440\\u0435\\u0441)", "America/Buenos_Aires" },
2592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0500", "-5:00" },
2595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-0500", "-5:00" },
2596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-0500", "-5:00" },
2597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0400", "-4:00" },
2599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-0400", "-4:00" },
2600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-0400", "-4:00" },
2601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u041a\\u0443\\u0431\\u0430", "America/Havana" },
2602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u041a\\u0443\\u0431\\u0430", "America/Havana" },
2603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+1100", "+11:00" },
2606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+1100", "+11:00" },
2607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "GMT+1100", "+11:00" },
2608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+1000", "+10:00" },
2610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+1000", "+10:00" },
2611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+1000", "+10:00" },
2612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043b\\u0438\\u044f (\\u0421\\u0438\\u0434\\u043D\\u0438)", "Australia/Sydney" },
2613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043b\\u0438\\u044f (\\u0421\\u0438\\u0434\\u043D\\u0438)", "Australia/Sydney" },
2614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+1100", "+11:00" },
2617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+1100", "+11:00" },
2618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "GMT+1100", "+11:00" },
2619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+1000", "+10:00" },
2621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+1000", "+10:00" },
2622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+1000", "+10:00" },
2623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043b\\u0438\\u044f (\\u0421\\u0438\\u0434\\u043D\\u0438)", "Australia/Sydney" },
2624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043b\\u0438\\u044f (\\u0421\\u0438\\u0434\\u043D\\u0438)", "Australia/Sydney" },
2625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+0000", "+0:00" },
2628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT+0000", "+0:00" },
2629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u0427\\u0430\\u0441\\u043E\\u0432\\u0430 \\u0437\\u043E\\u043D\\u0430 \\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447", "+0:00" },
2630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+0100", "+1:00" },
2632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+0100", "+1:00" },
2633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+0100", "+1:00" },
2634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u041e\\u0431\\u0435\\u0434\\u0438\\u043d\\u0435\\u043d\\u043e \\u043a\\u0440\\u0430\\u043b\\u0441\\u0442\\u0432\\u043e", "Europe/London" },
2635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u041e\\u0431\\u0435\\u0434\\u0438\\u043d\\u0435\\u043d\\u043e \\u043a\\u0440\\u0430\\u043b\\u0441\\u0442\\u0432\\u043e", "Europe/London" },
2636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-0300", "-3:00" },
2646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-0300", "-3:00" },
2647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+0530", "+5:30" },
2651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+0530", "+5:30" },
2652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "GMT+0530", "+5:30" },
2653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+0530", "+5:30" },
2655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+0530", "+05:30" },
2656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "GMT+0530", "+5:30" },
2657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u0418\\u043D\\u0434\\u0438\\u044F", "Asia/Calcutta" },
2658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u0418\\u043D\\u0434\\u0438\\u044F", "Asia/Calcutta" },
2659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // ==========
2661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0800", "-8:00" },
2664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-0800", "America/Los_Angeles" },
2665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "V", "PST", "America/Los_Angeles" },
2666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u592a\\u5e73\\u6d0b\\u6a19\\u6e96\\u6642", "America/Los_Angeles" },
2667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0700", "-7:00" },
2669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-0700", "America/Los_Angeles" },
2670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "V", "PDT", "America/Los_Angeles" },
2671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u592a\\u5e73\\u6d0b\\u590f\\u6642\\u9593", "America/Los_Angeles" },
2672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu ja.txt has exemplar city for this time zone
2673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u30A2\\u30E1\\u30EA\\u30AB\\u5408\\u8846\\u56FD (\\u30ed\\u30b5\\u30f3\\u30bc\\u30eb\\u30b9)", "America/Los_Angeles" },
2674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u30A2\\u30E1\\u30EA\\u30AB\\u5408\\u8846\\u56FD (\\u30ed\\u30b5\\u30f3\\u30bc\\u30eb\\u30b9)", "America/Los_Angeles" },
2675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "VVVV", "\\u30A2\\u30E1\\u30EA\\u30AB\\u5408\\u8846\\u56FD (\\u30ed\\u30b5\\u30f3\\u30bc\\u30eb\\u30b9)", "America/Los_Angeles" },
2676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu ja.txt does not have info for this time zone
2686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u30a2\\u30eb\\u30bc\\u30f3\\u30c1\\u30f3 (\\u30A2\\u30E1\\u30EA\\u30AB/\\u30D6\\u30A8\\u30CE\\u30B9\\u30A2\\u30A4\\u30EC\\u30B9)", "America/Buenos_Aires" },
2687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u30a2\\u30eb\\u30bc\\u30f3\\u30c1\\u30f3 (\\u30A2\\u30E1\\u30EA\\u30AB/\\u30D6\\u30A8\\u30CE\\u30B9\\u30A2\\u30A4\\u30EC\\u30B9)", "America/Buenos_Aires" },
2688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu ja.txt does not have info for this time zone
2698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u30a2\\u30eb\\u30bc\\u30f3\\u30c1\\u30f3 (\\u30A2\\u30E1\\u30EA\\u30AB/\\u30D6\\u30A8\\u30CE\\u30B9\\u30A2\\u30A4\\u30EC\\u30B9)", "America/Buenos_Aires" },
2699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u30a2\\u30eb\\u30bc\\u30f3\\u30c1\\u30f3 (\\u30A2\\u30E1\\u30EA\\u30AB/\\u30D6\\u30A8\\u30CE\\u30B9\\u30A2\\u30A4\\u30EC\\u30B9)", "America/Buenos_Aires" },
2700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0500", "-5:00" },
2703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-0500", "-5:00" },
2704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-0500", "-5:00" },
2705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0400", "-4:00" },
2707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-0400", "-4:00" },
2708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-0400", "-4:00" },
2709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u30ad\\u30e5\\u30fc\\u30d0\\u6642\\u9593", "America/Havana" },
2710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u30ad\\u30e5\\u30fc\\u30d0\\u6642\\u9593", "America/Havana" },
2711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+1100", "+11:00" },
2714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+1100", "+11:00" },
2715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "GMT+1100", "+11:00" },
2716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+1000", "+10:00" },
2718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+1000", "+10:00" },
2719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+1000", "+10:00" },
2720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu ja.txt does not have info for this time zone
2721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u30aa\\u30fc\\u30b9\\u30c8\\u30e9\\u30ea\\u30a2 (\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2/\\u30B7\\u30C9\\u30CB\\u30FC)", "Australia/Sydney" },
2722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u30aa\\u30fc\\u30b9\\u30c8\\u30e9\\u30ea\\u30a2 (\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2/\\u30B7\\u30C9\\u30CB\\u30FC)", "Australia/Sydney" },
2723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+1100", "+11:00" },
2726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+1100", "+11:00" },
2727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "GMT+1100", "+11:00" },
2728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+1000", "+10:00" },
2730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+1000", "+10:00" },
2731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+1000", "+10:00" },
2732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u30aa\\u30fc\\u30b9\\u30c8\\u30e9\\u30ea\\u30a2 (\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2/\\u30B7\\u30C9\\u30CB\\u30FC)", "Australia/Sydney" },
2733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u30aa\\u30fc\\u30b9\\u30c8\\u30e9\\u30ea\\u30a2 (\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2/\\u30B7\\u30C9\\u30CB\\u30FC)", "Australia/Sydney" },
2734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+0000", "+0:00" },
2737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT+0000", "+0:00" },
2738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "V", "GMT", "+0:00" },
2739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u30B0\\u30EA\\u30CB\\u30C3\\u30B8\\u6A19\\u6E96\\u6642", "+0:00" },
2740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+0100", "+1:00" },
2742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+0100", "+1:00" },
2743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "V", "GMT+0100", "+1:00" },
2744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+0100", "+1:00" },
2745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
2746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
2747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
2748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-0300", "-3:00" },
2755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-0300", "-3:00" },
2756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-0300", "-3:00" },
2757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-0300", "-3:00" },
2758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-0300", "-3:00" },
2759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+0530", "+5:30" },
2763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+0530", "+5:30" },
2764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "GMT+0530", "+5:30" },
2765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+0530", "+5:30" },
2767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+0530", "+05:30" },
2768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "GMT+0530", "+5:30" },
2769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u30A4\\u30F3\\u30C9\\u6642\\u9593", "Asia/Calcutta" },
2770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u30A4\\u30F3\\u30C9\\u6642\\u9593", "Asia/Calcutta" },
2771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // ==========
2773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
2776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-08:00", "-8:00" },
2777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "GMT-08:00", "-8:00" },
2778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-07:00", "-7:00" },
2781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "GMT-07:00", "-7:00" },
2782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "US (Los Angeles)", "America/Los_Angeles" },
2783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "US (Los Angeles)", "America/Los_Angeles" },
2784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "AR (Buenos Aires)", "America/Buenos_Aires" },
2794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "AR (Buenos Aires)", "America/Buenos_Aires" },
2795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "AR (Buenos Aires)", "America/Buenos_Aires" },
2805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "AR (Buenos Aires)", "America/Buenos_Aires" },
2806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
2809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-05:00", "-5:00" },
2810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-05:00", "-5:00" },
2811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
2813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-04:00", "-4:00" },
2814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-04:00", "-4:00" },
2815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Havana", "2004-07-15T00:00:00Z", "v", "CU", "America/Havana" },
2816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "CU", "America/Havana" },
2817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
2822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
2826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "AU (Sydney)", "Australia/Sydney" },
2827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "AU (Sydney)", "Australia/Sydney" },
2828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
2833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
2837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "AU (Sydney)", "Australia/Sydney" },
2838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "AU (Sydney)", "Australia/Sydney" },
2839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+00:00", "+0:00" },
2842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT+00:00", "+0:00" },
2843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "GMT+00:00", "+0:00" },
2844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
2846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+01:00", "+1:00" },
2847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+01:00", "+1:00" },
2848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Europe/London", "2004-07-15T00:00:00Z", "v", "GB", "Europe/London" },
2849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "GB", "Europe/London" },
2850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-03:00", "-3:00" },
2860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "\\u09AD\\u09BE. \\u09B8.", "+5:30" },
2866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u09AD\\u09BE\\u09F0\\u09A4\\u09C0\\u09AF\\u09BC \\u09B8\\u09AE\\u09AF\\u09BC", "+5:30" },
2867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "\\u09AD\\u09BE. \\u09B8.", "+05:30" },
2870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u09AD\\u09BE\\u09F0\\u09A4\\u09C0\\u09AF\\u09BC \\u09B8\\u09AE\\u09AF\\u09BC", "+5:30" },
2871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u09AD\\u09BE. \\u09B8.", "Asia/Calcutta" },
2872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "as", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u09AD\\u09BE\\u09F0\\u09A4\\u09C0\\u09AF\\u09BC \\u09B8\\u09AE\\u09AF\\u09BC", "Asia/Calcutta" },
2873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "", "", "", "", "", "" },
2874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
2875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (isICUVersionAtLeast(ICU_39))
2877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
2878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode status;
2879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        Calendar *cal = GregorianCalendar::createInstance(status);
2880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (int i = 0; fallbackTests[i][0][0]; i++) {
2881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString info[5];
2882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            for ( int j = 0 ; j < 5 ; j++ ) {
2883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString value(fallbackTests[i][j],"");
2884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                value = value.unescape();
2885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                info[j].setTo(value);
2886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(info[0] + ";" + info[1] + ";" + info[2] + ";" + info[3]);
2888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            TimeZone *tz = TimeZone::createTimeZone(info[1]);
2890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if ( info[2] == UNICODE_STRING_SIMPLE("2004-07-15T00:00:00Z")) {
2892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                cal->set(2004,6,15,0,0,0);
2893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } else {
2894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                cal->set(2004,0,15,0,0,0);
2895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            SimpleDateFormat *fmt = new SimpleDateFormat(info[3], Locale(fallbackTests[i][0]),status);
2898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            cal->setTimeZone(*tz);
2899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString result;
2900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            FieldPosition pos(0);
2901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt->format(*cal,result,pos);
2902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (result != info[4]) {
2903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln(info[0] + ";" + info[1] + ";" + info[2] + ";" + info[3] + " expected: '" +
2904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      info[4] + "' but got: '" + result + "'");
2905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru       logln("Warning: Skipping TestTimeZoneDisplayName. TODO: Fix in ICU 4.0");
2909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
2913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelativeError(void)
2914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status;
2916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale en("en");
2917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *en_reltime_reldate =         DateFormat::createDateTimeInstance(DateFormat::kFullRelative,DateFormat::kFullRelative,en);
2919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(en_reltime_reldate == NULL) {
2920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("PASS: rel date/rel time failed");
2921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: rel date/rel time created, should have failed.");
2923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete en_reltime_reldate;
2924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelativeOther(void)
2928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Nothing in this test. When we get more data from CLDR, put in some tests of -2, +2, etc. ");
2930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
2932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */
2936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof
2938