dtfmttst.cpp revision 85bf2e2fbc60a9f938064abc8127d61da7d19882
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/********************************************************************
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT:
385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Copyright (c) 1997-2009, 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
3085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#define ASSERT_OK(status)  if(U_FAILURE(status)) {errcheckln(status, #status " = %s @ %s:%d", u_errorName(status), __FILE__, __LINE__); return; }
31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *****************************************************************************
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class DateFormatTest
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *****************************************************************************
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // if (exec) logln((UnicodeString)"TestSuite DateFormatTest");
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    switch (index) {
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(0,TestEquals);
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(1,TestTwoDigitYearDSTParse);
42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(2,TestFieldPosition);
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(3,TestPartialParse994);
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(4,TestRunTogetherPattern985);
45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(5,TestRunTogetherPattern917);
46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(6,TestCzechMonths459);
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(7,TestLetterDPattern212);
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(8,TestDayOfYearPattern195);
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(9,TestQuotePattern161);
50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(10,TestBadInput135);
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(11,TestBadInput135a);
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(12,TestTwoDigitYear);
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(13,TestDateFormatZone061);
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(14,TestDateFormatZone146);
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(15,TestLocaleDateFormat);
56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(16,TestWallyWedel);
57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(17,TestDateFormatCalendar);
58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(18,TestSpaceParsing);
59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(19,TestExactCountFormat);
60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(20,TestWhiteSpaceParsing);
61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(21,TestInvalidPattern);
62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(22,TestGeneral);
63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(23,TestGreekMay);
64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(24,TestGenericTime);
65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(25,TestGenericTimeZoneOrder);
66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(26,TestHost);
67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(27,TestEras);
68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(28,TestNarrowNames);
69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(29,TestStandAloneDays);
70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(30,TestStandAloneMonths);
71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(31,TestQuarters);
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(32,TestZTimeZoneParsing);
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(33,TestRelative);
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(34,TestRelativeClone);
75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(35,TestHostClone);
76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TESTCASE(36,TestTimeZoneDisplayName);
7785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        TESTCASE(37,TestRoundtripWithCalendar);
7885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        TESTCASE(38,Test6338);
7985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        TESTCASE(39,Test6726);
8085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        TESTCASE(40,TestGMTParsing);
8185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        TESTCASE(41,Test6880);
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
8385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        TESTCASE(42,TestRelativeError);
8485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        TESTCASE(43,TestRelativeOther);
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        */
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        default: name = ""; break;
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test written by Wally Wedel and emailed to me.
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestWallyWedel()
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Instantiate a TimeZone so we can get the ids.
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *tz = new SimpleTimeZone(7,"");
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Computational variables.
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t offset, hours, minutes, seconds;
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Instantiate a SimpleDateFormat set up to produce a full time
104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     zone name.
105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *sdf = new SimpleDateFormat((UnicodeString)"zzzz", status);
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * A String array for the time zone ids.
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t ids_length;
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    StringEnumeration* ids = TimeZone::createEnumeration();
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ids_length = ids->count(status);
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * How many ids do we have?
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Time Zone IDs size: %d", ids_length);
117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Column headings (sort of)
119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Ordinal ID offset(h:m) name");
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Loop through the tzs.
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate today = Calendar::getNow();
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal = Calendar::createInstance(status);
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i = 0; i < ids_length; i++) {
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // logln(i + " " + ids[i]);
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const UnicodeString* id = ids->snext(status);
129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TimeZone *ttz = TimeZone::createTimeZone(*id);
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // offset = ttz.getRawOffset();
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->setTimeZone(*ttz);
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->setTime(today, status);
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        offset = cal->get(UCAL_ZONE_OFFSET, status) + cal->get(UCAL_DST_OFFSET, status);
134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // logln(i + " " + ids[i] + " offset " + offset);
135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* sign = "+";
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (offset < 0) {
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            sign = "-";
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            offset = -offset;
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        hours = offset/3600000;
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        minutes = (offset%3600000)/60000;
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        seconds = (offset%60000)/1000;
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString dstOffset = (UnicodeString)"" + sign + (hours < 10 ? "0" : "") +
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            (int32_t)hours + ":" + (minutes < 10 ? "0" : "") + (int32_t)minutes;
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (seconds != 0) {
146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            dstOffset = dstOffset + ":" + (seconds < 10 ? "0" : "") + seconds;
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Instantiate a date so we can display the time zone name.
150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         */
151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf->setTimeZone(*ttz);
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Format the output.
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         */
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString fmtOffset;
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FieldPosition pos(0);
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf->format(today,fmtOffset, pos);
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // UnicodeString fmtOffset = tzS.toString();
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString *fmtDstOffset = 0;
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (fmtOffset.startsWith("GMT"))
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            //fmtDstOffset = fmtOffset->substring(3);
163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmtDstOffset = new UnicodeString();
164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmtOffset.extract(3, fmtOffset.length(), *fmtDstOffset);
165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Show our result.
168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         */
169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UBool ok = fmtDstOffset == 0 || *fmtDstOffset == dstOffset;
170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (ok)
171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(UnicodeString() + i + " " + *id + " " + dstOffset +
173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " " + fmtOffset +
174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  (fmtDstOffset != 0 ? " ok" : " ?"));
175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else
177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString() + i + " " + *id + " " + dstOffset +
179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " " + fmtOffset + " *** FAIL ***");
180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete ttz;
182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmtDstOffset;
183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //  delete ids;   // TODO:  BAD API
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete ids;
187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete sdf;
188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete tz;
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test operator==
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestEquals()
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* fmtA = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL);
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* fmtB = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL);
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if ( fmtA == NULL || fmtB == NULL){
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateTimeInstance");
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmtA;
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmtB;
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(*fmtA == *fmtB)) errln((UnicodeString)"FAIL");
209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmtA;
210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmtB;
211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* test = TimeZone::createTimeZone("PDT");
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete test;
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the parsing of 2-digit years.
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestTwoDigitYearDSTParse(void)
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* fullFmt = new SimpleDateFormat((UnicodeString)"EEE MMM dd HH:mm:ss.SSS zzz yyyy G", status);
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *fmt = new SimpleDateFormat((UnicodeString)"dd-MMM-yy h:mm:ss 'o''clock' a z", Locale::getEnglish(), status);
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //DateFormat* fmt = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL, Locale::ENGLISH);
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString* s = new UnicodeString("03-Apr-04 2:20:47 o'clock AM PST", "");
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* defaultTZ = TimeZone::createDefault();
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* PST = TimeZone::createTimeZone("PST");
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t defaultOffset = defaultTZ->getRawOffset();
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t PSTOffset = PST->getRawOffset();
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t hour = 2 + (defaultOffset - PSTOffset) / (60*60*1000);
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // hour is the expected hour of day, in units of seconds
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    hour = ((hour < 0) ? hour + 24 : hour) * 60*60;
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
24085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errcheckln(status, "Could not set up test. exitting - %s", u_errorName(status));
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = fmt->parse(*s, status);
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(*s + " P> " + ((DateFormat*)fullFmt)->format(d, str));
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t y, m, day, hr, min, sec;
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateToFields(d, y, m, day, hr, min, sec);
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    hour += defaultTZ->inDaylightTime(d, status) ? 1 : 0;
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    hr = hr*60*60;
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (hr != hour)
251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Should parse to hour " + hour + " but got " + hr);
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: " + (int32_t)status);
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete s;
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullFmt;
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete PST;
260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete defaultTZ;
261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUChar toHexString(int32_t i) { return (UChar)(i + (i < 10 ? 0x30 : (0x41 - 10))); }
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString&
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::escape(UnicodeString& s)
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString buf;
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i=0; i<s.length(); ++i)
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UChar c = s[(int32_t)i];
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (c <= (UChar)0x7F) buf += c;
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += (UChar)0x5c; buf += (UChar)0x55;
277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0xF000) >> 12);
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0x0F00) >> 8);
279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0x00F0) >> 4);
280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString(c & 0x000F);
281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return (s = buf);
284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This MUST be kept in sync with DateFormatSymbols.gPatternChars.
290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* PATTERN_CHARS = "GyMdkHmsSEDFwWahKzYeugAZvcLQqV";
292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A list of the names of all the fields in DateFormat.
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This MUST be kept in sync with DateFormat.
296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* DATEFORMAT_FIELD_NAMES[] = {
298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "ERA_FIELD",
299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "YEAR_FIELD",
300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MONTH_FIELD",
301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DATE_FIELD",
302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR_OF_DAY1_FIELD",
303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR_OF_DAY0_FIELD",
304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MINUTE_FIELD",
305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "SECOND_FIELD",
306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MILLISECOND_FIELD",
307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DAY_OF_WEEK_FIELD",
308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DAY_OF_YEAR_FIELD",
309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DAY_OF_WEEK_IN_MONTH_FIELD",
310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "WEEK_OF_YEAR_FIELD",
311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "WEEK_OF_MONTH_FIELD",
312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "AM_PM_FIELD",
313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR1_FIELD",
314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR0_FIELD",
315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "TIMEZONE_FIELD",
316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "YEAR_WOY_FIELD",
317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DOW_LOCAL_FIELD",
318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "EXTENDED_YEAR_FIELD",
319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "JULIAN_DAY_FIELD",
320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MILLISECONDS_IN_DAY_FIELD",
321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "TIMEZONE_RFC_FIELD",
322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "GENERIC_TIMEZONE_FIELD",
323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "STAND_ALONE_DAY_FIELD",
324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "STAND_ALONE_MONTH_FIELD",
325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "QUARTER_FIELD",
326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "STAND_ALONE_QUARTER_FIELD",
327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "TIMEZONE_SPECIAL_FIELD"
328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const int32_t DATEFORMAT_FIELD_NAMES_LENGTH =
331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sizeof(DATEFORMAT_FIELD_NAMES) / sizeof(DATEFORMAT_FIELD_NAMES[0]);
332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that returned field position indices are correct.
335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestFieldPosition() {
337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i, j, exp;
339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString buf;
340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Verify data
342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormatSymbols rootSyms(Locale(""), ec);
343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertSuccess("DateFormatSymbols", ec);
34485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(ec)) {
34585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
34685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // local pattern chars data is not longer loaded
349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // from icu locale bundle
350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("patternChars", PATTERN_CHARS, rootSyms.getLocalPatternChars(buf));
351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("patternChars", PATTERN_CHARS, DateFormatSymbols::getPatternUChars());
352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertTrue("DATEFORMAT_FIELD_NAMES", DATEFORMAT_FIELD_NAMES_LENGTH == UDAT_FIELD_COUNT);
353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertTrue("Data", UDAT_FIELD_COUNT == uprv_strlen(PATTERN_CHARS));
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Create test formatters
356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t COUNT = 4;
357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* dateFormats[COUNT];
358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[0] = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale::getUS());
359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[1] = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale::getFrance());
360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Make the pattern "G y M d..."
361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    buf.remove().append(PATTERN_CHARS);
362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (j=buf.length()-1; j>=0; --j) buf.insert(j, (UChar)32/*' '*/);
363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[2] = new SimpleDateFormat(buf, Locale::getUS(), ec);
364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Make the pattern "GGGG yyyy MMMM dddd..."
365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (j=buf.length()-1; j>=0; j-=2) {
366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i=0; i<3; ++i) {
367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf.insert(j, buf.charAt(j));
368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[3] = new SimpleDateFormat(buf, Locale::getUS(), ec);
371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(ec)){
372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("Could not create SimpleDateFormat object for locale en_US. Error: " )+ UnicodeString(u_errorName(ec)));
373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate aug13 = 871508052513.0;
376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Expected output field values for above DateFormats on aug13
378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Fields are given in order of DateFormat field number
379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* EXPECTED[] = {
380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "", "1997", "August", "13", "", "", "34", "12", "",
38185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "Wednesday", "", "", "", "", "PM", "2", "", "Pacific Daylight Time", "", "", "", "", "", "", "", "", "", "", "","",
382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "", "1997", "ao\\u00FBt", "13", "", "14", "34", "12", "",
38485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "mercredi", "", "", "", "", "", "", "", "heure avanc\\u00e9e du Pacifique", "", "", "", "", "", "", "",  "", "", "", "", "",
385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "AD", "1997", "8", "13", "14", "14", "34", "12", "5",
38785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "Wed", "225", "2", "33", "2", "PM", "2", "2", "PDT", "1997", "4", "1997", "2450674", "52452513", "-0700", "PT",  "4", "8", "3", "3","PDT",
388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Anno Domini", "1997", "August", "0013", "0014", "0014", "0034", "0012", "5130",
39085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "Wednesday", "0225", "0002", "0033", "0002", "PM", "0002", "0002", "Pacific Daylight Time", "1997", "Wednesday", "1997", "2450674", "52452513", "GMT-07:00",
391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Pacific Time",  "Wednesday", "August", "3rd quarter", "3rd quarter", "United States (Los Angeles)"
392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t EXPECTED_LENGTH = sizeof(EXPECTED)/sizeof(EXPECTED[0]);
395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertTrue("data size", EXPECTED_LENGTH == COUNT * UDAT_FIELD_COUNT);
397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* PT = TimeZone::createTimeZone("America/Los_Angeles");
399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (j = 0, exp = 0; j < COUNT; ++j) {
400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //  String str;
401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat* df = dateFormats[j];
402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        df->setTimeZone(*PT);
403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (df->getDynamicClassID() == SimpleDateFormat::getStaticClassID()) {
404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(" Pattern = " + ((SimpleDateFormat*) df)->toPattern(buf.remove()));
405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(" Pattern = ? (not a SimpleDateFormat)");
407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"  Result = " + df->format(aug13, buf.remove()));
409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i = 0; i < UDAT_FIELD_COUNT; ++i, ++exp) {
411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            FieldPosition pos(i);
412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf.remove();
413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            df->format(aug13, buf, pos);
414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString field;
415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf.extractBetween(pos.getBeginIndex(), pos.getEndIndex(), field);
416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"field #" + i + " " + DATEFORMAT_FIELD_NAMES[i],
417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(EXPECTED[exp]), field);
418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (i=0; i<COUNT; ++i) {
422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete dateFormats[i];
423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete PT;
425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * General parse/format tests.  Add test cases as needed.
431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGeneral() {
433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss.SSS",
435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Milliseconds are left-justified, since they format as fractions of a second
437b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
438b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm:ss.SSS", "F", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.567",
440b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(DATA, ARRAY_SIZE(DATA), Locale("en", "", ""));
443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that strings which contain incomplete specifications are parsed
449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * correctly.  In some instances, this means not being parsed at all, and
450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * returning an appropriate error.
451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestPartialParse994()
454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* f = new SimpleDateFormat(status);
457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
45885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(status)) {
45985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete f;
46085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
46185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate null = 0;
463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10:11:42", date(97, 1 - 1, 17, 10, 11, 42));
464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10:", null);
465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10", null);
466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 ", null);
467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17", null);
468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete f;
470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::tryPat994(SimpleDateFormat* format, const char* pat, const char* str, UDate expected)
476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate null = 0;
479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("Pattern \"") + pat + "\"   String \"" + str + "\"");
480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        format->applyPattern(pat);
482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate date = format->parse(str, status);
483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status) || date == null)
484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"ParseException: " + (int32_t)status);
486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (expected != null) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else
489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString f;
491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            ((DateFormat*)format)->format(date, f);
492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(UnicodeString(" parse(") + str + ") -> " + dateToString(date));
493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)" format -> " + f);
494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (expected == null ||
495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                !(date == expected)) errln((UnicodeString)"FAIL: Expected null");//" + expected);
496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!(f == str)) errln(UnicodeString("FAIL: Expected ") + str);
497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    logln((UnicodeString)"ParseException: " + e.getMessage());
501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    if (expected != null) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Exception e) {
504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    errln((UnicodeString)"*** Exception:");
505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    e.printStackTrace();
506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the behavior of patterns in which digits for different fields run together
513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * without intervening separators.
514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestRunTogetherPattern985()
517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString format("yyyyMMddHHmmssSSS");
520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString now, then;
521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //UBool flag;
522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *formatter = new SimpleDateFormat(format, status);
523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date1 = Calendar::getNow();
525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((DateFormat*)formatter)->format(date1, now);
526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(now);
527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos(0);
528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date2 = formatter->parse(now, pos);
529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (date2 == 0) then = "Parse stopped at " + pos.getIndex();
530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else ((DateFormat*)formatter)->format(date2, then);
531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(then);
532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(date2 == date1)) errln((UnicodeString)"FAIL");
533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the behavior of patterns in which digits for different fields run together
541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * without intervening separators.
542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestRunTogetherPattern917()
545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* fmt;
548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString myDate;
549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt = new SimpleDateFormat((UnicodeString)"yyyy/MM/dd", status);
550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    myDate = "1997/02/03";
552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testIt917(fmt, myDate, date(97, 2 - 1, 3));
553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt = new SimpleDateFormat((UnicodeString)"yyyyMMdd", status);
555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    myDate = "19970304";
556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testIt917(fmt, myDate, date(97, 3 - 1, 4));
557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::testIt917(SimpleDateFormat* fmt, UnicodeString& str, UDate expected)
565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pattern;
568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"pattern=" + fmt->toPattern(pattern) + "   string=" + str);
569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable o;
570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ((Format*)fmt)->parseObject(str, o, status);
572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) return;
574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    e.printStackTrace();
576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    return;
577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Parsed object: " + dateToString(o.getDate()));
579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(o.getDate() == expected)) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString formatted; ((Format*)fmt)->format(o, formatted, status);
581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Formatted string: " + formatted);
582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(formatted == str)) errln((UnicodeString)"FAIL: Expected " + str);
583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the handling of Czech June and July, which have the unique attribute that
590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * one is a proper prefix substring of the other.
591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestCzechMonths459()
594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* fmt = DateFormat::createDateInstance(DateFormat::FULL, Locale("cs", "", ""));
597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (fmt == NULL){
598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateInstance()");
599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pattern;
603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Pattern " + ((SimpleDateFormat*) fmt)->toPattern(pattern));
604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate june = date(97, UCAL_JUNE, 15);
605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate july = date(97, UCAL_JULY, 15);
606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString juneStr; fmt->format(june, juneStr);
607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString julyStr; fmt->format(july, julyStr);
608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"format(June 15 1997) = " + juneStr);
610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d = fmt->parse(juneStr, status);
611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString s; fmt->format(d, s);
612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t month,yr,day,hr,min,sec; dateToFields(d,yr,month,day,hr,min,sec);
613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"  -> parse -> " + s + " (month = " + month + ")");
614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (month != UCAL_JUNE) errln((UnicodeString)"FAIL: Month should be June");
615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"format(July 15 1997) = " + julyStr);
616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        d = fmt->parse(julyStr, status);
617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt->format(d, s);
618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dateToFields(d,yr,month,day,hr,min,sec);
619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"  -> parse -> " + s + " (month = " + month + ")");
620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (month != UCAL_JULY) errln((UnicodeString)"FAIL: Month should be July");
621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"Exception: " + (int32_t)status);
625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of 'D' in patterns.
633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestLetterDPattern212()
636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString dateString("1995-040.05:01:29");
639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString bigD("yyyy-DDD.hh:mm:ss");
640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString littleD("yyyy-ddd.hh:mm:ss");
641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate expLittleD = date(95, 0, 1, 5, 1, 29);
642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate expBigD = expLittleD + 39 * 24 * 3600000.0;
643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expLittleD = expBigD; // Expect the same, with default lenient parsing
644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"dateString= " + dateString);
645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *formatter = new SimpleDateFormat(bigD, status);
646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos(0);
648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate myDate = formatter->parse(dateString, pos);
649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Using " + bigD + " -> " + myDate);
650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (myDate != expBigD) errln((UnicodeString)"FAIL: Expected " + dateToString(expBigD));
651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    formatter = new SimpleDateFormat(littleD, status);
653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pos = ParsePosition(0);
655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    myDate = formatter->parse(dateString, pos);
656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Using " + littleD + " -> " + dateToString(myDate));
657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (myDate != expLittleD) errln((UnicodeString)"FAIL: Expected " + dateToString(expLittleD));
658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the day of year pattern.
666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestDayOfYearPattern195()
669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate today = Calendar::getNow();
672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t year,month,day,hour,min,sec; dateToFields(today,year,month,day,hour,min,sec);
673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate expected = date(year, month, day);
674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Test Date: " + dateToString(today));
675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* sdf = (SimpleDateFormat*)DateFormat::createDateInstance();
676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (sdf == NULL){
677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateInstance()");
678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPattern(*sdf, today, 0, expected);
681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPattern(*sdf, today, "G yyyy DDD", expected);
682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete sdf;
683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::tryPattern(SimpleDateFormat& sdf, UDate d, const char* pattern, UDate expected)
690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pattern != 0) sdf.applyPattern(pattern);
693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString thePat;
694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"pattern: " + sdf.toPattern(thePat));
695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString formatResult; (*(DateFormat*)&sdf).format(d, formatResult);
696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" format -> " + formatResult);
697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // try {
698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d2 = sdf.parse(formatResult, status);
699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)" parse(" + formatResult + ") -> " + dateToString(d2));
700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (d2 != expected) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString format2; (*(DateFormat*)&sdf).format(d2, format2);
702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)" format -> " + format2);
703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!(formatResult == format2)) errln((UnicodeString)"FAIL: Round trip drift");
704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Exception e) {
706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"Error: " + (int32_t)status);
708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of single quotes in patterns.
715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestQuotePattern161()
718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* formatter = new SimpleDateFormat((UnicodeString)"MM/dd/yyyy 'at' hh:mm:ss a zzz", status);
721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate currentTime_1 = date(97, UCAL_AUGUST, 13, 10, 42, 28);
723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString dateString; ((DateFormat*)formatter)->format(currentTime_1, dateString);
724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString exp("08/13/1997 at 10:42:28 AM ");
725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"format(" + dateToString(currentTime_1) + ") = " + dateString);
726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (0 != dateString.compareBetween(0, exp.length(), exp, 0, exp.length())) errln((UnicodeString)"FAIL: Expected " + exp);
727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the correct behavior when handling invalid input strings.
735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestBadInput135()
738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat::EStyle looks[] = {
741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat::SHORT, DateFormat::MEDIUM, DateFormat::LONG, DateFormat::FULL
742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t looks_length = (int32_t)(sizeof(looks) / sizeof(looks[0]));
744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* strings[] = {
745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Mar 15", "Mar 15 1997", "asdf", "3/1/97 1:23:", "3/1/00 1:23:45 AM"
746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t strings_length = (int32_t)(sizeof(strings) / sizeof(strings[0]));
748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::LONG);
749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(full==NULL) {
75085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho      dataerrln("could not create date time instance");
751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString expected("March 1, 2000 1:23:45 AM ");
754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i = 0; i < strings_length;++i) {
755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* text = strings[i];
756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (int32_t j = 0; j < looks_length;++j) {
757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            DateFormat::EStyle dateLook = looks[j];
758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            for (int32_t k = 0; k < looks_length;++k) {
759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                DateFormat::EStyle timeLook = looks[k];
760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                DateFormat *df = DateFormat::createDateTimeInstance(dateLook, timeLook);
761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (df == NULL){
762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    dataerrln("Error calling DateFormat::createDateTimeInstance()");
763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    continue;
764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString prefix = UnicodeString(text) + ", " + dateLook + "/" + timeLook + ": ";
766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //try {
767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    UDate when = df->parse(text, status);
768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (when == 0 && U_SUCCESS(status)) {
769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        errln(prefix + "SHOULD NOT HAPPEN: parse returned 0.");
770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        continue;
771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (U_SUCCESS(status))
773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    {
774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        UnicodeString format;
775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        full->format(when, format);
776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        logln(prefix + "OK: " + format);
777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        if (0!=format.compareBetween(0, expected.length(), expected, 0, expected.length()))
778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            errln((UnicodeString)"FAIL: Expected " + expected + " got " + format);
779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //}
781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //catch(ParseException e) {
782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    else
783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        status = U_ZERO_ERROR;
784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //}
785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //catch(StringIndexOutOfBoundsException e) {
786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //    errln(prefix + "SHOULD NOT HAPPEN: " + (int)status);
787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //}
788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                delete df;
789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* const parseFormats[] = {
798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MMMM d, yyyy",
799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MMMM d yyyy",
800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "M/d/yy",
801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "d MMMM, yyyy",
802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "d MMMM yyyy",
803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "d MMMM",
804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MMMM d",
805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "yyyy",
806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "h:mm a MMMM d, yyyy"
807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* const inputStrings[] = {
810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "bogus string", 0, 0, 0, 0, 0, 0, 0, 0, 0,
811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "April 1, 1997", "April 1, 1997", 0, 0, 0, 0, 0, "April 1", 0, 0,
812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "Jan 1, 1970", "January 1, 1970", 0, 0, 0, 0, 0, "January 1", 0, 0,
813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "Jan 1 2037", 0, "January 1 2037", 0, 0, 0, 0, "January 1", 0, 0,
814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "1/1/70", 0, 0, "1/1/70", 0, 0, 0, 0, "0001", 0,
815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "5 May 1997", 0, 0, 0, 0, "5 May 1997", "5 May", 0, "0005", 0,
816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "16 May", 0, 0, 0, 0, 0, "16 May", 0, "0016", 0,
817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "April 30", 0, 0, 0, 0, 0, 0, "April 30", 0, 0,
818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "1998", 0, 0, 0, 0, 0, 0, 0, "1998", 0,
819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "1", 0, 0, 0, 0, 0, 0, 0, "0001", 0,
820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "3:00 pm Jan 1, 1997", 0, 0, 0, 0, 0, 0, 0, "0003", "3:00 PM January 1, 1997",
821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the correct behavior when parsing an array of inputs against an
827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * array of patterns, with known results.  The results are encoded after
828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the input strings in each row.
829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestBadInput135a()
832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode status = U_ZERO_ERROR;
834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  SimpleDateFormat* dateParse = new SimpleDateFormat(status);
835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_FAILURE(status)) {
83685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    errcheckln(status, "Failed creating SimpleDateFormat with %s. Quitting test", u_errorName(status));
837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete dateParse;
838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return;
839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char* s;
841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UDate date;
842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const uint32_t PF_LENGTH = (int32_t)(sizeof(parseFormats)/sizeof(parseFormats[0]));
843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const uint32_t INPUT_LENGTH = (int32_t)(sizeof(inputStrings)/sizeof(inputStrings[0]));
844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  dateParse->applyPattern("d MMMM, yyyy");
846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  dateParse->adoptTimeZone(TimeZone::createDefault());
847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  s = "not parseable";
848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString thePat;
849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  logln(UnicodeString("Trying to parse \"") + s + "\" with " + dateParse->toPattern(thePat));
850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //try {
851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  date = dateParse->parse(s, status);
852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if (U_SUCCESS(status))
853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln((UnicodeString)"FAIL: Expected exception during parse");
854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //}
855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //catch(Exception ex) {
856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  else
857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Exception during parse: " + (int32_t)status);
858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  status = U_ZERO_ERROR;
859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //}
860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  for (uint32_t i = 0; i < INPUT_LENGTH; i += (PF_LENGTH + 1)) {
861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition parsePosition(0);
862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s( inputStrings[i]);
863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (uint32_t index = 0; index < PF_LENGTH;++index) {
864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      const char* expected = inputStrings[i + 1 + index];
865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      dateParse->applyPattern(parseFormats[index]);
866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      dateParse->adoptTimeZone(TimeZone::createDefault());
867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //try {
868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      parsePosition.setIndex(0);
869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      date = dateParse->parse(s, parsePosition);
870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if (parsePosition.getIndex() != 0) {
871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString s1, s2;
872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s.extract(0, parsePosition.getIndex(), s1);
873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s.extract(parsePosition.getIndex(), s.length(), s2);
874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (date == 0) {
875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          errln((UnicodeString)"ERROR: null result fmt=\"" +
876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     parseFormats[index] +
877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     "\" pos=" + parsePosition.getIndex() + " " +
878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     s1 + "|" + s2);
879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          UnicodeString result;
882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          ((DateFormat*)dateParse)->format(date, result);
883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          logln((UnicodeString)"Parsed \"" + s + "\" using \"" + dateParse->toPattern(thePat) + "\" to: " + result);
884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          if (expected == 0)
885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: Expected parse failure");
886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          else if (!(result == expected))
887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("FAIL: Expected ") + expected);
888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      else if (expected != 0) {
891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("FAIL: Expected ") + expected + " from \"" +
892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     s + "\" with \"" + dateParse->toPattern(thePat) + "\"");
893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //}
895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //catch(Exception ex) {
896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if (U_FAILURE(status))
897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"An exception was thrown during parse: " + (int32_t)status);
898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //}
899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  delete dateParse;
902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if (U_FAILURE(status))
903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the parsing of two-digit years.
910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestTwoDigitYear()
913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("dd/MM/yy", Locale::getUK(), ec);
916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
91785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errcheckln(ec, "FAIL: SimpleDateFormat constructor - %s", u_errorName(ec));
918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    parse2DigitYear(fmt, "5/6/17", date(117, UCAL_JUNE, 5));
921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    parse2DigitYear(fmt, "4/6/34", date(34, UCAL_JUNE, 4));
922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::parse2DigitYear(DateFormat& fmt, const char* str, UDate expected)
928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d = fmt.parse(str, status);
932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString thePat;
933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Parsing \"") + str + "\" with " + ((SimpleDateFormat*)&fmt)->toPattern(thePat) +
934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "  => " + dateToString(d));
935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (d != expected) errln((UnicodeString)"FAIL: Expected " + expected);
936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status))
939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Got exception");
940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the formatting of time zones.
947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestDateFormatZone061()
950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date;
953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *formatter;
954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    date= 859248000000.0;
955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date 1997/3/25 00:00 GMT: " + date);
956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    formatter = new SimpleDateFormat((UnicodeString)"dd-MMM-yyyyy HH:mm", Locale::getUK(), status);
957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
95885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho      errcheckln(status, "Failed creating SimpleDateFormat with %s. Quitting test", u_errorName(status));
959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      delete formatter;
960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    formatter->adoptTimeZone(TimeZone::createTimeZone("GMT"));
963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString temp; formatter->format(date, temp);
964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Formatted in GMT to: " + temp);
965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate tempDate = formatter->parse(temp, status);
967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"Parsed to: " + dateToString(tempDate));
968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (tempDate != date) errln((UnicodeString)"FAIL: Expected " + dateToString(date));
969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Throwable t) {
971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"Date Formatter throws: " + (int32_t)status);
973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the formatting of time zones.
981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestDateFormatZone146()
984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *saveDefault = TimeZone::createDefault();
986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //try {
988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *thedefault = TimeZone::createTimeZone("GMT");
989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone::setDefault(*thedefault);
990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // java.util.Locale.setDefault(new java.util.Locale("ar", "", ""));
991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // check to be sure... its GMT all right
993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TimeZone *testdefault = TimeZone::createDefault();
994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString testtimezone;
995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        testdefault->getID(testtimezone);
996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (testtimezone == "GMT")
997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln("Test timezone = " + testtimezone);
998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else
999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("Test timezone should be GMT, not " + testtimezone);
1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // now try to use the default GMT time zone
1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        GregorianCalendar *greenwichcalendar =
1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            new GregorianCalendar(1997, 3, 4, 23, 0, status);
1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        failure(status, "new GregorianCalendar");
1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //*****************************greenwichcalendar.setTimeZone(TimeZone.getDefault());
1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //greenwichcalendar.set(1997, 3, 4, 23, 0);
1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // try anything to set hour to 23:00 !!!
1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        greenwichcalendar->set(UCAL_HOUR_OF_DAY, 23);
1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // get time
1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate greenwichdate = greenwichcalendar->getTime(status);
1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // format every way
1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString DATA [] = {
1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString("simple format:  "), UnicodeString("04/04/97 23:00 GMT+00:00"),
1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString("MM/dd/yy HH:mm z"),
1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString("full format:    "), UnicodeString("Friday, April 4, 1997 11:00:00 o'clock PM GMT+00:00"),
1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString("EEEE, MMMM d, yyyy h:mm:ss 'o''clock' a z"),
1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString("long format:    "), UnicodeString("April 4, 1997 11:00:00 PM GMT+00:00"),
1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString("MMMM d, yyyy h:mm:ss a z"),
1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString("default format: "), UnicodeString("04-Apr-97 11:00:00 PM"),
1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString("dd-MMM-yy h:mm:ss a"),
1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString("short format:   "), UnicodeString("4/4/97 11:00 PM"),
1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString("M/d/yy h:mm a")
1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t DATA_length = (int32_t)(sizeof(DATA) / sizeof(DATA[0]));
1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (int32_t i=0; i<DATA_length; i+=3) {
1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            DateFormat *fmt = new SimpleDateFormat(DATA[i+2], Locale::getEnglish(), status);
1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(failure(status, "new SimpleDateFormat")) break;
1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt->setCalendar(*greenwichcalendar);
1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString result;
1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            result = fmt->format(greenwichdate, result);
1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(DATA[i] + result);
1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (result != DATA[i+1])
1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln("FAIL: Expected " + DATA[i+1] + ", got " + result);
1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            delete fmt;
1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //finally {
1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TimeZone::adoptDefault(saveDefault);
1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete testdefault;
1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete greenwichcalendar;
1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete thedefault;
1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the formatting of dates in different locales.
1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestLocaleDateFormat() // Bug 495
1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate testDate = date(97, UCAL_SEPTEMBER, 15);
1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *dfFrench = DateFormat::createDateTimeInstance(DateFormat::FULL,
1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat::FULL, Locale::getFrench());
1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *dfUS = DateFormat::createDateTimeInstance(DateFormat::FULL,
1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat::FULL, Locale::getUS());
106285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString expectedFRENCH ( "lundi 15 septembre 1997 00:00:00 heure avanc\\u00E9e du Pacifique", -1, US_INV );
1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectedFRENCH = expectedFRENCH.unescape();
1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //UnicodeString expectedUS ( "Monday, September 15, 1997 12:00:00 o'clock AM PDT" );
106585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString expectedUS ( "Monday, September 15, 1997 12:00:00 AM Pacific Daylight Time" );
1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date set to : " + dateToString(testDate));
1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString out;
1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (dfUS == NULL || dfFrench == NULL){
1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateTimeInstance)");
1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete dfUS;
1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete dfFrench;
1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dfFrench->format(testDate, out);
1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date Formated with French Locale " + out);
1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(out == expectedFRENCH))
1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected " + expectedFRENCH);
1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    out.truncate(0);
1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dfUS->format(testDate, out);
1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date Formated with US Locale " + out);
1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(out == expectedUS))
1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected " + expectedUS);
1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete dfUS;
1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete dfFrench;
1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test DateFormat(Calendar) API
1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestDateFormatCalendar() {
1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *date=0, *time=0, *full=0;
1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal=0;
1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos;
1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate when;
1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a formatter for date fields. */
1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    date = DateFormat::createDateInstance(DateFormat::kShort, Locale::getUS());
1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (date == NULL) {
110285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("FAIL: createDateInstance failed");
1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a formatter for time fields. */
1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    time = DateFormat::createTimeInstance(DateFormat::kShort, Locale::getUS());
1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (time == NULL) {
1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: createTimeInstance failed");
1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a full format for output */
1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull,
1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                              Locale::getUS());
1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: createInstance failed");
1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a calendar */
1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal = Calendar::createInstance(Locale::getUS(), ec);
1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (cal == NULL || U_FAILURE(ec)) {
1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Calendar::createInstance failed with " +
1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              u_errorName(ec));
1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Parse the date */
1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->clear();
1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str = UnicodeString("4/5/2001", "");
1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pos.setIndex(0);
1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    date->parse(str, *cal, pos);
1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pos.getIndex() != str.length()) {
1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: DateFormat::parse(4/5/2001) failed at " +
1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              pos.getIndex());
1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Parse the time */
1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str = UnicodeString("5:45 PM", "");
1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pos.setIndex(0);
1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    time->parse(str, *cal, pos);
1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pos.getIndex() != str.length()) {
1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: DateFormat::parse(17:45) failed at " +
1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              pos.getIndex());
1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Check result */
1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    when = cal->getTime(ec);
1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: cal->getTime() failed with " + u_errorName(ec));
1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.truncate(0);
1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(when, str);
1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Thursday, April 5, 2001 5:45:00 PM PDT 986517900000
1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (when == 986517900000.0) {
1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("Ok: Parsed result: " + str);
1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Parsed result: " + str + ", exp 4/5/2001 5:45 PM");
1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FAIL:
1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete date;
1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete time;
1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test DateFormat's parsing of space characters.  See jitterbug 1916.
1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestSpaceParsing() {
1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // pattern, input, expected parse or NULL if expect parse failure
1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM d yy", " 04 05 06",  NULL, // MMMM wants Apr/April
1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,        "04 05 06",   NULL,
1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MM d yy",   " 04 05 06",  "2006 04 05 00:00:00",
1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,        "04 05 06",   "2006 04 05 00:00:00",
1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM d yy", " Apr 05 06", "2006 04 05 00:00:00",
1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,        "Apr 05 06",  "2006 04 05 00:00:00",
1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectParse(DATA, DATA_len, Locale("en"));
1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test handling of "HHmmss" pattern.
1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestExactCountFormat() {
1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // pattern, input, expected parse or NULL if expect parse failure
1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "HHmmss", "123456", "1970 01 01 12:34:56",
1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "12345",  "1970 01 01 01:23:45",
1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "1234",   NULL,
1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "00-05",  NULL,
1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "12-34",  NULL,
1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "00+05",  NULL,
1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ahhmm",  "PM730",  "1970 01 01 19:30:00",
1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectParse(DATA, DATA_len, Locale("en"));
1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test handling of white space.
1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestWhiteSpaceParsing() {
1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd",
1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // pattern, input, expected parse or null if expect parse failure
1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Pattern space run should parse input text space run
1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MM   d yy",   " 04 01 03",    "2003 04 01",
1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,          " 04  01   03 ", "2003 04 01",
1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectParse(DATA, DATA_len, Locale("en"));
1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestInvalidPattern() {
1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat f(UnicodeString("Yesterday"), ec);
1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(ec);
1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString out;
1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos;
1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    f.format((UDate)0, out, pos);
1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(out);
1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // The bug is that the call to format() will crash.  By not
1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // crashing, the test passes.
1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGreekMay() {
1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date = -9896080848000.0;
1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("EEEE, dd MMMM yyyy h:mm:ss a", Locale("el", "", ""), ec);
1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!assertSuccess("SimpleDateFormat::ct", ec)) return;
1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(date, str);
1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos(0);
1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d2 = fmt.parse(str, pos);
1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (date != d2) {
1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: unable to parse strings where case-folding changes length");
1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestStandAloneMonths()
1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1263b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1264b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy LLLL dd H:mm:ss", "F",  "2004 03 10 16:36:31", "2004 March 10 16:36:31",
1266b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 01 01 0:00:00", "January",   "1970 01 01 0:00:00",
1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 02 01 0:00:00", "February",  "1970 02 01 0:00:00",
1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 03 01 0:00:00", "March",     "1970 03 01 0:00:00",
1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 04 01 0:00:00", "April",     "1970 04 01 0:00:00",
1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 05 01 0:00:00", "May",       "1970 05 01 0:00:00",
1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 06 01 0:00:00", "June",      "1970 06 01 0:00:00",
1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 07 01 0:00:00", "July",      "1970 07 01 0:00:00",
1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 08 01 0:00:00", "August",    "1970 08 01 0:00:00",
1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 09 01 0:00:00", "September", "1970 09 01 0:00:00",
1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 10 01 0:00:00", "October",   "1970 10 01 0:00:00",
1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 11 01 0:00:00", "November",  "1970 11 01 0:00:00",
1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 12 01 0:00:00", "December",  "1970 12 01 0:00:00",
1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 01 01 0:00:00", "Jan", "1970 01 01 0:00:00",
1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 02 01 0:00:00", "Feb", "1970 02 01 0:00:00",
1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 03 01 0:00:00", "Mar", "1970 03 01 0:00:00",
1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 04 01 0:00:00", "Apr", "1970 04 01 0:00:00",
1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 05 01 0:00:00", "May", "1970 05 01 0:00:00",
1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 06 01 0:00:00", "Jun", "1970 06 01 0:00:00",
1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 07 01 0:00:00", "Jul", "1970 07 01 0:00:00",
1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 08 01 0:00:00", "Aug", "1970 08 01 0:00:00",
1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 09 01 0:00:00", "Sep", "1970 09 01 0:00:00",
1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 10 01 0:00:00", "Oct", "1970 10 01 0:00:00",
1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 11 01 0:00:00", "Nov", "1970 11 01 0:00:00",
1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 12 01 0:00:00", "Dec", "1970 12 01 0:00:00",
1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *CS_DATA[] = {
1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1298b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1299b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1300b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy LLLL dd H:mm:ss", "F",  "2004 04 10 16:36:31", "2004 duben 10 16:36:31",
1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MMMM dd H:mm:ss", "F",  "2004 04 10 16:36:31", "2004 dubna 10 16:36:31",
1303b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1304b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 01 01 0:00:00", "leden",               "1970 01 01 0:00:00",
1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 02 01 0:00:00", "\\u00FAnor",           "1970 02 01 0:00:00",
1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 03 01 0:00:00", "b\\u0159ezen",         "1970 03 01 0:00:00",
1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 04 01 0:00:00", "duben",               "1970 04 01 0:00:00",
1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 05 01 0:00:00", "kv\\u011Bten",         "1970 05 01 0:00:00",
1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 06 01 0:00:00", "\\u010Derven",         "1970 06 01 0:00:00",
1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 07 01 0:00:00", "\\u010Dervenec",       "1970 07 01 0:00:00",
1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 08 01 0:00:00", "srpen",               "1970 08 01 0:00:00",
1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 09 01 0:00:00", "z\\u00E1\\u0159\\u00ED", "1970 09 01 0:00:00",
1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 10 01 0:00:00", "\\u0159\\u00EDjen",     "1970 10 01 0:00:00",
1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 11 01 0:00:00", "listopad",            "1970 11 01 0:00:00",
1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 12 01 0:00:00", "prosinec",            "1970 12 01 0:00:00",
1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 01 01 0:00:00", "1.",  "1970 01 01 0:00:00",
1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 02 01 0:00:00", "2.",  "1970 02 01 0:00:00",
1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 03 01 0:00:00", "3.",  "1970 03 01 0:00:00",
1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 04 01 0:00:00", "4.",  "1970 04 01 0:00:00",
1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 05 01 0:00:00", "5.",  "1970 05 01 0:00:00",
1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 06 01 0:00:00", "6.",  "1970 06 01 0:00:00",
1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 07 01 0:00:00", "7.",  "1970 07 01 0:00:00",
1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 08 01 0:00:00", "8.",  "1970 08 01 0:00:00",
1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 09 01 0:00:00", "9.",  "1970 09 01 0:00:00",
1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 10 01 0:00:00", "10.", "1970 10 01 0:00:00",
1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 11 01 0:00:00", "11.", "1970 11 01 0:00:00",
1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 12 01 0:00:00", "12.", "1970 12 01 0:00:00",
1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestStandAloneDays()
1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 04 0:00:00", "Sunday",    "1970 01 04 0:00:00",
1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 05 0:00:00", "Monday",    "1970 01 05 0:00:00",
1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 06 0:00:00", "Tuesday",   "1970 01 06 0:00:00",
1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 07 0:00:00", "Wednesday", "1970 01 07 0:00:00",
1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 01 0:00:00", "Thursday",  "1970 01 01 0:00:00",
1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 02 0:00:00", "Friday",    "1970 01 02 0:00:00",
1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 03 0:00:00", "Saturday",  "1970 01 03 0:00:00",
1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 04 0:00:00", "Sun", "1970 01 04 0:00:00",
1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 05 0:00:00", "Mon", "1970 01 05 0:00:00",
1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 06 0:00:00", "Tue", "1970 01 06 0:00:00",
1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 07 0:00:00", "Wed", "1970 01 07 0:00:00",
1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 01 0:00:00", "Thu", "1970 01 01 0:00:00",
1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 02 0:00:00", "Fri", "1970 01 02 0:00:00",
1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 03 0:00:00", "Sat", "1970 01 03 0:00:00",
1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *CS_DATA[] = {
1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 04 0:00:00", "ned\\u011Ble",       "1970 01 04 0:00:00",
1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 05 0:00:00", "pond\\u011Bl\\u00ED", "1970 01 05 0:00:00",
1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 06 0:00:00", "\\u00FAter\\u00FD",   "1970 01 06 0:00:00",
1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 07 0:00:00", "st\\u0159eda",       "1970 01 07 0:00:00",
1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 01 0:00:00", "\\u010Dtvrtek",      "1970 01 01 0:00:00",
1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 02 0:00:00", "p\\u00E1tek",        "1970 01 02 0:00:00",
1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 03 0:00:00", "sobota",            "1970 01 03 0:00:00",
1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 04 0:00:00", "ne",      "1970 01 04 0:00:00",
1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 05 0:00:00", "po",      "1970 01 05 0:00:00",
1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 06 0:00:00", "\\u00FAt", "1970 01 06 0:00:00",
1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 07 0:00:00", "st",      "1970 01 07 0:00:00",
1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 01 0:00:00", "\\u010Dt", "1970 01 01 0:00:00",
1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 02 0:00:00", "p\\u00E1", "1970 01 02 0:00:00",
1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 03 0:00:00", "so",      "1970 01 03 0:00:00",
1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestNarrowNames()
1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MM dd HH:mm:ss",
1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MMMMM dd H:mm:ss", "2004 03 10 16:36:31", "2004 M 10 16:36:31",
1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy LLLLL dd H:mm:ss",  "2004 03 10 16:36:31", "2004 M 10 16:36:31",
1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 01 01 0:00:00", "J",
1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 02 01 0:00:00", "F",
1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 03 01 0:00:00", "M",
1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 04 01 0:00:00", "A",
1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 05 01 0:00:00", "M",
1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 06 01 0:00:00", "J",
1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 07 01 0:00:00", "J",
1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 08 01 0:00:00", "A",
1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 09 01 0:00:00", "S",
1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 10 01 0:00:00", "O",
1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 11 01 0:00:00", "N",
1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 12 01 0:00:00", "D",
1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 01 01 0:00:00", "J",
1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 02 01 0:00:00", "F",
1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 03 01 0:00:00", "M",
1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 04 01 0:00:00", "A",
1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 05 01 0:00:00", "M",
1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 06 01 0:00:00", "J",
1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 07 01 0:00:00", "J",
1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 08 01 0:00:00", "A",
1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 09 01 0:00:00", "S",
1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 10 01 0:00:00", "O",
1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 11 01 0:00:00", "N",
1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 12 01 0:00:00", "D",
1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 04 0:00:00", "S",
1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 05 0:00:00", "M",
1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 06 0:00:00", "T",
1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 07 0:00:00", "W",
1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 01 0:00:00", "T",
1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 02 0:00:00", "F",
1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 03 0:00:00", "S",
1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 04 0:00:00", "S",
1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 05 0:00:00", "M",
1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 06 0:00:00", "T",
1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 07 0:00:00", "W",
1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 01 0:00:00", "T",
1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 02 0:00:00", "F",
1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 03 0:00:00", "S",
1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char *CS_DATA[] = {
1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MM dd HH:mm:ss",
1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy LLLLL dd H:mm:ss", "2004 04 10 16:36:31", "2004 d 10 16:36:31",
1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MMMMM dd H:mm:ss", "2004 04 10 16:36:31", "2004 d 10 16:36:31",
1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 01 01 0:00:00", "l",
1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 02 01 0:00:00", "\\u00FA",
1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 03 01 0:00:00", "b",
1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 04 01 0:00:00", "d",
1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 05 01 0:00:00", "k",
1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 06 01 0:00:00", "\\u010D",
1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 07 01 0:00:00", "\\u010D",
1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 08 01 0:00:00", "s",
1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 09 01 0:00:00", "z",
1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 10 01 0:00:00", "\\u0159",
1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 11 01 0:00:00", "l",
1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 12 01 0:00:00", "p",
1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 01 01 0:00:00", "l",
1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 02 01 0:00:00", "\\u00FA",
1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 03 01 0:00:00", "b",
1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 04 01 0:00:00", "d",
1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 05 01 0:00:00", "k",
1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 06 01 0:00:00", "\\u010D",
1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 07 01 0:00:00", "\\u010D",
1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 08 01 0:00:00", "s",
1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 09 01 0:00:00", "z",
1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 10 01 0:00:00", "\\u0159",
1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 11 01 0:00:00", "l",
1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 12 01 0:00:00", "p",
1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 04 0:00:00", "N",
1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 05 0:00:00", "P",
1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 06 0:00:00", "\\u00DA",
1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 07 0:00:00", "S",
1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 01 0:00:00", "\\u010C",
1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 02 0:00:00", "P",
1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 03 0:00:00", "S",
1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 04 0:00:00", "N",
1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 05 0:00:00", "P",
1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 06 0:00:00", "\\u00DA",
1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 07 0:00:00", "S",
1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 01 0:00:00", "\\u010C",
1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 02 0:00:00", "P",
1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 03 0:00:00", "S",
1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      expectFormat(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      expectFormat(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestEras()
1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd",
1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy G",    "fp", "1951 07 17", "July 17 1951 AD",          "1951 07 17",
1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GG",   "fp", "1951 07 17", "July 17 1951 AD",          "1951 07 17",
1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGG",  "fp", "1951 07 17", "July 17 1951 AD",          "1951 07 17",
1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGGG", "fp", "1951 07 17", "July 17 1951 Anno Domini", "1951 07 17",
1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy G",    "fp", "-438 07 17", "July 17 0439 BC",            "-438 07 17",
1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GG",   "fp", "-438 07 17", "July 17 0439 BC",            "-438 07 17",
1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGG",  "fp", "-438 07 17", "July 17 0439 BC",            "-438 07 17",
1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGGG", "fp", "-438 07 17", "July 17 0439 Before Christ", "-438 07 17",
1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestQuarters()
1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd",
1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Q",    "fp", "1970 01 01", "1",           "1970 01 01",
1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "QQ",   "fp", "1970 04 01", "02",          "1970 04 01",
1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "QQQ",  "fp", "1970 07 01", "Q3",          "1970 07 01",
1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "QQQQ", "fp", "1970 10 01", "4th quarter", "1970 10 01",
1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "q",    "fp", "1970 01 01", "1",           "1970 01 01",
1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "qq",   "fp", "1970 04 01", "02",          "1970 04 01",
1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "qqq",  "fp", "1970 07 01", "Q3",          "1970 07 01",
1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "qqqq", "fp", "1970 10 01", "4th quarter", "1970 10 01",
1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test parsing.  Input is an array that starts with the following
1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * header:
1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [0]   = pattern string to parse [i+2] with
1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * followed by test cases, each of which is 3 array elements:
1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i]   = pattern, or NULL to reuse prior pattern
1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+1] = input string
1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+2] = expected parse result (parsed with pattern [0])
1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If expect parse failure, then [i+2] should be NULL.
1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::expectParse(const char** data, int32_t data_length,
1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 const Locale& loc) {
1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UDate FAIL = (UDate) -1;
1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UnicodeString FAIL_STR("parse failure");
1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = 0;
1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("", loc, ec);
1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat ref(data[i++], loc, ec);
1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat gotfmt("G yyyy MM dd HH:mm:ss z", loc, ec);
1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
155085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errcheckln(ec, "FAIL: SimpleDateFormat constructor - %s", u_errorName(ec));
1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* currentPat = NULL;
1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (i<data_length) {
1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pattern  = data[i++];
1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* input    = data[i++];
1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* expected = data[i++];
1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ec = U_ZERO_ERROR;
1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pattern != NULL) {
1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.applyPattern(pattern);
1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            currentPat = pattern;
1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate got = fmt.parse(input, ec);
1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString gotstr(FAIL_STR);
1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(ec)) {
1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            got = FAIL;
1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            gotstr.remove();
1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            gotfmt.format(got, gotstr);
1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode ec2 = U_ZERO_ERROR;
1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate exp = FAIL;
1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString expstr(FAIL_STR);
1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (expected != NULL) {
1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            expstr = expected;
1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            exp = ref.parse(expstr, ec2);
1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(ec2)) {
1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // This only happens if expected is in wrong format --
1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // should never happen once test is debugged.
1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln("FAIL: Internal test error");
1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                return;
1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (got == exp) {
1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"Ok: " + input + " x " +
1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  currentPat + " => " + gotstr);
1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: " + input + " x " +
1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  currentPat + " => " + gotstr + ", expected " +
1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  expstr);
1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test formatting and parsing.  Input is an array that starts
1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with the following header:
1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [0]   = pattern string to parse [i+2] with
1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * followed by test cases, each of which is 3 array elements:
1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i]   = pattern, or null to reuse prior pattern
1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+1] = control string, either "fp", "pf", or "F".
1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+2..] = data strings
1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The number of data strings depends on the control string.
1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Examples:
1613b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'f': Format date [i+2] (as parsed using pattern [0]) and expect string [i+3].
1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'p': Parse string [i+3] and expect date [i+4].
1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1617b13da9df870a61b11249bf741347908dbea0edd8Jean-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"
1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'F': Format date [i+2] and expect string [i+3],
1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      then parse string [i+3] and expect date [i+2].
1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1621b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'p': Parse string [i+2] and expect date [i+3].
1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'f': Format date [i+3] and expect string [i+4].
1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::expect(const char** data, int32_t data_length,
1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            const Locale& loc) {
1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = 0;
1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str, str2;
1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("", loc, ec);
1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat ref(data[i++], loc, ec);
1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat univ("EE G yyyy MM dd HH:mm:ss.SSS z", loc, ec);
1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!assertSuccess("construct SimpleDateFormat", ec)) return;
1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString currentPat;
1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (i<data_length) {
1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pattern  = data[i++];
1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pattern != NULL) {
1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.applyPattern(pattern);
1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            currentPat = pattern;
1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* control = data[i++];
1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (uprv_strcmp(control, "fp") == 0) {
1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'f'
1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* datestr = data[i++];
1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* string = data[i++];
1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate date = ref.parse(ctou(datestr), ec);
1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(string),
1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         fmt.format(date, str.remove()));
1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'p'
1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            datestr = data[i++];
1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            date = ref.parse(ctou(datestr), ec);
1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate parsedate = fmt.parse(ctou(string), ec);
1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(date, str.remove()),
1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(parsedate, str2.remove()));
1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else if (uprv_strcmp(control, "pf") == 0) {
1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'p'
1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* string = data[i++];
1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* datestr = data[i++];
1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate date = ref.parse(ctou(datestr), ec);
1671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate parsedate = fmt.parse(ctou(string), ec);
1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
1675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(date, str.remove()),
1676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(parsedate, str2.remove()));
1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'f'
1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            string = data[i++];
1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(string),
1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         fmt.format(date, str.remove()));
1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else if (uprv_strcmp(control, "F") == 0) {
1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* datestr  = data[i++];
1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* string   = data[i++];
1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate date = ref.parse(ctou(datestr), ec);
1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(string),
1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         fmt.format(date, str.remove()));
1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate parsedate = fmt.parse(string, ec);
1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(date, str.remove()),
1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(parsedate, str2.remove()));
1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: Invalid control string " + control);
1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test formatting.  Input is an array that starts
1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with the following header:
1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [0]   = pattern string to parse [i+2] with
1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * followed by test cases, each of which is 3 array elements:
1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i]   = pattern, or null to reuse prior pattern
1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+1] = data string a
1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+2] = data string b
1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Examples:
1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Format date [i+1] and expect string [i+2].
1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "y/M/d H:mm:ss.SSSS", "2004/3/10 16:36:31.5679", "2004 03 10 16:36:31.567"
1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::expectFormat(const char** data, int32_t data_length,
1727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            const Locale& loc) {
1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = 0;
1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str, str2;
1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("", loc, ec);
1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat ref(data[i++], loc, ec);
1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat univ("EE G yyyy MM dd HH:mm:ss.SSS z", loc, ec);
1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!assertSuccess("construct SimpleDateFormat", ec)) return;
1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString currentPat;
1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (i<data_length) {
1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pattern  = data[i++];
1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pattern != NULL) {
1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.applyPattern(pattern);
1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            currentPat = pattern;
1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* datestr = data[i++];
1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* string = data[i++];
1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate date = ref.parse(ctou(datestr), ec);
1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!assertSuccess("parse", ec)) return;
1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        ctou(string),
1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        fmt.format(date, str.remove()));
1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGenericTime() {
1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // any zone pattern should parse any zone
1757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const Locale en("en");
1758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char* ZDATA[] = {
1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm zzz",
1760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // round trip
1761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Standard Time",
1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm vvvv", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
1764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm v", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PT",
1765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // non-generic timezone string influences dst offset even if wrong for date/time
1766b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1767b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1768b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1769b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // generic timezone generates dst offset appropriate for local time
1771b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1772b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1773b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1774b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // daylight savings time transition edge cases.
1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // time to parse does not really exist, PT interpreted as earlier time
1777b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1778b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1779b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1780b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1781b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1782b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm", "pf", "2005/4/3 2:30", "2005 04 03 03:30 PDT", "2005/4/3 3:30",
1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // time to parse is ambiguous, PT interpreted as later time
1785b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1786b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1787b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1789b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1790b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1791b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1792b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1793b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1794b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm", "pf", "2004/10/31 1:30", "2004 10 31 01:30 PST", "2004/10/31 1:30",
1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
1797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const int32_t ZDATA_length = sizeof(ZDATA)/ sizeof(ZDATA[0]);
1798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  expect(ZDATA, ZDATA_length, en);
1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode status = U_ZERO_ERROR;
1801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  logln("cross format/parse tests");
1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString basepat("yy/MM/dd H:mm ");
1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  SimpleDateFormat formats[] = {
1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "vvv", en, status),
1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "vvvv", en, status),
1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "zzz", en, status),
1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "zzzz", en, status)
1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ASSERT_OK(status);
1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const int32_t formats_length = sizeof(formats)/sizeof(formats[0]);
1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString test;
1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  SimpleDateFormat univ("yyyy MM dd HH:mm zzz", en, status);
1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ASSERT_OK(status);
1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const UnicodeString times[] = {
1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "2004 01 02 03:04 PST",
1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "2004 07 08 09:10 PDT"
1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  int32_t times_length = sizeof(times)/sizeof(times[0]);
1821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  for (int i = 0; i < times_length; ++i) {
1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = univ.parse(times[i], status);
1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("\ntime: ") + d);
1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int j = 0; j < formats_length; ++j) {
1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      test.remove();
1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      formats[j].format(d, test);
1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      logln("\ntest: '" + test + "'");
1828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      for (int k = 0; k < formats_length; ++k) {
1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate t = formats[k].parse(test, status);
1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_SUCCESS(status)) {
1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          if (d != t) {
1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: format " + k +
1833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " incorrectly parsed output of format " + j +
1834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " (" + test + "), returned " +
1835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  dateToString(t) + " instead of " + dateToString(d));
1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          } else {
1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"OK: format " + k + " parsed ok");
1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          }
1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (status == U_PARSE_ERROR) {
1840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          errln((UnicodeString)"FAIL: format " + k +
1841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                " could not parse output of format " + j +
1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                " (" + test + ")");
1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
1847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGenericTimeZoneOrder() {
1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // generic times should parse the same no matter what the placement of the time zone string
1851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // should work for standard and daylight times
1852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char* XDATA[] = {
1854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "yyyy MM dd HH:mm zzz",
1855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // standard time, explicit daylight/standard
1856b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1857b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1858b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // standard time, generic
1861b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1862b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1863b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // dahylight time, explicit daylight/standard
1866b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1867b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1868b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // daylight time, generic
1871b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1872b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1873b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const int32_t XDATA_length = sizeof(XDATA)/sizeof(XDATA[0]);
1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  Locale en("en");
1877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  expect(XDATA, XDATA_length, en);
1878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestZTimeZoneParsing(void) {
1881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const Locale en("en");
1883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString test;
1884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //SimpleDateFormat univ("yyyy-MM-dd'T'HH:mm Z", en, status);
1885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat univ("HH:mm Z", en, status);
1886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const TimeZone *t = TimeZone::getGMT();
1887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    univ.setTimeZone(*t);
1888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    univ.setLenient(false);
1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pp(0);
1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    struct {
1893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString input;
1894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString expected_result;
1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } tests[] = {
1896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 -0200", "13:00 +0000" },
1897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 +0200", "09:00 +0000" },
1898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 +0400", "07:00 +0000" },
1899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 +0530", "05:30 +0000" }
1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result;
1903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t tests_length = sizeof(tests)/sizeof(tests[0]);
1904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int i = 0; i < tests_length; ++i) {
1905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        pp.setIndex(0);
1906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d = univ.parse(tests[i].input, pp);
1907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(pp.getIndex() != tests[i].input.length()){
1908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("setZoneString() did not succeed. Consumed: %i instead of %i",
1909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  pp.getIndex(), tests[i].input.length());
1910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        result.remove();
1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        univ.format(d, result);
1914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(result != tests[i].expected_result) {
1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("Expected " + tests[i].expected_result
1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  + " got " + result);
1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("SUCCESS: Parsed " + tests[i].input
1920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              + " got " + result
1921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              + " expected " + tests[i].expected_result);
1922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestHost(void)
1926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef U_WINDOWS
1928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Win32DateTimeTest::testLocales(this);
1929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
1930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Relative Date Tests
1933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelative(int daysdelta,
1935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  const Locale& loc,
1936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  const char *expectChars) {
1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char banner[25];
1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sprintf(banner, "%d", daysdelta);
1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString bannerStr(banner, "");
1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos(0);
1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString test;
1945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale en("en");
1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *fullrelative = DateFormat::createDateInstance(DateFormat::kFullRelative, loc);
1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (fullrelative == NULL) {
194985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("DateFormat::createDateInstance(DateFormat::kFullRelative, %s) returned NULL", loc.getName());
1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full         = DateFormat::createDateInstance(DateFormat::kFull        , loc);
1954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("DateFormat::createDateInstance(DateFormat::kFull, %s) returned NULL", loc.getName());
1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *en_full =         DateFormat::createDateInstance(DateFormat::kFull,         en);
1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (en_full == NULL) {
1963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("DateFormat::createDateInstance(DateFormat::kFull, en) returned NULL");
1964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *en_fulltime =         DateFormat::createDateTimeInstance(DateFormat::kFull,DateFormat::kFull,en);
1968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (en_fulltime == NULL) {
1970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, en) returned NULL");
1971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result;
1975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString normalResult;
1976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString expect;
1977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString parseResult;
1978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *c = Calendar::createInstance(status);
1980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Today = Today
1982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->setTime(Calendar::getNow(), status);
1983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(daysdelta != 0) {
1984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        c->add(Calendar::DATE,daysdelta,status);
1985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
1987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // calculate the expected string
1989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(expectChars != NULL) {
1990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect = expectChars;
1991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
1992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        full->format(*c, expect, pos); // expected = normal full
1993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullrelative   ->format(*c, result, pos);
1996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    en_full        ->format(*c, normalResult, pos);
1997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(result != expect) {
1999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Relative Format ["+bannerStr+"] of "+normalResult+" failed, expected "+expect+" but got " + result);
2000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("PASS: Relative Format ["+bannerStr+"] of "+normalResult+" got " + result);
2002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //verify
2006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = fullrelative->parse(result, status);
2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString parseFormat; // parse rel->format full
2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    en_full->format(d, parseFormat, status);
2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString origFormat;
2013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    en_full->format(*c, origFormat, pos);
2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(parseFormat!=origFormat) {
2016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Relative Parse ["+bannerStr+"] of "+result+" failed, expected "+parseFormat+" but got "+origFormat);
2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("PASS: Relative Parse ["+bannerStr+"] of "+result+" passed, got "+parseFormat);
2019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullrelative;
2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete en_fulltime;
2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete en_full;
2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete c;
2026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelative(void)
2030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale en("en");
2032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 0, en, "Today");
2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative(-1, en, "Yesterday");
2034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 1, en, "Tomorrow");
2035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 2, en, NULL);
2036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( -2, en, NULL);
2037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 3, en, NULL);
2038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( -3, en, NULL);
2039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 300, en, NULL);
2040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( -300, en, NULL);
2041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelativeClone(void)
2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
2046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Verify that a cloned formatter gives the same results
2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    and is useable after the original has been deleted.
2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
2049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc("en");
2051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate now = Calendar::getNow();
2052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full = DateFormat::createDateInstance(DateFormat::kFullRelative, loc);
2053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
205485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("FAIL: Can't create Relative date instance");
2055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result1;
2058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(now, result1, status);
2059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Format *fullClone = full->clone();
2060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = NULL;
2062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result2;
2064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullClone->format(now, result2, status);
2065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
2066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result1 != result2) {
2067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Clone returned different result from non-clone.");
2068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullClone;
2070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestHostClone(void)
2073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
2075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Verify that a cloned formatter gives the same results
2076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    and is useable after the original has been deleted.
2077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
2078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // This is mainly important on Windows.
2079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc("en_US@compat=host");
2081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate now = Calendar::getNow();
2082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full = DateFormat::createDateInstance(DateFormat::kFull, loc);
2083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
208485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("FAIL: Can't create Relative date instance");
2085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result1;
2088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(now, result1, status);
2089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Format *fullClone = full->clone();
2090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = NULL;
2092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result2;
2094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullClone->format(now, result2, status);
2095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
2096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result1 != result2) {
2097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Clone returned different result from non-clone.");
2098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullClone;
2100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestTimeZoneDisplayName()
2103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // This test data was ported from ICU4J.  Don't know why the 6th column in there because it's not being
2105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // used currently.
2106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *fallbackTests[][6]  = {
2107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
2109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "PST", "America/Los_Angeles" },
2110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "V", "PST", "America/Los_Angeles" },
2111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "Pacific Standard Time", "America/Los_Angeles" },
2112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "PDT", "America/Los_Angeles" },
2115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "V", "PDT", "America/Los_Angeles" },
2116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "Pacific Daylight Time", "America/Los_Angeles" },
2117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "PT", "America/Los_Angeles" },
2118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "Pacific Time", "America/Los_Angeles" },
2119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "VVVV", "United States (Los Angeles)", "America/Los_Angeles" },
2120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en_GB", "America/Los_Angeles", "2004-01-15T12:00:00Z", "z", "PST", "America/Los_Angeles" },
2121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "Z", "-0700", "-7:00" },
2122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "z", "MST", "America/Phoenix" },
2124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "V", "MST", "America/Phoenix" },
2125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "zzzz", "Mountain Standard Time", "America/Phoenix" },
2126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "z", "MST", "America/Phoenix" },
2129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "V", "MST", "America/Phoenix" },
2130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "zzzz", "Mountain Standard Time", "America/Phoenix" },
2131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "v", "MST", "America/Phoenix" },
2132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "vvvv", "Mountain Standard Time", "America/Phoenix" },
2133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "VVVV", "United States (Phoenix)", "America/Phoenix" },
2134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "V", "ART", "-3:00" },
2139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentina Time", "-3:00" },
2140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "V", "ART", "-3:00" },
2144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentina Time", "-3:00" },
2145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Argentina (Buenos Aires)", "America/Buenos_Aires" },
2146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentina Time", "America/Buenos_Aires" },
2147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "VVVV", "Argentina (Buenos Aires)", "America/Buenos_Aires" },
2148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "V", "ART", "-3:00" },
2153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentina Time", "-3:00" },
2154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "V", "ART", "-3:00" },
2158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentina Time", "-3:00" },
2159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Argentina (Buenos Aires)", "America/Buenos_Aires" },
2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentina Time", "America/Buenos_Aires" },
2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "VVVV", "Argentina (Buenos Aires)", "America/Buenos_Aires" },
2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
2165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-05:00", "-5:00" },
2166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "V", "CST (Cuba)", "-5:00" },
2167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "Cuba Standard Time", "-5:00" },
2168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
2170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-04:00", "-4:00" },
2171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "V", "CDT (Cuba)", "-4:00" },
2172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "Cuba Daylight Time", "-4:00" },
2173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "v", "Cuba Time", "America/Havana" },
2174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "Cuba Time", "America/Havana" },
2175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "VVVV", "Cuba Time", "America/Havana" },
2176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "V", "AEDT", "+11:00" },
2181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "Australian Eastern Daylight Time", "+11:00" },
2182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "V", "AEST", "+10:00" },
2186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "Australian Eastern Standard Time", "+10:00" },
2187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "Australia (Sydney)", "Australia/Sydney" },
2188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "Eastern Australia Time", "Australia/Sydney" },
2189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "VVVV", "Australia (Sydney)", "Australia/Sydney" },
2190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "V", "AEDT", "+11:00" },
2195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "Australian Eastern Daylight Time", "+11:00" },
2196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "V", "AEST", "+10:00" },
2200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "Australian Eastern Standard Time", "+10:00" },
2201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "Australia (Sydney)", "Australia/Sydney" },
2202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "Eastern Australia Time", "Australia/Sydney" },
2203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "VVVV", "Australia (Sydney)", "Australia/Sydney" },
2204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+00:00", "+0:00" },
2207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
2208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "V", "GMT", "+0:00" },
2209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "Greenwich Mean Time", "+0:00" },
2210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
2212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+01:00", "Europe/London" },
2213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "V", "BST", "Europe/London" },
2214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "British Summer Time", "Europe/London" },
2215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu en.txt has exemplar city for this time zone
2216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "v", "United Kingdom Time", "Europe/London" },
2217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "United Kingdom Time", "Europe/London" },
2218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "United Kingdom Time", "Europe/London" },
2219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-03:00", "-3:00" },
2229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+05:30", "+5:30" },
2235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "V", "IST", "+5:30" },
2236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "India Standard Time", "+5:30" },
2237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+05:30", "+05:30" },
2240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "V", "IST", "+05:30" },
2241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "India Standard Time", "+5:30" },
2242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "India Time", "Asia/Calcutta" },
2243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "India Standard Time", "Asia/Calcutta" },
2244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
2249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-08:00", "-8:00" },
2250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "GMT-08:00", "-8:00" },
2251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-07:00", "-7:00" },
2254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "GMT-07:00", "-7:00" },
2255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "Vereinigte Staaten (Los Angeles)", "America/Los_Angeles" },
2256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "Vereinigte Staaten (Los Angeles)", "America/Los_Angeles" },
2257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Argentinien (Buenos Aires)", "America/Buenos_Aires" },
2267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentinien (Buenos Aires)", "America/Buenos_Aires" },
2268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Argentinien (Buenos Aires)", "America/Buenos_Aires" },
2278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentinien (Buenos Aires)", "America/Buenos_Aires" },
2279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
2282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-05:00", "-5:00" },
2283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-05:00", "-5:00" },
2284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
2286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-04:00", "-4:00" },
2287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-04:00", "-4:00" },
2288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "v", "Kuba", "America/Havana" },
2289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "Kuba", "America/Havana" },
2290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // added to test proper fallback of country name
2291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de_CH", "America/Havana", "2004-07-15T00:00:00Z", "v", "Kuba", "America/Havana" },
2292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de_CH", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "Kuba", "America/Havana" },
2293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
2298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
2302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "Australien (Sydney)", "Australia/Sydney" },
2303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "Australien (Sydney)", "Australia/Sydney" },
2304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
2309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
2313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "Australien (Sydney)", "Australia/Sydney" },
2314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "Australien (Sydney)", "Australia/Sydney" },
2315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+00:00", "+0:00" },
2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT+00:00", "+0:00" },
2319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "GMT+00:00", "+0:00" },
2320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
2322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+01:00", "+1:00" },
2323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+01:00", "+1:00" },
2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "v", "Vereinigtes K\\u00f6nigreich", "Europe/London" },
2325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "Vereinigtes K\\u00f6nigreich", "Europe/London" },
2326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-03:00", "-3:00" },
2336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+05:30", "+5:30" },
2342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
2343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+05:30", "+05:30" },
2346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
2347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "Indien", "Asia/Calcutta" },
2348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "Indien", "Asia/Calcutta" },
2349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
235385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0800", "-8:00" },
235485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0800", "America/Los_Angeles" },
2355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u592a\\u5e73\\u6d0b\\u6807\\u51c6\\u65f6\\u95f4", "America/Los_Angeles" },
2356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
235785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0700", "-7:00" },
235885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0700", "America/Los_Angeles" },
2359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u592a\\u5e73\\u6d0b\\u590f\\u4ee4\\u65f6\\u95f4", "America/Los_Angeles" },
2360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu zh.txt has exemplar city for this time zone
2361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u7f8e\\u56fd (\\u6d1b\\u6749\\u77f6)", "America/Los_Angeles" },
236285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u7f8e\\u56fd\\u592a\\u5e73\\u6d0b\\u65f6\\u95f4", "America/Los_Angeles" },
2363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
236585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
236685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
236785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
2368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
236985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
237085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
237185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
2372b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
237385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "America/Buenos_Aires" },
2374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
237685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
237785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
237885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
2379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
238085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
238185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
238285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
2383b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
238485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "America/Buenos_Aires" },
2385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
238785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0500", "-5:00" },
238885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0500", "-5:00" },
238985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "\\u53e4\\u5df4\\u6807\\u51c6\\u65f6\\u95f4", "-5:00" },
2390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
239185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0400", "-4:00" },
239285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0400", "-4:00" },
239385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "\\u53e4\\u5df4\\u590f\\u4ee4\\u65f6\\u95f4", "-4:00" },
239485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u53e4\\u5df4\\u65f6\\u95f4", "America/Havana" },
239585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u53e4\\u5df4\\u65f6\\u95f4", "America/Havana" },
2396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
239885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1100", "+11:00" },
239985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1100", "+11:00" },
2400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u590f\\u4ee4\\u65f6\\u95f4", "+11:00" },
2401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
240285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1000", "+10:00" },
240385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1000", "+10:00" },
240485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u6807\\u51c6\\u65f6\\u95f4", "+10:00" },
2405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu zh.txt does not have info for this time zone
2406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u6fb3\\u5927\\u5229\\u4e9a (\\u6089\\u5c3c)", "Australia/Sydney" },
240785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u65f6\\u95f4", "Australia/Sydney" },
2408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
241085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1100", "+11:00" },
241185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1100", "+11:00" },
2412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u590f\\u4ee4\\u65f6\\u95f4", "+11:00" },
2413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
241485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1000", "+10:00" },
241585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1000", "+10:00" },
241685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u6807\\u51c6\\u65f6\\u95f4", "+10:00" },
2417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u6fb3\\u5927\\u5229\\u4e9a (\\u6089\\u5c3c)", "Australia/Sydney" },
241885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u65f6\\u95f4", "Australia/Sydney" },
2419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
242185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0000", "+0:00" },
242285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0000", "+0:00" },
2423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "V", "GMT", "+0:00" },
2424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u683C\\u6797\\u5C3C\\u6CBB\\u6807\\u51C6\\u65F6\\u95F4", "+0:00" },
2425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
242685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0100", "+1:00" },
242785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0100", "+1:00" },
2428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "V", "BST", "+1:00" },
242985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0100", "+1:00" },
243085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u82f1\\u56fd\\u65f6\\u95f4", "Europe/London" },
243185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u82f1\\u56fd\\u65f6\\u95f4", "Europe/London" },
243285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "\\u82f1\\u56fd\\u65f6\\u95f4", "Europe/London" },
2433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
243585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
243685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
243785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
2438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
243985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
244085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
244185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
244285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
244385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
2444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
244785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0530", "+5:30" },
244885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0530", "+5:30" },
244985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u5370\\u5ea6\\u6807\\u51c6\\u65f6\\u95f4", "+5:30" },
2450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
245185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0530", "+5:30" },
245285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0530", "+05:30" },
245385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u5370\\u5ea6\\u6807\\u51c6\\u65f6\\u95f4", "+5:30" },
245485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u5370\\u5ea6\\u65f6\\u95f4", "Asia/Calcutta" },
245585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u5370\\u5ea6\\u6807\\u51c6\\u65f6\\u95f4", "Asia/Calcutta" },
2456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u096e:\\u0966\\u0966", "-8:00" },
2461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u096e:\\u0966\\u0966", "-8:00" },
2462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u096e:\\u0966\\u0966", "-8:00" },
2463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u096d:\\u0966\\u0966", "-7:00" },
2465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u096d:\\u0966\\u0966", "-7:00" },
2466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u096d:\\u0966\\u0966", "-7:00" },
246785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u0938\\u0902\\u092f\\u0941\\u0915\\u094d\\u0924 \\u0930\\u093e\\u091c\\u094d\\u092f \\u0905\\u092e\\u0947\\u0930\\u093f\\u0915\\u093e (\\u0932\\u094b\\u0938 \\u090f\\u0902\\u091c\\u093f\\u0932\\u0947\\u0938)", "America/Los_Angeles" },
246885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u0938\\u0902\\u092f\\u0941\\u0915\\u094d\\u0924 \\u0930\\u093e\\u091c\\u094d\\u092f \\u0905\\u092e\\u0947\\u0930\\u093f\\u0915\\u093e (\\u0932\\u094b\\u0938 \\u090f\\u0902\\u091c\\u093f\\u0932\\u0947\\u0938)", "America/Los_Angeles" },
2469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
247885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0905\\u0930\\u094d\\u091c\\u0947\\u0928\\u094d\\u091f\\u0940\\u0928\\u093e (\\u092c\\u094d\\u092f\\u0942\\u0928\\u0938 \\u0906\\u092f\\u0930\\u0938)", "America/Buenos_Aires" },
247985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0905\\u0930\\u094d\\u091c\\u0947\\u0928\\u094d\\u091f\\u0940\\u0928\\u093e (\\u092c\\u094d\\u092f\\u0942\\u0928\\u0938 \\u0906\\u092f\\u0930\\u0938)", "America/Buenos_Aires" },
2480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
248985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0905\\u0930\\u094d\\u091c\\u0947\\u0928\\u094d\\u091f\\u0940\\u0928\\u093e (\\u092c\\u094d\\u092f\\u0942\\u0928\\u0938 \\u0906\\u092f\\u0930\\u0938)", "America/Buenos_Aires" },
249085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0905\\u0930\\u094d\\u091c\\u0947\\u0928\\u094d\\u091f\\u0940\\u0928\\u093e (\\u092c\\u094d\\u092f\\u0942\\u0928\\u0938 \\u0906\\u092f\\u0930\\u0938)", "America/Buenos_Aires" },
2491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u096b:\\u0966\\u0966", "-5:00" },
2494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u096b:\\u0966\\u0966", "-5:00" },
2495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u096b:\\u0966\\u0966", "-5:00" },
2496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u096a:\\u0966\\u0966", "-4:00" },
2498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u096a:\\u0966\\u0966", "-4:00" },
2499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u096a:\\u0966\\u0966", "-4:00" },
2500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u0915\\u094d\\u092f\\u0942\\u092c\\u093e", "America/Havana" },
2501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u0915\\u094d\\u092f\\u0942\\u092c\\u093e", "America/Havana" },
2502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
251185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u0911\\u0938\\u094d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e (\\u0938\\u093f\\u0921\\u0928\\u0940)", "Australia/Sydney" },
251285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u0911\\u0938\\u094d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e (\\u0938\\u093f\\u0921\\u0928\\u0940)", "Australia/Sydney" },
2513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
252285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u0911\\u0938\\u094d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e (\\u0938\\u093f\\u0921\\u0928\\u0940)", "Australia/Sydney" },
252385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u0911\\u0938\\u094d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e (\\u0938\\u093f\\u0921\\u0928\\u0940)", "Australia/Sydney" },
2524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+\\u0966\\u0966:\\u0966\\u0966", "+0:00" },
2527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT+\\u0966\\u0966:\\u0966\\u0966", "+0:00" },
2528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "GMT+\\u0966\\u0966:\\u0966\\u0966", "+0:00" },
2529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+\\u0966\\u0967:\\u0966\\u0966", "+1:00" },
2531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+\\u0966\\u0967:\\u0966\\u0966", "+1:00" },
2532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+\\u0966\\u0967:\\u0966\\u0966", "+1:00" },
2533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u092C\\u094D\\u0930\\u093F\\u0924\\u0928", "Europe/London" },
2534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u092C\\u094D\\u0930\\u093F\\u0924\\u0928", "Europe/London" },
2535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+\\u0966\\u096B:\\u0969\\u0966", "+5:30" },
2549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "IST", "+5:30" },
2550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u0938\\u092E\\u092F", "+5:30" },
2551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+\\u0966\\u096B:\\u0969\\u0966", "+5:30" },
2553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "IST", "+05:30" },
2554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u0938\\u092E\\u092F", "+5:30" },
2555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "IST", "Asia/Calcutta" },
2556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u0938\\u092E\\u092F", "Asia/Calcutta" },
2557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
256185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0800", "-8:00" },
256285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0800", "America/Los_Angeles" },
2563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "V", "PST", "America/Los_Angeles" },
2564b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
256685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0700", "-7:00" },
256785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0700", "America/Los_Angeles" },
2568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "V", "PDT", "America/Los_Angeles" },
2569b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu bg.txt has exemplar city for this time zone
2571b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2572b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2573b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
257685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
257785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
257885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
258085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
258185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
258285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2583b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2584b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
258785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
258885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
258985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
259185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
259285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
259385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu bg.txt does not have info for this time zone
2595b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2596b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
259985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0500", "-5:00" },
260085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0500", "-5:00" },
260185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0500", "-5:00" },
2602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
260385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0400", "-4:00" },
260485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0400", "-4:00" },
260585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0400", "-4:00" },
2606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u041a\\u0443\\u0431\\u0430", "America/Havana" },
2607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u041a\\u0443\\u0431\\u0430", "America/Havana" },
2608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
261085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
261185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
261285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
2613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
261485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
261585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
261685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
2617b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2618b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
262185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
262285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
262385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
2624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
262585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
262685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
262785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
2628b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2629b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
263285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0000", "+0:00" },
263385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0000", "+0:00" },
2634b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
263685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0100", "+1:00" },
263785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0100", "+1:00" },
263885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0100", "+1:00" },
2639b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2640b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
264385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
264485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
264585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
264785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
264885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
264985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
265085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
265185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
265585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
265685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
265785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
2658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
265985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
266085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+05:30" },
266185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
2662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u0418\\u043D\\u0434\\u0438\\u044F", "Asia/Calcutta" },
2663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u0418\\u043D\\u0434\\u0438\\u044F", "Asia/Calcutta" },
2664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // ==========
2665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
266785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
266885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-08:00", "America/Los_Angeles" },
2669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "V", "PST", "America/Los_Angeles" },
267085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u30a2\\u30e1\\u30ea\\u30ab\\u592a\\u5e73\\u6d0b\\u6a19\\u6e96\\u6642", "America/Los_Angeles" },
267185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-700" },
267285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
267385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-07:00", "America/Los_Angeles" },
2674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "V", "PDT", "America/Los_Angeles" },
267585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u30a2\\u30e1\\u30ea\\u30ab\\u592a\\u5e73\\u6d0b\\u590f\\u6642\\u9593", "America/Los_Angeles" },
2676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu ja.txt has exemplar city for this time zone
2677b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
267885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u30A2\\u30E1\\u30EA\\u30AB\\u592A\\u5e73\\u6D0B\\u6642\\u9593", "America/Los_Angeles" },
2679b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
268285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
268385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
268485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
268685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
268785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
268885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu ja.txt does not have info for this time zone
269085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u30a2\\u30eb\\u30bc\\u30f3\\u30c1\\u30f3 (\\u30D6\\u30A8\\u30CE\\u30B9\\u30A2\\u30A4\\u30EC\\u30B9)", "America/Buenos_Aires" },
269185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u30a2\\u30eb\\u30bc\\u30f3\\u30c1\\u30f3\\u6642\\u9593", "America/Buenos_Aires" },
2692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
269485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
269585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
269685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
269885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
269985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
270085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
270185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u30a2\\u30eb\\u30bc\\u30f3\\u30c1\\u30f3 (\\u30D6\\u30A8\\u30CE\\u30B9\\u30A2\\u30A4\\u30EC\\u30B9)", "America/Buenos_Aires" },
270285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u30a2\\u30eb\\u30bc\\u30f3\\u30c1\\u30f3\\u6642\\u9593", "America/Buenos_Aires" },
2703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
270585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
270685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-05:00", "-5:00" },
270785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-05:00", "-5:00" },
2708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
270985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
271085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-04:00", "-4:00" },
271185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-04:00", "-4:00" },
2712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u30ad\\u30e5\\u30fc\\u30d0\\u6642\\u9593", "America/Havana" },
2713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u30ad\\u30e5\\u30fc\\u30d0\\u6642\\u9593", "America/Havana" },
2714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
271685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
271785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
271885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
2719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
272085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
272185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
272285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
2723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu ja.txt does not have info for this time zone
272485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u30aa\\u30fc\\u30b9\\u30c8\\u30e9\\u30ea\\u30a2 (\\u30b7\\u30c9\\u30cb\\u30fc)", "Australia/Sydney" },
272585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u30aa\\u30fc\\u30b9\\u30c8\\u30e9\\u30ea\\u30a2 (\\u30b7\\u30c9\\u30cb\\u30fc)", "Australia/Sydney" },
2726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
272885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
272985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
273085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
2731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
273285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
273385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
273485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
273585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u30aa\\u30fc\\u30b9\\u30c8\\u30e9\\u30ea\\u30a2 (\\u30b7\\u30c9\\u30cb\\u30fc)", "Australia/Sydney" },
273685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u30aa\\u30fc\\u30b9\\u30c8\\u30e9\\u30ea\\u30a2 (\\u30b7\\u30c9\\u30cb\\u30fc)", "Australia/Sydney" },
2737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
273985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+00:00", "+0:00" },
274085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT+00:00", "+0:00" },
2741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "V", "GMT", "+0:00" },
2742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u30B0\\u30EA\\u30CB\\u30C3\\u30B8\\u6A19\\u6E96\\u6642", "+0:00" },
2743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
274485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
274585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+01:00", "+1:00" },
274685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "V", "GMT+01:00", "+1:00" },
274785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+01:00", "+1:00" },
2748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
2749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
2750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
2751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
275385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
275485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
275585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
275785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
275885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
275985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
276085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-03:00", "-3:00" },
276185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
276585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
276685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+05:30", "+5:30" },
276785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
2768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
276985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
277085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+05:30", "+05:30" },
277185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
2772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u30A4\\u30F3\\u30C9\\u6642\\u9593", "Asia/Calcutta" },
2773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u30A4\\u30F3\\u30C9\\u6642\\u9593", "Asia/Calcutta" },
2774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // ==========
2776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
277785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
277885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
277985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-08:00", "-8:00" },
278085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "GMT-08:00", "-8:00" },
278185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
278285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
278385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-07:00", "-7:00" },
278485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "GMT-07:00", "-7:00" },
278585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "US (Los Angeles)", "America/Los_Angeles" },
278685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "US (Los Angeles)", "America/Los_Angeles" },
278785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
278885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
278985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
279085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
279185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
279285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
279385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
279485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
279585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
279685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "AR (Buenos Aires)", "America/Buenos_Aires" },
279785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "AR (Buenos Aires)", "America/Buenos_Aires" },
279885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
279985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
280085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
280185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
280285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
280385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
280485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
280585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
280685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
280785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "AR (Buenos Aires)", "America/Buenos_Aires" },
280885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "AR (Buenos Aires)", "America/Buenos_Aires" },
280985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
281085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
281185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
281285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-05:00", "-5:00" },
281385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-05:00", "-5:00" },
281485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
281585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
281685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-04:00", "-4:00" },
281785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-04:00", "-4:00" },
281885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-07-15T00:00:00Z", "v", "CU", "America/Havana" },
281985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "CU", "America/Havana" },
282085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
282185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
282285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
282385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
282485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
282585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
282685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
282785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
282885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
282985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "AU (Sydney)", "Australia/Sydney" },
283085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "AU (Sydney)", "Australia/Sydney" },
283185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
283285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
283385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
283485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
283585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
283685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
283785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
283885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
283985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
284085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "AU (Sydney)", "Australia/Sydney" },
284185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "AU (Sydney)", "Australia/Sydney" },
284285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
284385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
284485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+00:00", "+0:00" },
284585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT+00:00", "+0:00" },
284685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "GMT+00:00", "+0:00" },
284785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
284885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
284985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+01:00", "+1:00" },
285085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+01:00", "+1:00" },
285185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-07-15T00:00:00Z", "v", "GB", "Europe/London" },
285285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "GB", "Europe/London" },
285385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
285485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
285585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
285685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
285785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
285885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
285985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
286085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
286185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
286285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-03:00", "-3:00" },
286385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
286685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
286785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
286885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+05:30", "+5:30" },
286985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
287085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
287185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
287285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+05:30", "+05:30" },
287385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
287485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "IN", "Asia/Calcutta" },
287585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "IN", "Asia/Calcutta" },
287685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { NULL, NULL, NULL, NULL, NULL, NULL },
2877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
2878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
287985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
288085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    Calendar *cal = GregorianCalendar::createInstance(status);
288185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    ASSERT_OK(status);
288285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for (int i = 0; fallbackTests[i][0]; i++) {
288385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        const char **testLine = fallbackTests[i];
288485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        UnicodeString info[5];
288585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        for ( int j = 0 ; j < 5 ; j++ ) {
288685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            info[j] = UnicodeString(testLine[j], -1, US_INV);
288785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
288885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        info[4] = info[4].unescape();
288985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        logln("%s;%s;%s;%s", testLine[0], testLine[1], testLine[2], testLine[3]);
2890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
289185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        TimeZone *tz = TimeZone::createTimeZone(info[1]);
289285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
289385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        if (strcmp(testLine[2], "2004-07-15T00:00:00Z") == 0) {
289485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            cal->set(2004,6,15,0,0,0);
289585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        } else {
289685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            cal->set(2004,0,15,0,0,0);
289785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
289885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
289985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        SimpleDateFormat fmt(info[3], Locale(testLine[0]),status);
290085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        ASSERT_OK(status);
290185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        cal->adoptTimeZone(tz);
290285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        UnicodeString result;
290385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        FieldPosition pos(0);
290485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        fmt.format(*cal,result,pos);
290585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        if (result != info[4]) {
290685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            errln(info[0] + ";" + info[1] + ";" + info[2] + ";" + info[3] + " expected: '" +
290785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                  info[4] + "' but got: '" + result + "'");
290885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
290985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
291085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete cal;
291185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
291285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
291385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::TestRoundtripWithCalendar(void) {
291485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
291585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
291685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeZone *tz = TimeZone::createTimeZone("Europe/Paris");
291785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeZone *gmt = TimeZone::createTimeZone("Etc/GMT");
291885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
291985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    Calendar *calendars[] = {
292085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Calendar::createInstance(*tz, Locale("und@calendar=gregorian"), status),
292185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Calendar::createInstance(*tz, Locale("und@calendar=buddhist"), status),
292285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//        Calendar::createInstance(*tz, Locale("und@calendar=hebrew"), status),
292385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Calendar::createInstance(*tz, Locale("und@calendar=islamic"), status),
292485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Calendar::createInstance(*tz, Locale("und@calendar=japanese"), status),
292585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        NULL
292685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    };
292785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(status)) {
292885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("Failed to initialize calendars");
292985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        for (int i = 0; calendars[i] != NULL; i++) {
293085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            delete calendars[i];
293185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
293285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
293385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
2934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
293585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    //FIXME The formatters commented out below are currently failing because of
293685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    // the calendar calculation problem reported by #6691
293785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
293885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    // The order of test formatters must match the order of calendars above.
293985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat *formatters[] = {
294085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("en_US")), //calendar=gregorian
294185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("th_TH")), //calendar=buddhist
294285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("he_IL@calendar=hebrew")),
294385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("ar_EG@calendar=islamic")),
294485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("ja_JP@calendar=japanese")),
294585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        NULL
294685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    };
294785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
294885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate d = Calendar::getNow();
294985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString buf;
295085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    FieldPosition fpos;
295185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    ParsePosition ppos;
295285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
295385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for (int i = 0; formatters[i] != NULL; i++) {
295485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        buf.remove();
295585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        fpos.setBeginIndex(0);
295685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        fpos.setEndIndex(0);
295785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        calendars[i]->setTime(d, status);
295885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
295985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // Normal case output - the given calendar matches the calendar
296085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // used by the formatter
296185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        formatters[i]->format(*calendars[i], buf, fpos);
296285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        UnicodeString refStr(buf);
296385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
296485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        for (int j = 0; calendars[j] != NULL; j++) {
296585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            if (j == i) {
296685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                continue;
296785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            }
296885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            buf.remove();
296985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            fpos.setBeginIndex(0);
297085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            fpos.setEndIndex(0);
297185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            calendars[j]->setTime(d, status);
297285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
297385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            // Even the different calendar type is specified,
297485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            // we should get the same result.
297585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            formatters[i]->format(*calendars[j], buf, fpos);
297685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            if (refStr != buf) {
297785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                errln((UnicodeString)"FAIL: Different format result with a different calendar for the same time -"
297885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Reference calendar type=" + calendars[i]->getType()
297985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Another calendar type=" + calendars[j]->getType()
298085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Expected result=" + refStr
298185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Actual result=" + buf);
2982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
298385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
2984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
298585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        calendars[i]->setTimeZone(*gmt);
298685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        calendars[i]->clear();
298785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        ppos.setErrorIndex(-1);
298885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        ppos.setIndex(0);
298985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
299085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // Normal case parse result - the given calendar matches the calendar
299185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // used by the formatter
299285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        formatters[i]->parse(refStr, *calendars[i], ppos);
299385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
299485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        for (int j = 0; calendars[j] != NULL; j++) {
299585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            if (j == i) {
299685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                continue;
299785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            }
299885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            calendars[j]->setTimeZone(*gmt);
299985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            calendars[j]->clear();
300085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            ppos.setErrorIndex(-1);
300185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            ppos.setIndex(0);
300285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
300385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            // Even the different calendar type is specified,
300485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            // we should get the same time and time zone.
300585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            formatters[i]->parse(refStr, *calendars[j], ppos);
300685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            if (calendars[i]->getTime(status) != calendars[j]->getTime(status)
300785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                || calendars[i]->getTimeZone() != calendars[j]->getTimeZone()) {
300885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                UnicodeString tzid;
300985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                errln((UnicodeString)"FAIL: Different parse result with a different calendar for the same string -"
301085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Reference calendar type=" + calendars[i]->getType()
301185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Another calendar type=" + calendars[j]->getType()
301285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Date string=" + refStr
301385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Expected time=" + calendars[i]->getTime(status)
301485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Expected time zone=" + calendars[i]->getTimeZone().getID(tzid)
301585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Actual time=" + calendars[j]->getTime(status)
301685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Actual time zone=" + calendars[j]->getTimeZone().getID(tzid));
3017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
3018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
301985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        if (U_FAILURE(status)) {
302085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            errln((UnicodeString)"FAIL: " + u_errorName(status));
302185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            break;
302285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
302385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
302485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
302585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete tz;
302685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete gmt;
302785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for (int i = 0; calendars[i] != NULL; i++) {
302885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete calendars[i];
302985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
303085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for (int i = 0; formatters[i] != NULL; i++) {
303185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete formatters[i];
3032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
3033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
3034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
3036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelativeError(void)
3037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
3038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status;
3039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale en("en");
3040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *en_reltime_reldate =         DateFormat::createDateTimeInstance(DateFormat::kFullRelative,DateFormat::kFullRelative,en);
3042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(en_reltime_reldate == NULL) {
3043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("PASS: rel date/rel time failed");
3044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
3045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: rel date/rel time created, should have failed.");
3046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete en_reltime_reldate;
3047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
3048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
3049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelativeOther(void)
3051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
3052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Nothing in this test. When we get more data from CLDR, put in some tests of -2, +2, etc. ");
3053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
3054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
3055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
305685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::Test6338(void)
305785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho{
305885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
305985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
306085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    SimpleDateFormat *fmt1 = new SimpleDateFormat(UnicodeString("y-M-d"), Locale("ar"), status);
306185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "new SimpleDateFormat");
306285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
306385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt1 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
306485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str1;
306585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str1 = fmt1->format(dt1, str1);
306685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str1);
306785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
306885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt11 = fmt1->parse(str1, status);
306985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "fmt->parse");
307085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
307185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str11;
307285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str11 = fmt1->format(dt11, str11);
307385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str11);
307485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
307585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (str1 != str11) {
307685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Different dates str1:" + str1
307785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            + " str2:" + str11);
307885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
307985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt1;
308085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
308185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    /////////////////
308285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
308385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    status = U_ZERO_ERROR;
308485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    SimpleDateFormat *fmt2 = new SimpleDateFormat(UnicodeString("y M d"), Locale("ar"), status);
308585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "new SimpleDateFormat");
308685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
308785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt2 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
308885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str2;
308985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str2 = fmt2->format(dt2, str2);
309085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str2);
309185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
309285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt22 = fmt2->parse(str2, status);
309385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "fmt->parse");
309485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
309585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str22;
309685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str22 = fmt2->format(dt22, str22);
309785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str22);
309885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
309985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (str2 != str22) {
310085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Different dates str1:" + str2
310185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            + " str2:" + str22);
310285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
310385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt2;
310485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
310585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    /////////////////
310685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
310785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    status = U_ZERO_ERROR;
310885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    SimpleDateFormat *fmt3 = new SimpleDateFormat(UnicodeString("y-M-d"), Locale("en-us"), status);
310985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "new SimpleDateFormat");
311085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
311185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt3 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
311285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str3;
311385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str3 = fmt3->format(dt3, str3);
311485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str3);
311585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
311685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt33 = fmt3->parse(str3, status);
311785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "fmt->parse");
311885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
311985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str33;
312085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str33 = fmt3->format(dt33, str33);
312185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str33);
312285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
312385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (str3 != str33) {
312485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Different dates str1:" + str3
312585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            + " str2:" + str33);
312685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
312785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt3;
312885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
312985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    /////////////////
313085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
313185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    status = U_ZERO_ERROR;
313285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    SimpleDateFormat *fmt4 = new SimpleDateFormat(UnicodeString("y M  d"), Locale("en-us"), status);
313385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "new SimpleDateFormat");
313485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
313585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt4 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
313685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str4;
313785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str4 = fmt4->format(dt4, str4);
313885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str4);
313985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
314085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt44 = fmt4->parse(str4, status);
314185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "fmt->parse");
314285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
314385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str44;
314485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str44 = fmt4->format(dt44, str44);
314585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str44);
314685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
314785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (str4 != str44) {
314885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Different dates str1:" + str4
314985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            + " str2:" + str44);
315085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
315185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt4;
315285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
315385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
315485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
315585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::Test6726(void)
315685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho{
315785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    // status
315885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//    UErrorCode status = U_ZERO_ERROR;
315985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
316085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    // fmtf, fmtl, fmtm, fmts;
316185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString strf, strl, strm, strs;
316285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt = date(2008-1900, UCAL_JUNE, 10, 12, 00);
316385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
316485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    Locale loc("ja");
316585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat* fmtf = DateFormat::createDateTimeInstance(DateFormat::FULL, DateFormat::FULL, loc);
316685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat* fmtl = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::FULL, loc);
316785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat* fmtm = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL, loc);
316885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat* fmts = DateFormat::createDateTimeInstance(DateFormat::SHORT, DateFormat::FULL, loc);
316985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (fmtf == NULL || fmtl == NULL || fmtm == NULL || fmts == NULL) {
317085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("Unable to create DateFormat. got NULL.");
317185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        /* It may not be true that if one is NULL all is NULL.  Just to be safe. */
317285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete fmtf;
317385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete fmtl;
317485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete fmtm;
317585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete fmts;
317685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
317785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
317885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
317985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    strf = fmtf->format(dt, strf);
318085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    strl = fmtl->format(dt, strl);
318185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    strm = fmtm->format(dt, strm);
318285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    strs = fmts->format(dt, strs);
318385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
318485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/* Locale data is not yet updated
318585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (strf.charAt(13) == UChar(' ')) {
318685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Improper formated date: " + strf);
318785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
318885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (strl.charAt(10) == UChar(' ')) {
318985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Improper formated date: " + strl);
319085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
319185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho*/
319285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (strm.charAt(10) != UChar(' ')) {
319385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Improper formated date: " + strm);
319485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
319585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (strs.charAt(8)  != UChar(' ')) {
319685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Improper formated date: " + strs);
319785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
319885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
319985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmtf;
320085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmtl;
320185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmtm;
320285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmts;
320385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
320485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    return;
320585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
320685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
320785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/**
320885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Test DateFormat's parsing of default GMT variants.  See ticket#6135
320985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */
321085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::TestGMTParsing() {
321185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    const char* DATA[] = {
321285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss Z",
321385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
321485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // pattern, input, expected output (in quotes)
321585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss Z",       "10:20:30 GMT+03:00",   "10:20:30 +0300",
321685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss Z",       "10:20:30 UT-02:00",    "10:20:30 -0200",
321785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss Z",       "10:20:30 GMT",         "10:20:30 +0000",
321885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss vvvv",    "10:20:30 UT+10:00",    "10:20:30 +1000",
321985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss zzzz",    "10:20:30 UTC",         "10:20:30 +0000",   // standalone "UTC"
322085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "ZZZZ HH:mm:ss",    "UT 10:20:30",          "10:20:30 +0000",
322185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "V HH:mm:ss",       "UT+0130 10:20:30",     "10:20:30 +0130",
322285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "V HH:mm:ss",       "UTC+0130 10:20:30",    NULL,               // UTC+0130 is not a supported pattern
322385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH mm Z ss",       "10 20 GMT-1100 30",    "10:20:30 -1100",
322485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    };
322585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
322685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    expectParse(DATA, DATA_len, Locale("en"));
322785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
322885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
322985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho// Test case for localized GMT format parsing
323085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho// with no delimitters in offset format (Chinese locale)
323185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::Test6880() {
323285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
323385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate d1, d2, dp1, dp2, dexp1, dexp2;
323485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString s1, s2;
323585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
323685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeZone *tz = TimeZone::createTimeZone("Asia/Shanghai");
323785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    GregorianCalendar gcal(*tz, status);
323885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
323985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.clear();
324085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.set(1910, UCAL_JULY, 1, 12, 00);   // offset 8:05:52
324185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    d1 = gcal.getTime(status);
324285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
324385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.clear();
324485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.set(1950, UCAL_JULY, 1, 12, 00);   // offset 8:00
324585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    d2 = gcal.getTime(status);
324685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
324785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.clear();
324885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.set(1970, UCAL_JANUARY, 1, 12, 00);
324985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    dexp2 = gcal.getTime(status);
325085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    dexp1 = dexp2 - (5*60 + 52)*1000;   // subtract 5m52s
325185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
325285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(status)) {
325385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("FAIL: Gregorian calendar error");
325485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
325585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
325685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat *fmt = DateFormat::createTimeInstance(DateFormat::kFull, Locale("zh"));
325785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (fmt == NULL) {
325885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("Unable to create DateFormat. Got NULL.");
325985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
326085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
326185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    fmt->adoptTimeZone(tz);
326285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
326385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    fmt->format(d1, s1);
326485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    fmt->format(d2, s2);
326585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
326685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    dp1 = fmt->parse(s1, status);
326785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    dp2 = fmt->parse(s2, status);
326885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
326985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(status)) {
327085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("FAIL: Parse failure");
327185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
327285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
327385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (dp1 != dexp1) {
327485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("FAIL: Failed to parse " + s1 + " parsed: " + dp1 + " expected: " + dexp1);
327585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
327685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (dp2 != dexp2) {
327785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("FAIL: Failed to parse " + s2 + " parsed: " + dp2 + " expected: " + dexp2);
327885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
327985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
328085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt;
328185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
3282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */
3285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof
3287