1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/********************************************************************
250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * COPYRIGHT:
3b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Copyright (c) 1997-2011, International Business Machines
450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Corporation and others. All Rights Reserved.
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/
650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
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);
8227f654740f2a26ad62a5c155af9199af9e69b889claireho        TESTCASE(42,TestISOEra);
8327f654740f2a26ad62a5c155af9199af9e69b889claireho        TESTCASE(43,TestFormalChineseDate);
84b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        TESTCASE(44,TestNumberAsStringParsing);
85b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        TESTCASE(45,TestStandAloneGMTParse);
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
87b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        TESTCASE(46,TestRelativeError);
88b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        TESTCASE(47,TestRelativeOther);
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        */
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        default: name = ""; break;
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test written by Wally Wedel and emailed to me.
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestWallyWedel()
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Instantiate a TimeZone so we can get the ids.
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *tz = new SimpleTimeZone(7,"");
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Computational variables.
104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t offset, hours, minutes, seconds;
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Instantiate a SimpleDateFormat set up to produce a full time
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     zone name.
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *sdf = new SimpleDateFormat((UnicodeString)"zzzz", status);
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * A String array for the time zone ids.
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t ids_length;
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    StringEnumeration* ids = TimeZone::createEnumeration();
116b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (ids == NULL) {
117b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        dataerrln("Unable to create TimeZone enumeration.");
118b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (sdf != NULL) {
119b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            delete sdf;
120b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
121b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        return;
122b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ids_length = ids->count(status);
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * How many ids do we have?
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Time Zone IDs size: %d", ids_length);
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Column headings (sort of)
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Ordinal ID offset(h:m) name");
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Loop through the tzs.
134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate today = Calendar::getNow();
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal = Calendar::createInstance(status);
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i = 0; i < ids_length; i++) {
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // logln(i + " " + ids[i]);
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const UnicodeString* id = ids->snext(status);
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TimeZone *ttz = TimeZone::createTimeZone(*id);
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // offset = ttz.getRawOffset();
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->setTimeZone(*ttz);
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->setTime(today, status);
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        offset = cal->get(UCAL_ZONE_OFFSET, status) + cal->get(UCAL_DST_OFFSET, status);
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // logln(i + " " + ids[i] + " offset " + offset);
146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* sign = "+";
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (offset < 0) {
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            sign = "-";
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            offset = -offset;
150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        hours = offset/3600000;
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        minutes = (offset%3600000)/60000;
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        seconds = (offset%60000)/1000;
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString dstOffset = (UnicodeString)"" + sign + (hours < 10 ? "0" : "") +
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            (int32_t)hours + ":" + (minutes < 10 ? "0" : "") + (int32_t)minutes;
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (seconds != 0) {
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            dstOffset = dstOffset + ":" + (seconds < 10 ? "0" : "") + seconds;
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Instantiate a date so we can display the time zone name.
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         */
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf->setTimeZone(*ttz);
163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Format the output.
165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         */
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString fmtOffset;
167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FieldPosition pos(0);
168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf->format(today,fmtOffset, pos);
169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // UnicodeString fmtOffset = tzS.toString();
170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString *fmtDstOffset = 0;
171b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (fmtOffset.startsWith("GMT") && fmtOffset.length() != 3)
172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            //fmtDstOffset = fmtOffset->substring(3);
174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmtDstOffset = new UnicodeString();
175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmtOffset.extract(3, fmtOffset.length(), *fmtDstOffset);
176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Show our result.
179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         */
180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UBool ok = fmtDstOffset == 0 || *fmtDstOffset == dstOffset;
181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (ok)
182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(UnicodeString() + i + " " + *id + " " + dstOffset +
184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " " + fmtOffset +
185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  (fmtDstOffset != 0 ? " ok" : " ?"));
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else
188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString() + i + " " + *id + " " + dstOffset +
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " " + fmtOffset + " *** FAIL ***");
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete ttz;
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmtDstOffset;
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //  delete ids;   // TODO:  BAD API
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete ids;
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete sdf;
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete tz;
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
20350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test operator==
206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestEquals()
209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* fmtA = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL);
211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* fmtB = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL);
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if ( fmtA == NULL || fmtB == NULL){
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateTimeInstance");
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmtA;
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmtB;
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(*fmtA == *fmtB)) errln((UnicodeString)"FAIL");
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmtA;
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmtB;
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* test = TimeZone::createTimeZone("PDT");
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete test;
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
22650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the parsing of 2-digit years.
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestTwoDigitYearDSTParse(void)
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* fullFmt = new SimpleDateFormat((UnicodeString)"EEE MMM dd HH:mm:ss.SSS zzz yyyy G", status);
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *fmt = new SimpleDateFormat((UnicodeString)"dd-MMM-yy h:mm:ss 'o''clock' a z", Locale::getEnglish(), status);
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //DateFormat* fmt = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL, Locale::ENGLISH);
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString* s = new UnicodeString("03-Apr-04 2:20:47 o'clock AM PST", "");
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* defaultTZ = TimeZone::createDefault();
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* PST = TimeZone::createTimeZone("PST");
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t defaultOffset = defaultTZ->getRawOffset();
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t PSTOffset = PST->getRawOffset();
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t hour = 2 + (defaultOffset - PSTOffset) / (60*60*1000);
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // hour is the expected hour of day, in units of seconds
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    hour = ((hour < 0) ? hour + 24 : hour) * 60*60;
24750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
25150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Could not set up test. exitting - %s", u_errorName(status));
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = fmt->parse(*s, status);
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(*s + " P> " + ((DateFormat*)fullFmt)->format(d, str));
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t y, m, day, hr, min, sec;
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateToFields(d, y, m, day, hr, min, sec);
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    hour += defaultTZ->inDaylightTime(d, status) ? 1 : 0;
260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    hr = hr*60*60;
261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (hr != hour)
262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Should parse to hour " + hour + " but got " + hr);
263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: " + (int32_t)status);
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete s;
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullFmt;
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete PST;
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete defaultTZ;
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
27350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
27550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUChar toHexString(int32_t i) { return (UChar)(i + (i < 10 ? 0x30 : (0x41 - 10))); }
277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString&
279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::escape(UnicodeString& s)
280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString buf;
282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i=0; i<s.length(); ++i)
283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UChar c = s[(int32_t)i];
285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (c <= (UChar)0x7F) buf += c;
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += (UChar)0x5c; buf += (UChar)0x55;
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0xF000) >> 12);
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0x0F00) >> 8);
290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0x00F0) >> 4);
291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString(c & 0x000F);
292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return (s = buf);
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
29650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This MUST be kept in sync with DateFormatSymbols.gPatternChars.
301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* PATTERN_CHARS = "GyMdkHmsSEDFwWahKzYeugAZvcLQqV";
303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A list of the names of all the fields in DateFormat.
306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This MUST be kept in sync with DateFormat.
307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* DATEFORMAT_FIELD_NAMES[] = {
309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "ERA_FIELD",
310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "YEAR_FIELD",
311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MONTH_FIELD",
312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DATE_FIELD",
313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR_OF_DAY1_FIELD",
314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR_OF_DAY0_FIELD",
315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MINUTE_FIELD",
316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "SECOND_FIELD",
317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MILLISECOND_FIELD",
318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DAY_OF_WEEK_FIELD",
319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DAY_OF_YEAR_FIELD",
320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DAY_OF_WEEK_IN_MONTH_FIELD",
321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "WEEK_OF_YEAR_FIELD",
322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "WEEK_OF_MONTH_FIELD",
323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "AM_PM_FIELD",
324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR1_FIELD",
325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR0_FIELD",
326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "TIMEZONE_FIELD",
327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "YEAR_WOY_FIELD",
328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DOW_LOCAL_FIELD",
329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "EXTENDED_YEAR_FIELD",
330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "JULIAN_DAY_FIELD",
331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MILLISECONDS_IN_DAY_FIELD",
332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "TIMEZONE_RFC_FIELD",
333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "GENERIC_TIMEZONE_FIELD",
334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "STAND_ALONE_DAY_FIELD",
335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "STAND_ALONE_MONTH_FIELD",
336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "QUARTER_FIELD",
337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "STAND_ALONE_QUARTER_FIELD",
338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "TIMEZONE_SPECIAL_FIELD"
339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const int32_t DATEFORMAT_FIELD_NAMES_LENGTH =
342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sizeof(DATEFORMAT_FIELD_NAMES) / sizeof(DATEFORMAT_FIELD_NAMES[0]);
343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that returned field position indices are correct.
346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestFieldPosition() {
348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i, j, exp;
350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString buf;
351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Verify data
353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormatSymbols rootSyms(Locale(""), ec);
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertSuccess("DateFormatSymbols", ec);
35585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(ec)) {
35685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
35785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // local pattern chars data is not longer loaded
360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // from icu locale bundle
361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("patternChars", PATTERN_CHARS, rootSyms.getLocalPatternChars(buf));
362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("patternChars", PATTERN_CHARS, DateFormatSymbols::getPatternUChars());
363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertTrue("DATEFORMAT_FIELD_NAMES", DATEFORMAT_FIELD_NAMES_LENGTH == UDAT_FIELD_COUNT);
364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertTrue("Data", UDAT_FIELD_COUNT == uprv_strlen(PATTERN_CHARS));
365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Create test formatters
367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t COUNT = 4;
368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* dateFormats[COUNT];
369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[0] = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale::getUS());
370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[1] = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale::getFrance());
371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Make the pattern "G y M d..."
372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    buf.remove().append(PATTERN_CHARS);
373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (j=buf.length()-1; j>=0; --j) buf.insert(j, (UChar)32/*' '*/);
374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[2] = new SimpleDateFormat(buf, Locale::getUS(), ec);
375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Make the pattern "GGGG yyyy MMMM dddd..."
376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (j=buf.length()-1; j>=0; j-=2) {
377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i=0; i<3; ++i) {
378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf.insert(j, buf.charAt(j));
379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[3] = new SimpleDateFormat(buf, Locale::getUS(), ec);
382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(ec)){
383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("Could not create SimpleDateFormat object for locale en_US. Error: " )+ UnicodeString(u_errorName(ec)));
384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate aug13 = 871508052513.0;
387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Expected output field values for above DateFormats on aug13
389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Fields are given in order of DateFormat field number
390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* EXPECTED[] = {
391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "", "1997", "August", "13", "", "", "34", "12", "",
39285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "Wednesday", "", "", "", "", "PM", "2", "", "Pacific Daylight Time", "", "", "", "", "", "", "", "", "", "", "","",
393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "", "1997", "ao\\u00FBt", "13", "", "14", "34", "12", "",
39585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "mercredi", "", "", "", "", "", "", "", "heure avanc\\u00e9e du Pacifique", "", "", "", "", "", "", "",  "", "", "", "", "",
396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "AD", "1997", "8", "13", "14", "14", "34", "12", "5",
398b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "Wed", "225", "2", "33", "3", "PM", "2", "2", "PDT", "1997", "4", "1997", "2450674", "52452513", "-0700", "PT",  "4", "8", "3", "3","PDT",
399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Anno Domini", "1997", "August", "0013", "0014", "0014", "0034", "0012", "5130",
401b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "Wednesday", "0225", "0002", "0033", "0003", "PM", "0002", "0002", "Pacific Daylight Time", "1997", "Wednesday", "1997", "2450674", "52452513", "GMT-07:00",
402b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "Pacific Time",  "Wednesday", "August", "3rd quarter", "3rd quarter", "United States Time (Los Angeles)"
403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t EXPECTED_LENGTH = sizeof(EXPECTED)/sizeof(EXPECTED[0]);
406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertTrue("data size", EXPECTED_LENGTH == COUNT * UDAT_FIELD_COUNT);
408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* PT = TimeZone::createTimeZone("America/Los_Angeles");
410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (j = 0, exp = 0; j < COUNT; ++j) {
411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //  String str;
412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat* df = dateFormats[j];
413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        df->setTimeZone(*PT);
41427f654740f2a26ad62a5c155af9199af9e69b889claireho        SimpleDateFormat* sdtfmt = dynamic_cast<SimpleDateFormat*>(df);
41527f654740f2a26ad62a5c155af9199af9e69b889claireho        if (sdtfmt != NULL) {
41627f654740f2a26ad62a5c155af9199af9e69b889claireho            logln(" Pattern = " + sdtfmt->toPattern(buf.remove()));
417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(" Pattern = ? (not a SimpleDateFormat)");
419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"  Result = " + df->format(aug13, buf.remove()));
421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
42250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        int32_t expBase = exp; // save for later
423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i = 0; i < UDAT_FIELD_COUNT; ++i, ++exp) {
424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            FieldPosition pos(i);
425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf.remove();
42650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            df->format(aug13, buf, pos);
427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString field;
428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf.extractBetween(pos.getBeginIndex(), pos.getEndIndex(), field);
429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"field #" + i + " " + DATEFORMAT_FIELD_NAMES[i],
430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(EXPECTED[exp]), field);
431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
43250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
43350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // test FieldPositionIterator API
43450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        logln("FieldPositionIterator");
43550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {
43650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          UErrorCode status = U_ZERO_ERROR;
43750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          FieldPositionIterator posIter;
43850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          FieldPosition fp;
43950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
44050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          buf.remove();
44150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          df->format(aug13, buf, &posIter, status);
44250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          while (posIter.next(fp)) {
44350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            int32_t i = fp.getField();
44450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            UnicodeString field;
44550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            buf.extractBetween(fp.getBeginIndex(), fp.getEndIndex(), field);
44650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            assertEquals((UnicodeString)"field #" + i + " " + DATEFORMAT_FIELD_NAMES[i],
44750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                         ctou(EXPECTED[expBase + i]), field);
44850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          }
44950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
45050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        }
451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
45350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
45450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // test null posIter
45550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    buf.remove();
45650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UErrorCode status = U_ZERO_ERROR;
45750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    dateFormats[0]->format(aug13, buf, NULL, status);
45850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // if we didn't crash, we succeeded.
45950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (i=0; i<COUNT; ++i) {
461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete dateFormats[i];
462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete PT;
464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * General parse/format tests.  Add test cases as needed.
470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGeneral() {
472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss.SSS",
474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Milliseconds are left-justified, since they format as fractions of a second
47627f654740f2a26ad62a5c155af9199af9e69b889claireho        "y/M/d H:mm:ss.S", "fp", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.5", "2004 03 10 16:36:31.500",
47727f654740f2a26ad62a5c155af9199af9e69b889claireho        "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",
478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm:ss.SSS", "F", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.567",
479b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(DATA, ARRAY_SIZE(DATA), Locale("en", "", ""));
482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
48350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that strings which contain incomplete specifications are parsed
488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * correctly.  In some instances, this means not being parsed at all, and
489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * returning an appropriate error.
490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestPartialParse994()
493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* f = new SimpleDateFormat(status);
49685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(status)) {
49750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
49885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete f;
49985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
50085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate null = 0;
502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10:11:42", date(97, 1 - 1, 17, 10, 11, 42));
503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10:", null);
504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10", null);
505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 ", null);
506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17", null);
507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete f;
509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
51050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
51250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::tryPat994(SimpleDateFormat* format, const char* pat, const char* str, UDate expected)
515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate null = 0;
518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("Pattern \"") + pat + "\"   String \"" + str + "\"");
519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        format->applyPattern(pat);
521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate date = format->parse(str, status);
522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status) || date == null)
523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"ParseException: " + (int32_t)status);
525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (expected != null) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else
528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString f;
530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            ((DateFormat*)format)->format(date, f);
531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(UnicodeString(" parse(") + str + ") -> " + dateToString(date));
532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)" format -> " + f);
533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (expected == null ||
534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                !(date == expected)) errln((UnicodeString)"FAIL: Expected null");//" + expected);
535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!(f == str)) errln(UnicodeString("FAIL: Expected ") + str);
536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    logln((UnicodeString)"ParseException: " + e.getMessage());
540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    if (expected != null) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Exception e) {
543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    errln((UnicodeString)"*** Exception:");
544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    e.printStackTrace();
545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
54750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
54950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the behavior of patterns in which digits for different fields run together
552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * without intervening separators.
553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestRunTogetherPattern985()
556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString format("yyyyMMddHHmmssSSS");
559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString now, then;
560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //UBool flag;
561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *formatter = new SimpleDateFormat(format, status);
56250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(status)) {
56350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
56450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        delete formatter;
56550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
56650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date1 = Calendar::getNow();
568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((DateFormat*)formatter)->format(date1, now);
569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(now);
570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos(0);
571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date2 = formatter->parse(now, pos);
572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (date2 == 0) then = "Parse stopped at " + pos.getIndex();
573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else ((DateFormat*)formatter)->format(date2, then);
574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(then);
575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(date2 == date1)) errln((UnicodeString)"FAIL");
576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
57950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
58150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the behavior of patterns in which digits for different fields run together
584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * without intervening separators.
585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestRunTogetherPattern917()
588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* fmt;
591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString myDate;
592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt = new SimpleDateFormat((UnicodeString)"yyyy/MM/dd", status);
59350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(status)) {
59450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
59550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        delete fmt;
59650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
59750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    myDate = "1997/02/03";
599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testIt917(fmt, myDate, date(97, 2 - 1, 3));
600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt = new SimpleDateFormat((UnicodeString)"yyyyMMdd", status);
602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    myDate = "19970304";
603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testIt917(fmt, myDate, date(97, 3 - 1, 4));
604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
60750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
60950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::testIt917(SimpleDateFormat* fmt, UnicodeString& str, UDate expected)
612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pattern;
615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"pattern=" + fmt->toPattern(pattern) + "   string=" + str);
616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable o;
617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ((Format*)fmt)->parseObject(str, o, status);
619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) return;
621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    e.printStackTrace();
623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    return;
624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Parsed object: " + dateToString(o.getDate()));
626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(o.getDate() == expected)) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString formatted; ((Format*)fmt)->format(o, formatted, status);
628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Formatted string: " + formatted);
629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(formatted == str)) errln((UnicodeString)"FAIL: Expected " + str);
630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
63250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
63450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the handling of Czech June and July, which have the unique attribute that
637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * one is a proper prefix substring of the other.
638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestCzechMonths459()
641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* fmt = DateFormat::createDateInstance(DateFormat::FULL, Locale("cs", "", ""));
644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (fmt == NULL){
645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateInstance()");
646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pattern;
650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Pattern " + ((SimpleDateFormat*) fmt)->toPattern(pattern));
651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate june = date(97, UCAL_JUNE, 15);
652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate july = date(97, UCAL_JULY, 15);
653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString juneStr; fmt->format(june, juneStr);
654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString julyStr; fmt->format(july, julyStr);
655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"format(June 15 1997) = " + juneStr);
657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d = fmt->parse(juneStr, status);
658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString s; fmt->format(d, s);
659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t month,yr,day,hr,min,sec; dateToFields(d,yr,month,day,hr,min,sec);
660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"  -> parse -> " + s + " (month = " + month + ")");
661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (month != UCAL_JUNE) errln((UnicodeString)"FAIL: Month should be June");
662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"format(July 15 1997) = " + julyStr);
663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        d = fmt->parse(julyStr, status);
664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt->format(d, s);
665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dateToFields(d,yr,month,day,hr,min,sec);
666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"  -> parse -> " + s + " (month = " + month + ")");
667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (month != UCAL_JULY) errln((UnicodeString)"FAIL: Month should be July");
668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"Exception: " + (int32_t)status);
672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
67550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of 'D' in patterns.
680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestLetterDPattern212()
683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString dateString("1995-040.05:01:29");
686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString bigD("yyyy-DDD.hh:mm:ss");
687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString littleD("yyyy-ddd.hh:mm:ss");
688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate expLittleD = date(95, 0, 1, 5, 1, 29);
689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate expBigD = expLittleD + 39 * 24 * 3600000.0;
690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expLittleD = expBigD; // Expect the same, with default lenient parsing
691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"dateString= " + dateString);
692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *formatter = new SimpleDateFormat(bigD, status);
69350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(status)) {
69450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
69550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        delete formatter;
69650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
69750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos(0);
699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate myDate = formatter->parse(dateString, pos);
700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Using " + bigD + " -> " + myDate);
701b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (myDate != expBigD) errln((UnicodeString)"FAIL: bigD - Expected " + dateToString(expBigD));
702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    formatter = new SimpleDateFormat(littleD, status);
70450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    ASSERT_OK(status);
705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pos = ParsePosition(0);
706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    myDate = formatter->parse(dateString, pos);
707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Using " + littleD + " -> " + dateToString(myDate));
708b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (myDate != expLittleD) errln((UnicodeString)"FAIL: littleD - Expected " + dateToString(expLittleD));
709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
71250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the day of year pattern.
717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestDayOfYearPattern195()
720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate today = Calendar::getNow();
723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t year,month,day,hour,min,sec; dateToFields(today,year,month,day,hour,min,sec);
724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate expected = date(year, month, day);
725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Test Date: " + dateToString(today));
726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* sdf = (SimpleDateFormat*)DateFormat::createDateInstance();
727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (sdf == NULL){
728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateInstance()");
729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPattern(*sdf, today, 0, expected);
732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPattern(*sdf, today, "G yyyy DDD", expected);
733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete sdf;
734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
73650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
73850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::tryPattern(SimpleDateFormat& sdf, UDate d, const char* pattern, UDate expected)
741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pattern != 0) sdf.applyPattern(pattern);
744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString thePat;
745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"pattern: " + sdf.toPattern(thePat));
746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString formatResult; (*(DateFormat*)&sdf).format(d, formatResult);
747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" format -> " + formatResult);
748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // try {
749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d2 = sdf.parse(formatResult, status);
750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)" parse(" + formatResult + ") -> " + dateToString(d2));
751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (d2 != expected) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString format2; (*(DateFormat*)&sdf).format(d2, format2);
753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)" format -> " + format2);
754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!(formatResult == format2)) errln((UnicodeString)"FAIL: Round trip drift");
755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Exception e) {
757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"Error: " + (int32_t)status);
759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
76150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of single quotes in patterns.
766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestQuotePattern161()
769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* formatter = new SimpleDateFormat((UnicodeString)"MM/dd/yyyy 'at' hh:mm:ss a zzz", status);
77250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(status)) {
77350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
77450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        delete formatter;
77550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
77650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate currentTime_1 = date(97, UCAL_AUGUST, 13, 10, 42, 28);
778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString dateString; ((DateFormat*)formatter)->format(currentTime_1, dateString);
779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString exp("08/13/1997 at 10:42:28 AM ");
780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"format(" + dateToString(currentTime_1) + ") = " + dateString);
781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (0 != dateString.compareBetween(0, exp.length(), exp, 0, exp.length())) errln((UnicodeString)"FAIL: Expected " + exp);
782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
78550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the correct behavior when handling invalid input strings.
790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestBadInput135()
793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat::EStyle looks[] = {
796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat::SHORT, DateFormat::MEDIUM, DateFormat::LONG, DateFormat::FULL
797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t looks_length = (int32_t)(sizeof(looks) / sizeof(looks[0]));
799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* strings[] = {
800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Mar 15", "Mar 15 1997", "asdf", "3/1/97 1:23:", "3/1/00 1:23:45 AM"
801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t strings_length = (int32_t)(sizeof(strings) / sizeof(strings[0]));
803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::LONG);
804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(full==NULL) {
80585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho      dataerrln("could not create date time instance");
806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString expected("March 1, 2000 1:23:45 AM ");
809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i = 0; i < strings_length;++i) {
810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* text = strings[i];
811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (int32_t j = 0; j < looks_length;++j) {
812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            DateFormat::EStyle dateLook = looks[j];
813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            for (int32_t k = 0; k < looks_length;++k) {
814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                DateFormat::EStyle timeLook = looks[k];
815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                DateFormat *df = DateFormat::createDateTimeInstance(dateLook, timeLook);
816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (df == NULL){
817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    dataerrln("Error calling DateFormat::createDateTimeInstance()");
818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    continue;
819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString prefix = UnicodeString(text) + ", " + dateLook + "/" + timeLook + ": ";
821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //try {
822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    UDate when = df->parse(text, status);
823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (when == 0 && U_SUCCESS(status)) {
824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        errln(prefix + "SHOULD NOT HAPPEN: parse returned 0.");
825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        continue;
826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (U_SUCCESS(status))
828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    {
829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        UnicodeString format;
830b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                        UnicodeString pattern;
831b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                        SimpleDateFormat* sdtfmt = dynamic_cast<SimpleDateFormat*>(df);
832b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                        if (sdtfmt != NULL) {
833b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                            sdtfmt->toPattern(pattern);
834b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                        }
835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        full->format(when, format);
836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        logln(prefix + "OK: " + format);
837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        if (0!=format.compareBetween(0, expected.length(), expected, 0, expected.length()))
838b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                            errln((UnicodeString)"FAIL: Parse \"" + text + "\", pattern \"" + pattern + "\", expected " + expected + " got " + format);
839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //}
841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //catch(ParseException e) {
842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    else
843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        status = U_ZERO_ERROR;
844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //}
845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //catch(StringIndexOutOfBoundsException e) {
846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //    errln(prefix + "SHOULD NOT HAPPEN: " + (int)status);
847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //}
848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                delete df;
849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
85650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* const parseFormats[] = {
858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MMMM d, yyyy",
859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MMMM d yyyy",
860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "M/d/yy",
861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "d MMMM, yyyy",
862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "d MMMM yyyy",
863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "d MMMM",
864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MMMM d",
865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "yyyy",
866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "h:mm a MMMM d, yyyy"
867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
86850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
869b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#if 0
870b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// strict inputStrings
871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* const inputStrings[] = {
872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "bogus string", 0, 0, 0, 0, 0, 0, 0, 0, 0,
873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "April 1, 1997", "April 1, 1997", 0, 0, 0, 0, 0, "April 1", 0, 0,
874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "Jan 1, 1970", "January 1, 1970", 0, 0, 0, 0, 0, "January 1", 0, 0,
875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "Jan 1 2037", 0, "January 1 2037", 0, 0, 0, 0, "January 1", 0, 0,
876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "1/1/70", 0, 0, "1/1/70", 0, 0, 0, 0, "0001", 0,
877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "5 May 1997", 0, 0, 0, 0, "5 May 1997", "5 May", 0, "0005", 0,
878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "16 May", 0, 0, 0, 0, 0, "16 May", 0, "0016", 0,
879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "April 30", 0, 0, 0, 0, 0, 0, "April 30", 0, 0,
880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "1998", 0, 0, 0, 0, 0, 0, 0, "1998", 0,
881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "1", 0, 0, 0, 0, 0, 0, 0, "0001", 0,
882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "3:00 pm Jan 1, 1997", 0, 0, 0, 0, 0, 0, 0, "0003", "3:00 PM January 1, 1997",
883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
884b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#else
885b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// lenient inputStrings
886b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char* const inputStrings[] = {
887b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "bogus string", 0, 0, 0, 0, 0, 0, 0, 0, 0,
888b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "April 1, 1997", "April 1, 1997", "April 1 1997", "4/1/97", 0, 0, 0, "April 1", 0, 0,
889b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "Jan 1, 1970", "January 1, 1970", "January 1 1970", "1/1/70", 0, 0, 0, "January 1", 0, 0,
890b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "Jan 1 2037", "January 1, 2037", "January 1 2037", "1/1/37", 0, 0, 0, "January 1", 0, 0,
891b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "1/1/70", "January 1, 1970", "January 1 1970", "1/1/70", "1 January, 1970", "1 January 1970", "1 January", "January 1", "0001", 0,
892b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "5 May 1997", 0, 0, 0, "5 May, 1997", "5 May 1997", "5 May", 0, "0005", 0,
893b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "16 May", 0, 0, 0, 0, 0, "16 May", 0, "2016", 0,
894b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "April 30", 0, 0, 0, 0, 0, 0, "April 30", 0, 0,
895b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "1998", 0, 0, 0, 0, 0, 0, 0, "1998", 0,
896b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "1", 0, 0, 0, 0, 0, 0, 0, "0001", 0,
897b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "3:00 pm Jan 1, 1997", 0, 0, 0, 0, 0, 0, 0, "0003", "3:00 PM January 1, 1997",
898b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
899b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#endif
900b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the correct behavior when parsing an array of inputs against an
905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * array of patterns, with known results.  The results are encoded after
906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the input strings in each row.
907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestBadInput135a()
910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode status = U_ZERO_ERROR;
912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  SimpleDateFormat* dateParse = new SimpleDateFormat(status);
913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_FAILURE(status)) {
91450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    dataerrln("Failed creating SimpleDateFormat with %s. Quitting test", u_errorName(status));
915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete dateParse;
916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return;
917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char* s;
919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UDate date;
920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const uint32_t PF_LENGTH = (int32_t)(sizeof(parseFormats)/sizeof(parseFormats[0]));
921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const uint32_t INPUT_LENGTH = (int32_t)(sizeof(inputStrings)/sizeof(inputStrings[0]));
922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  dateParse->applyPattern("d MMMM, yyyy");
924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  dateParse->adoptTimeZone(TimeZone::createDefault());
925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  s = "not parseable";
926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString thePat;
927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  logln(UnicodeString("Trying to parse \"") + s + "\" with " + dateParse->toPattern(thePat));
928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //try {
929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  date = dateParse->parse(s, status);
930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if (U_SUCCESS(status))
931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln((UnicodeString)"FAIL: Expected exception during parse");
932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //}
933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //catch(Exception ex) {
934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  else
935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Exception during parse: " + (int32_t)status);
936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  status = U_ZERO_ERROR;
937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //}
938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  for (uint32_t i = 0; i < INPUT_LENGTH; i += (PF_LENGTH + 1)) {
939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition parsePosition(0);
940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s( inputStrings[i]);
941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (uint32_t index = 0; index < PF_LENGTH;++index) {
942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      const char* expected = inputStrings[i + 1 + index];
943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      dateParse->applyPattern(parseFormats[index]);
944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      dateParse->adoptTimeZone(TimeZone::createDefault());
945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //try {
946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      parsePosition.setIndex(0);
947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      date = dateParse->parse(s, parsePosition);
948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if (parsePosition.getIndex() != 0) {
949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString s1, s2;
950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s.extract(0, parsePosition.getIndex(), s1);
951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s.extract(parsePosition.getIndex(), s.length(), s2);
952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (date == 0) {
953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          errln((UnicodeString)"ERROR: null result fmt=\"" +
954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     parseFormats[index] +
955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     "\" pos=" + parsePosition.getIndex() + " " +
956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     s1 + "|" + s2);
957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          UnicodeString result;
960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          ((DateFormat*)dateParse)->format(date, result);
961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          logln((UnicodeString)"Parsed \"" + s + "\" using \"" + dateParse->toPattern(thePat) + "\" to: " + result);
962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          if (expected == 0)
963b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln((UnicodeString)"FAIL: Expected parse failure, got " + result);
964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          else if (!(result == expected))
965b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln(UnicodeString("FAIL: Parse \"") + s + UnicodeString("\", expected ") + expected + UnicodeString(", got ") + result);
966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      else if (expected != 0) {
969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("FAIL: Expected ") + expected + " from \"" +
970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     s + "\" with \"" + dateParse->toPattern(thePat) + "\"");
971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //}
973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //catch(Exception ex) {
974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if (U_FAILURE(status))
975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"An exception was thrown during parse: " + (int32_t)status);
976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //}
977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  delete dateParse;
980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if (U_FAILURE(status))
981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
98350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the parsing of two-digit years.
988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestTwoDigitYear()
991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("dd/MM/yy", Locale::getUK(), ec);
994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
99550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("FAIL: SimpleDateFormat constructor - %s", u_errorName(ec));
996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    parse2DigitYear(fmt, "5/6/17", date(117, UCAL_JUNE, 5));
999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    parse2DigitYear(fmt, "4/6/34", date(34, UCAL_JUNE, 4));
1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
100150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
100350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::parse2DigitYear(DateFormat& fmt, const char* str, UDate expected)
1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d = fmt.parse(str, status);
1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString thePat;
1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Parsing \"") + str + "\" with " + ((SimpleDateFormat*)&fmt)->toPattern(thePat) +
1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "  => " + dateToString(d));
1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (d != expected) errln((UnicodeString)"FAIL: Expected " + expected);
1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status))
1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Got exception");
1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
102050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the formatting of time zones.
1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestDateFormatZone061()
1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date;
1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *formatter;
1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    date= 859248000000.0;
1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date 1997/3/25 00:00 GMT: " + date);
1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    formatter = new SimpleDateFormat((UnicodeString)"dd-MMM-yyyyy HH:mm", Locale::getUK(), status);
1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
103650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      dataerrln("Failed creating SimpleDateFormat with %s. Quitting test", u_errorName(status));
1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      delete formatter;
1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    formatter->adoptTimeZone(TimeZone::createTimeZone("GMT"));
1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString temp; formatter->format(date, temp);
1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Formatted in GMT to: " + temp);
1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate tempDate = formatter->parse(temp, status);
1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"Parsed to: " + dateToString(tempDate));
1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (tempDate != date) errln((UnicodeString)"FAIL: Expected " + dateToString(date));
1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Throwable t) {
1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"Date Formatter throws: " + (int32_t)status);
1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
105450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
105650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the formatting of time zones.
1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestDateFormatZone146()
1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *saveDefault = TimeZone::createDefault();
1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //try {
1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *thedefault = TimeZone::createTimeZone("GMT");
1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone::setDefault(*thedefault);
1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // java.util.Locale.setDefault(new java.util.Locale("ar", "", ""));
1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // check to be sure... its GMT all right
1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TimeZone *testdefault = TimeZone::createDefault();
1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString testtimezone;
1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        testdefault->getID(testtimezone);
1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (testtimezone == "GMT")
1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln("Test timezone = " + testtimezone);
1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else
1077b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            dataerrln("Test timezone should be GMT, not " + testtimezone);
1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // now try to use the default GMT time zone
1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        GregorianCalendar *greenwichcalendar =
1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            new GregorianCalendar(1997, 3, 4, 23, 0, status);
108350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        if (U_FAILURE(status)) {
108450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            dataerrln("Fail new GregorianCalendar: %s", u_errorName(status));
108550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        } else {
108650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            //*****************************greenwichcalendar.setTimeZone(TimeZone.getDefault());
108750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            //greenwichcalendar.set(1997, 3, 4, 23, 0);
108850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            // try anything to set hour to 23:00 !!!
108950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            greenwichcalendar->set(UCAL_HOUR_OF_DAY, 23);
109050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            // get time
109150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            UDate greenwichdate = greenwichcalendar->getTime(status);
109250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            // format every way
109350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            UnicodeString DATA [] = {
1094b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                UnicodeString("simple format:  "), UnicodeString("04/04/97 23:00 GMT"),
109550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UnicodeString("MM/dd/yy HH:mm z"),
1096b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                UnicodeString("full format:    "), UnicodeString("Friday, April 4, 1997 11:00:00 o'clock PM GMT"),
109750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UnicodeString("EEEE, MMMM d, yyyy h:mm:ss 'o''clock' a z"),
1098b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                UnicodeString("long format:    "), UnicodeString("April 4, 1997 11:00:00 PM GMT"),
109950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UnicodeString("MMMM d, yyyy h:mm:ss a z"),
110050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                UnicodeString("default format: "), UnicodeString("04-Apr-97 11:00:00 PM"),
110150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UnicodeString("dd-MMM-yy h:mm:ss a"),
110250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                UnicodeString("short format:   "), UnicodeString("4/4/97 11:00 PM"),
110350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UnicodeString("M/d/yy h:mm a")
110450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            };
110550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            int32_t DATA_length = (int32_t)(sizeof(DATA) / sizeof(DATA[0]));
110650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
110750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            for (int32_t i=0; i<DATA_length; i+=3) {
110850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                DateFormat *fmt = new SimpleDateFormat(DATA[i+2], Locale::getEnglish(), status);
110950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                if(failure(status, "new SimpleDateFormat")) break;
111050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                fmt->setCalendar(*greenwichcalendar);
111150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                UnicodeString result;
111250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                result = fmt->format(greenwichdate, result);
111350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                logln(DATA[i] + result);
111450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                if (result != DATA[i+1])
111550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    errln("FAIL: Expected " + DATA[i+1] + ", got " + result);
111650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                delete fmt;
111750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            }
1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //finally {
1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TimeZone::adoptDefault(saveDefault);
1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete testdefault;
1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete greenwichcalendar;
1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete thedefault;
1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
112950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
113150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the formatting of dates in different locales.
1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestLocaleDateFormat() // Bug 495
1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate testDate = date(97, UCAL_SEPTEMBER, 15);
113950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    DateFormat *dfFrench = DateFormat::createDateTimeInstance(DateFormat::FULL,
1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat::FULL, Locale::getFrench());
114150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    DateFormat *dfUS = DateFormat::createDateTimeInstance(DateFormat::FULL,
1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat::FULL, Locale::getUS());
114385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString expectedFRENCH ( "lundi 15 septembre 1997 00:00:00 heure avanc\\u00E9e du Pacifique", -1, US_INV );
1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectedFRENCH = expectedFRENCH.unescape();
1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //UnicodeString expectedUS ( "Monday, September 15, 1997 12:00:00 o'clock AM PDT" );
114685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString expectedUS ( "Monday, September 15, 1997 12:00:00 AM Pacific Daylight Time" );
1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date set to : " + dateToString(testDate));
114850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString out;
1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (dfUS == NULL || dfFrench == NULL){
1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateTimeInstance)");
1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete dfUS;
1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete dfFrench;
1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dfFrench->format(testDate, out);
1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date Formated with French Locale " + out);
1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(out == expectedFRENCH))
1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected " + expectedFRENCH);
1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    out.truncate(0);
1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dfUS->format(testDate, out);
1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date Formated with US Locale " + out);
1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(out == expectedUS))
1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected " + expectedUS);
1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete dfUS;
1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete dfFrench;
1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test DateFormat(Calendar) API
1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestDateFormatCalendar() {
1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *date=0, *time=0, *full=0;
1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal=0;
1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos;
1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate when;
1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a formatter for date fields. */
1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    date = DateFormat::createDateInstance(DateFormat::kShort, Locale::getUS());
1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (date == NULL) {
118385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("FAIL: createDateInstance failed");
1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a formatter for time fields. */
1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    time = DateFormat::createTimeInstance(DateFormat::kShort, Locale::getUS());
1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (time == NULL) {
1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: createTimeInstance failed");
1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a full format for output */
1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull,
1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                              Locale::getUS());
1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: createInstance failed");
1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a calendar */
1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal = Calendar::createInstance(Locale::getUS(), ec);
1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (cal == NULL || U_FAILURE(ec)) {
120550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln((UnicodeString)"FAIL: Calendar::createInstance failed with " +
1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              u_errorName(ec));
1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Parse the date */
1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->clear();
1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str = UnicodeString("4/5/2001", "");
1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pos.setIndex(0);
1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    date->parse(str, *cal, pos);
1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pos.getIndex() != str.length()) {
1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: DateFormat::parse(4/5/2001) failed at " +
1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              pos.getIndex());
1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Parse the time */
1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str = UnicodeString("5:45 PM", "");
1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pos.setIndex(0);
1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    time->parse(str, *cal, pos);
1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pos.getIndex() != str.length()) {
1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: DateFormat::parse(17:45) failed at " +
1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              pos.getIndex());
1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
123050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Check result */
1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    when = cal->getTime(ec);
1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: cal->getTime() failed with " + u_errorName(ec));
1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.truncate(0);
1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(when, str);
1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Thursday, April 5, 2001 5:45:00 PM PDT 986517900000
1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (when == 986517900000.0) {
1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("Ok: Parsed result: " + str);
1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Parsed result: " + str + ", exp 4/5/2001 5:45 PM");
1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
124650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FAIL:
1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete date;
1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete time;
1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test DateFormat's parsing of space characters.  See jitterbug 1916.
1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestSpaceParsing() {
1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // pattern, input, expected parse or NULL if expect parse failure
1261b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "MMMM d yy", " 04 05 06",  "2006 04 05 00:00:00",
1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,        "04 05 06",   "2006 04 05 00:00:00",
1263b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1264b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "MM d yy",   " 04 05 06",    "2006 04 05 00:00:00",
1265b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "04 05 06",     "2006 04 05 00:00:00",
1266b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "04/05/06",     "2006 04 05 00:00:00",
1267b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "04-05-06",     "2006 04 05 00:00:00",
1268b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "04.05.06",     "2006 04 05 00:00:00",
1269b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "04 / 05 / 06", "2006 04 05 00:00:00",
1270b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "Apr / 05/ 06", "2006 04 05 00:00:00",
1271b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "Apr-05-06",    "2006 04 05 00:00:00",
1272b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "Apr 05, 2006", "2006 04 05 00:00:00",
1273b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM d yy", " Apr 05 06", "2006 04 05 00:00:00",
1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,        "Apr 05 06",  "2006 04 05 00:00:00",
1276b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,        "Apr05 06",   "2006 04 05 00:00:00",
1277b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1278b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "hh:mm:ss a", "12:34:56 PM", "1970 01 01 12:34:56",
1279b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,         "12:34:56PM",  "1970 01 01 12:34:56",
1280b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,         "12.34.56PM",  "1970 01 01 12:34:56",
1281b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,         "12-34-56 PM", "1970 01 01 12:34:56",
1282b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,         "12 : 34 : 56  PM", "1970 01 01 12:34:56",
1283b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1284b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "MM d yy 'at' hh:mm:ss a", "04/05/06 12:34:56 PM", "2006 04 05 12:34:56",
1285b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1286b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "MMMM dd yyyy hh:mm a", "September 27, 1964 21:56 PM", "1964 09 28 09:56:00",
1287b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,                   "November 4, 2008 0:13 AM",    "2008 11 04 00:13:00",
1288b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1289b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "HH'h'mm'min'ss's'", "12h34min56s", "1970 01 01 12:34:56",
1290b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,                "12h34mi56s",  "1970 01 01 12:34:56",
1291b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,                "12h34m56s",   "1970 01 01 12:34:56",
1292b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NULL,                "12:34:56",    "1970 01 01 12:34:56"
1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectParse(DATA, DATA_len, Locale("en"));
1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test handling of "HHmmss" pattern.
1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestExactCountFormat() {
1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // pattern, input, expected parse or NULL if expect parse failure
1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "HHmmss", "123456", "1970 01 01 12:34:56",
1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "12345",  "1970 01 01 01:23:45",
1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "1234",   NULL,
1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "00-05",  NULL,
1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "12-34",  NULL,
1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "00+05",  NULL,
1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ahhmm",  "PM730",  "1970 01 01 19:30:00",
1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectParse(DATA, DATA_len, Locale("en"));
1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test handling of white space.
1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestWhiteSpaceParsing() {
1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd",
132650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // pattern, input, expected parse or null if expect parse failure
132850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Pattern space run should parse input text space run
1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MM   d yy",   " 04 01 03",    "2003 04 01",
1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,          " 04  01   03 ", "2003 04 01",
1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
133450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectParse(DATA, DATA_len, Locale("en"));
1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestInvalidPattern() {
1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat f(UnicodeString("Yesterday"), ec);
134250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(ec)) {
134350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(ec));
134450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
134550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString out;
1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos;
1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    f.format((UDate)0, out, pos);
1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(out);
1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // The bug is that the call to format() will crash.  By not
1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // crashing, the test passes.
1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGreekMay() {
1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date = -9896080848000.0;
1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("EEEE, dd MMMM yyyy h:mm:ss a", Locale("el", "", ""), ec);
135850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(ec)) {
135950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(ec));
136050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
136150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(date, str);
1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos(0);
1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d2 = fmt.parse(str, pos);
1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (date != d2) {
1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: unable to parse strings where case-folding changes length");
1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestStandAloneMonths()
1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1376b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1377b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy LLLL dd H:mm:ss", "F",  "2004 03 10 16:36:31", "2004 March 10 16:36:31",
1379b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
138050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 01 01 0:00:00", "January",   "1970 01 01 0:00:00",
1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 02 01 0:00:00", "February",  "1970 02 01 0:00:00",
1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 03 01 0:00:00", "March",     "1970 03 01 0:00:00",
1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 04 01 0:00:00", "April",     "1970 04 01 0:00:00",
1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 05 01 0:00:00", "May",       "1970 05 01 0:00:00",
1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 06 01 0:00:00", "June",      "1970 06 01 0:00:00",
1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 07 01 0:00:00", "July",      "1970 07 01 0:00:00",
1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 08 01 0:00:00", "August",    "1970 08 01 0:00:00",
1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 09 01 0:00:00", "September", "1970 09 01 0:00:00",
1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 10 01 0:00:00", "October",   "1970 10 01 0:00:00",
1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 11 01 0:00:00", "November",  "1970 11 01 0:00:00",
1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 12 01 0:00:00", "December",  "1970 12 01 0:00:00",
139350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 01 01 0:00:00", "Jan", "1970 01 01 0:00:00",
1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 02 01 0:00:00", "Feb", "1970 02 01 0:00:00",
1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 03 01 0:00:00", "Mar", "1970 03 01 0:00:00",
1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 04 01 0:00:00", "Apr", "1970 04 01 0:00:00",
1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 05 01 0:00:00", "May", "1970 05 01 0:00:00",
1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 06 01 0:00:00", "Jun", "1970 06 01 0:00:00",
1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 07 01 0:00:00", "Jul", "1970 07 01 0:00:00",
1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 08 01 0:00:00", "Aug", "1970 08 01 0:00:00",
1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 09 01 0:00:00", "Sep", "1970 09 01 0:00:00",
1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 10 01 0:00:00", "Oct", "1970 10 01 0:00:00",
1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 11 01 0:00:00", "Nov", "1970 11 01 0:00:00",
1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 12 01 0:00:00", "Dec", "1970 12 01 0:00:00",
1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
140750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *CS_DATA[] = {
1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1411b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1412b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1413b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy LLLL dd H:mm:ss", "F",  "2004 04 10 16:36:31", "2004 duben 10 16:36:31",
1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MMMM dd H:mm:ss", "F",  "2004 04 10 16:36:31", "2004 dubna 10 16:36:31",
1416b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1417b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
141850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 01 01 0:00:00", "leden",               "1970 01 01 0:00:00",
1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 02 01 0:00:00", "\\u00FAnor",           "1970 02 01 0:00:00",
1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 03 01 0:00:00", "b\\u0159ezen",         "1970 03 01 0:00:00",
1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 04 01 0:00:00", "duben",               "1970 04 01 0:00:00",
1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 05 01 0:00:00", "kv\\u011Bten",         "1970 05 01 0:00:00",
1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 06 01 0:00:00", "\\u010Derven",         "1970 06 01 0:00:00",
1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 07 01 0:00:00", "\\u010Dervenec",       "1970 07 01 0:00:00",
1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 08 01 0:00:00", "srpen",               "1970 08 01 0:00:00",
1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 09 01 0:00:00", "z\\u00E1\\u0159\\u00ED", "1970 09 01 0:00:00",
1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 10 01 0:00:00", "\\u0159\\u00EDjen",     "1970 10 01 0:00:00",
1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 11 01 0:00:00", "listopad",            "1970 11 01 0:00:00",
1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 12 01 0:00:00", "prosinec",            "1970 12 01 0:00:00",
1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 01 01 0:00:00", "1.",  "1970 01 01 0:00:00",
1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 02 01 0:00:00", "2.",  "1970 02 01 0:00:00",
1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 03 01 0:00:00", "3.",  "1970 03 01 0:00:00",
1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 04 01 0:00:00", "4.",  "1970 04 01 0:00:00",
1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 05 01 0:00:00", "5.",  "1970 05 01 0:00:00",
1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 06 01 0:00:00", "6.",  "1970 06 01 0:00:00",
1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 07 01 0:00:00", "7.",  "1970 07 01 0:00:00",
1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 08 01 0:00:00", "8.",  "1970 08 01 0:00:00",
1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 09 01 0:00:00", "9.",  "1970 09 01 0:00:00",
1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 10 01 0:00:00", "10.", "1970 10 01 0:00:00",
1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 11 01 0:00:00", "11.", "1970 11 01 0:00:00",
1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 12 01 0:00:00", "12.", "1970 12 01 0:00:00",
1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
144550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestStandAloneDays()
1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 04 0:00:00", "Sunday",    "1970 01 04 0:00:00",
1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 05 0:00:00", "Monday",    "1970 01 05 0:00:00",
1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 06 0:00:00", "Tuesday",   "1970 01 06 0:00:00",
1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 07 0:00:00", "Wednesday", "1970 01 07 0:00:00",
1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 01 0:00:00", "Thursday",  "1970 01 01 0:00:00",
1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 02 0:00:00", "Friday",    "1970 01 02 0:00:00",
1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 03 0:00:00", "Saturday",  "1970 01 03 0:00:00",
146250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 04 0:00:00", "Sun", "1970 01 04 0:00:00",
1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 05 0:00:00", "Mon", "1970 01 05 0:00:00",
1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 06 0:00:00", "Tue", "1970 01 06 0:00:00",
1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 07 0:00:00", "Wed", "1970 01 07 0:00:00",
1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 01 0:00:00", "Thu", "1970 01 01 0:00:00",
1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 02 0:00:00", "Fri", "1970 01 02 0:00:00",
1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 03 0:00:00", "Sat", "1970 01 03 0:00:00",
1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
147150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *CS_DATA[] = {
1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 04 0:00:00", "ned\\u011Ble",       "1970 01 04 0:00:00",
1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 05 0:00:00", "pond\\u011Bl\\u00ED", "1970 01 05 0:00:00",
1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 06 0:00:00", "\\u00FAter\\u00FD",   "1970 01 06 0:00:00",
1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 07 0:00:00", "st\\u0159eda",       "1970 01 07 0:00:00",
1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 01 0:00:00", "\\u010Dtvrtek",      "1970 01 01 0:00:00",
1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 02 0:00:00", "p\\u00E1tek",        "1970 01 02 0:00:00",
1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 03 0:00:00", "sobota",            "1970 01 03 0:00:00",
148250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 04 0:00:00", "ne",      "1970 01 04 0:00:00",
1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 05 0:00:00", "po",      "1970 01 05 0:00:00",
1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 06 0:00:00", "\\u00FAt", "1970 01 06 0:00:00",
1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 07 0:00:00", "st",      "1970 01 07 0:00:00",
1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 01 0:00:00", "\\u010Dt", "1970 01 01 0:00:00",
1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 02 0:00:00", "p\\u00E1", "1970 01 02 0:00:00",
1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 03 0:00:00", "so",      "1970 01 03 0:00:00",
1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
149150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestNarrowNames()
1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MM dd HH:mm:ss",
1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MMMMM dd H:mm:ss", "2004 03 10 16:36:31", "2004 M 10 16:36:31",
1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy LLLLL dd H:mm:ss",  "2004 03 10 16:36:31", "2004 M 10 16:36:31",
150350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 01 01 0:00:00", "J",
1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 02 01 0:00:00", "F",
1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 03 01 0:00:00", "M",
1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 04 01 0:00:00", "A",
1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 05 01 0:00:00", "M",
1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 06 01 0:00:00", "J",
1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 07 01 0:00:00", "J",
1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 08 01 0:00:00", "A",
1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 09 01 0:00:00", "S",
1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 10 01 0:00:00", "O",
1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 11 01 0:00:00", "N",
1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 12 01 0:00:00", "D",
151650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 01 01 0:00:00", "J",
1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 02 01 0:00:00", "F",
1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 03 01 0:00:00", "M",
1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 04 01 0:00:00", "A",
1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 05 01 0:00:00", "M",
1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 06 01 0:00:00", "J",
1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 07 01 0:00:00", "J",
1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 08 01 0:00:00", "A",
1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 09 01 0:00:00", "S",
1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 10 01 0:00:00", "O",
1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 11 01 0:00:00", "N",
1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 12 01 0:00:00", "D",
1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 04 0:00:00", "S",
1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 05 0:00:00", "M",
1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 06 0:00:00", "T",
1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 07 0:00:00", "W",
1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 01 0:00:00", "T",
1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 02 0:00:00", "F",
1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 03 0:00:00", "S",
153750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 04 0:00:00", "S",
1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 05 0:00:00", "M",
1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 06 0:00:00", "T",
1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 07 0:00:00", "W",
1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 01 0:00:00", "T",
1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 02 0:00:00", "F",
1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 03 0:00:00", "S",
1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
154650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char *CS_DATA[] = {
1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MM dd HH:mm:ss",
1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy LLLLL dd H:mm:ss", "2004 04 10 16:36:31", "2004 d 10 16:36:31",
1551b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "yyyy MMMMM dd H:mm:ss", "2004 04 10 16:36:31", "2004 4 10 16:36:31",
1552b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1553b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 01 01 0:00:00", "1",
1554b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 02 01 0:00:00", "2",
1555b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 03 01 0:00:00", "3",
1556b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 04 01 0:00:00", "4",
1557b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 05 01 0:00:00", "5",
1558b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 06 01 0:00:00", "6",
1559b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 07 01 0:00:00", "7",
1560b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 08 01 0:00:00", "8",
1561b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 09 01 0:00:00", "9",
1562b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 10 01 0:00:00", "10",
1563b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 11 01 0:00:00", "11",
1564b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            "MMMMM", "1970 12 01 0:00:00", "12",
156550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 01 01 0:00:00", "l",
1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 02 01 0:00:00", "\\u00FA",
1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 03 01 0:00:00", "b",
1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 04 01 0:00:00", "d",
1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 05 01 0:00:00", "k",
1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 06 01 0:00:00", "\\u010D",
1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 07 01 0:00:00", "\\u010D",
1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 08 01 0:00:00", "s",
1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 09 01 0:00:00", "z",
1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 10 01 0:00:00", "\\u0159",
1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 11 01 0:00:00", "l",
1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 12 01 0:00:00", "p",
1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 04 0:00:00", "N",
1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 05 0:00:00", "P",
1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 06 0:00:00", "\\u00DA",
1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 07 0:00:00", "S",
1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 01 0:00:00", "\\u010C",
1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 02 0:00:00", "P",
1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 03 0:00:00", "S",
1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 04 0:00:00", "N",
1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 05 0:00:00", "P",
1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 06 0:00:00", "\\u00DA",
1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 07 0:00:00", "S",
1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 01 0:00:00", "\\u010C",
1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 02 0:00:00", "P",
1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 03 0:00:00", "S",
1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
159550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      expectFormat(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      expectFormat(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestEras()
1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd",
1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy G",    "fp", "1951 07 17", "July 17 1951 AD",          "1951 07 17",
1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GG",   "fp", "1951 07 17", "July 17 1951 AD",          "1951 07 17",
1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGG",  "fp", "1951 07 17", "July 17 1951 AD",          "1951 07 17",
1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGGG", "fp", "1951 07 17", "July 17 1951 Anno Domini", "1951 07 17",
1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy G",    "fp", "-438 07 17", "July 17 0439 BC",            "-438 07 17",
1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GG",   "fp", "-438 07 17", "July 17 0439 BC",            "-438 07 17",
1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGG",  "fp", "-438 07 17", "July 17 0439 BC",            "-438 07 17",
1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGGG", "fp", "-438 07 17", "July 17 0439 Before Christ", "-438 07 17",
1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
161550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestQuarters()
1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd",
1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Q",    "fp", "1970 01 01", "1",           "1970 01 01",
1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "QQ",   "fp", "1970 04 01", "02",          "1970 04 01",
1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "QQQ",  "fp", "1970 07 01", "Q3",          "1970 07 01",
1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "QQQQ", "fp", "1970 10 01", "4th quarter", "1970 10 01",
1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "q",    "fp", "1970 01 01", "1",           "1970 01 01",
1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "qq",   "fp", "1970 04 01", "02",          "1970 04 01",
1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "qqq",  "fp", "1970 07 01", "Q3",          "1970 07 01",
1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "qqqq", "fp", "1970 10 01", "4th quarter", "1970 10 01",
1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
163450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test parsing.  Input is an array that starts with the following
1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * header:
1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [0]   = pattern string to parse [i+2] with
1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * followed by test cases, each of which is 3 array elements:
1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i]   = pattern, or NULL to reuse prior pattern
1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+1] = input string
1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+2] = expected parse result (parsed with pattern [0])
1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If expect parse failure, then [i+2] should be NULL.
1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::expectParse(const char** data, int32_t data_length,
1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 const Locale& loc) {
1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UDate FAIL = (UDate) -1;
1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UnicodeString FAIL_STR("parse failure");
1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = 0;
1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("", loc, ec);
1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat ref(data[i++], loc, ec);
1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat gotfmt("G yyyy MM dd HH:mm:ss z", loc, ec);
1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
166350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("FAIL: SimpleDateFormat constructor - %s", u_errorName(ec));
1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* currentPat = NULL;
1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (i<data_length) {
1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pattern  = data[i++];
1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* input    = data[i++];
1671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* expected = data[i++];
1672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ec = U_ZERO_ERROR;
1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pattern != NULL) {
1675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.applyPattern(pattern);
1676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            currentPat = pattern;
1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate got = fmt.parse(input, ec);
1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString gotstr(FAIL_STR);
1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(ec)) {
1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            got = FAIL;
1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            gotstr.remove();
1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            gotfmt.format(got, gotstr);
1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode ec2 = U_ZERO_ERROR;
1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate exp = FAIL;
1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString expstr(FAIL_STR);
1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (expected != NULL) {
1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            expstr = expected;
1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            exp = ref.parse(expstr, ec2);
1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(ec2)) {
1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // This only happens if expected is in wrong format --
1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // should never happen once test is debugged.
1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln("FAIL: Internal test error");
1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                return;
1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (got == exp) {
1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"Ok: " + input + " x " +
170350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                  currentPat + " => " + gotstr);
1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: " + input + " x " +
1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  currentPat + " => " + gotstr + ", expected " +
1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  expstr);
1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
170950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test formatting and parsing.  Input is an array that starts
1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with the following header:
1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [0]   = pattern string to parse [i+2] with
1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * followed by test cases, each of which is 3 array elements:
1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i]   = pattern, or null to reuse prior pattern
1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+1] = control string, either "fp", "pf", or "F".
1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+2..] = data strings
1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The number of data strings depends on the control string.
1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Examples:
1726b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'f': Format date [i+2] (as parsed using pattern [0]) and expect string [i+3].
1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'p': Parse string [i+3] and expect date [i+4].
1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1730b13da9df870a61b11249bf741347908dbea0edd8Jean-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"
1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'F': Format date [i+2] and expect string [i+3],
1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      then parse string [i+3] and expect date [i+2].
1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1734b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'p': Parse string [i+2] and expect date [i+3].
1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'f': Format date [i+3] and expect string [i+4].
1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::expect(const char** data, int32_t data_length,
1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            const Locale& loc) {
1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = 0;
1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str, str2;
1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("", loc, ec);
1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat ref(data[i++], loc, ec);
1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat univ("EE G yyyy MM dd HH:mm:ss.SSS z", loc, ec);
174650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(ec)) {
174750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(ec));
174850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
174950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString currentPat;
1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (i<data_length) {
1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pattern  = data[i++];
1754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pattern != NULL) {
1755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.applyPattern(pattern);
1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            currentPat = pattern;
1757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* control = data[i++];
1760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (uprv_strcmp(control, "fp") == 0) {
1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'f'
1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* datestr = data[i++];
1764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* string = data[i++];
1765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate date = ref.parse(ctou(datestr), ec);
1766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(string),
1769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         fmt.format(date, str.remove()));
1770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'p'
1771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            datestr = data[i++];
1772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            date = ref.parse(ctou(datestr), ec);
1773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate parsedate = fmt.parse(ctou(string), ec);
1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
1777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(date, str.remove()),
1778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(parsedate, str2.remove()));
1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else if (uprv_strcmp(control, "pf") == 0) {
1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'p'
1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* string = data[i++];
1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* datestr = data[i++];
1786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate date = ref.parse(ctou(datestr), ec);
1787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate parsedate = fmt.parse(ctou(string), ec);
1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
1791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(date, str.remove()),
1792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(parsedate, str2.remove()));
1793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'f'
1795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            string = data[i++];
1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(string),
1798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         fmt.format(date, str.remove()));
1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else if (uprv_strcmp(control, "F") == 0) {
1802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* datestr  = data[i++];
1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* string   = data[i++];
1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate date = ref.parse(ctou(datestr), ec);
1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(string),
1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         fmt.format(date, str.remove()));
1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate parsedate = fmt.parse(string, ec);
1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(date, str.remove()),
1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(parsedate, str2.remove()));
1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: Invalid control string " + control);
1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test formatting.  Input is an array that starts
1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with the following header:
1828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [0]   = pattern string to parse [i+2] with
1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * followed by test cases, each of which is 3 array elements:
1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i]   = pattern, or null to reuse prior pattern
1834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+1] = data string a
1835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+2] = data string b
1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Examples:
1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Format date [i+1] and expect string [i+2].
1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "y/M/d H:mm:ss.SSSS", "2004/3/10 16:36:31.5679", "2004 03 10 16:36:31.567"
1841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::expectFormat(const char** data, int32_t data_length,
1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            const Locale& loc) {
1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = 0;
1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str, str2;
1847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("", loc, ec);
1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat ref(data[i++], loc, ec);
1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat univ("EE G yyyy MM dd HH:mm:ss.SSS z", loc, ec);
185050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(ec)) {
185150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(ec));
185250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
185350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
1854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString currentPat;
1856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (i<data_length) {
1858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pattern  = data[i++];
1859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pattern != NULL) {
1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.applyPattern(pattern);
1861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            currentPat = pattern;
1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* datestr = data[i++];
1865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* string = data[i++];
1866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate date = ref.parse(ctou(datestr), ec);
1867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!assertSuccess("parse", ec)) return;
1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        ctou(string),
1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        fmt.format(date, str.remove()));
1871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGenericTime() {
1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const Locale en("en");
1876b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  // Note: We no longer parse strings in different styles.
1877b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/*
1878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char* ZDATA[] = {
1879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm zzz",
1880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // round trip
1881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Standard Time",
1882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
1883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm vvvv", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
1884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm v", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PT",
1885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // non-generic timezone string influences dst offset even if wrong for date/time
1886b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1887b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1888b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1889b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // generic timezone generates dst offset appropriate for local time
1891b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1892b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1893b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1894b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // daylight savings time transition edge cases.
1896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // time to parse does not really exist, PT interpreted as earlier time
1897b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1898b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1899b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1900b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1901b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1902b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm", "pf", "2005/4/3 2:30", "2005 04 03 03:30 PDT", "2005/4/3 3:30",
1904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // time to parse is ambiguous, PT interpreted as later time
1905b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1906b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1907b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1909b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1910b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1911b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1912b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1913b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1914b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm", "pf", "2004/10/31 1:30", "2004 10 31 01:30 PST", "2004/10/31 1:30",
1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
1917b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho*/
1918b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  const char* ZDATA[] = {
1919b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "yyyy MM dd HH:mm zzz",
1920b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // round trip
1921b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm zzzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Standard Time",
1922b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm zzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
1923b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm vvvv", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
1924b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm v", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PT",
1925b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // non-generic timezone string influences dst offset even if wrong for date/time
1926b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "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",
1927b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "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",
1928b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // generic timezone generates dst offset appropriate for local time
1929b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm zzz", "pf", "2004/1/1 1:00 PST", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
1930b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm vvvv", "pf", "2004/1/1 1:00 Pacific Time", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
1931b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm zzz", "pf", "2004/7/1 1:00 PDT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 PDT",
1932b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm vvvv", "pf", "2004/7/1 1:00 Pacific Time", "2004 07 01 01:00 PDT", "2004/7/1 1:00 Pacific Time",
1933b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // daylight savings time transition edge cases.
1934b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // time to parse does not really exist, PT interpreted as earlier time
1935b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "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",
1936b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "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",
1937b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "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",
1938b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm", "pf", "2005/4/3 2:30", "2005 04 03 03:30 PDT", "2005/4/3 3:30",
1939b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // time to parse is ambiguous, PT interpreted as later time
1940b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "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",
1941b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm", "pf", "2005/10/30 1:30 PT", "2005 10 30 01:30 PST", "2005/10/30 1:30",
1942b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1943b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "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",
1944b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "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",
1945b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "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",
1946b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "y/M/d H:mm", "pf", "2004/10/31 1:30", "2004 10 31 01:30 PST", "2004/10/31 1:30",
1947b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  };
1948b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const int32_t ZDATA_length = sizeof(ZDATA)/ sizeof(ZDATA[0]);
1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  expect(ZDATA, ZDATA_length, en);
1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode status = U_ZERO_ERROR;
1953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1954b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  logln("cross format/parse tests");    // Note: We no longer support cross format/parse
1955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString basepat("yy/MM/dd H:mm ");
195650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  SimpleDateFormat formats[] = {
1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "vvv", en, status),
1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "vvvv", en, status),
1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "zzz", en, status),
1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "zzzz", en, status)
1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
196250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  if (U_FAILURE(status)) {
196350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(status));
196450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return;
196550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
1966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const int32_t formats_length = sizeof(formats)/sizeof(formats[0]);
1967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString test;
1969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  SimpleDateFormat univ("yyyy MM dd HH:mm zzz", en, status);
1970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ASSERT_OK(status);
197150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  const UnicodeString times[] = {
197250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    "2004 01 02 03:04 PST",
197350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    "2004 07 08 09:10 PDT"
1974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
1975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  int32_t times_length = sizeof(times)/sizeof(times[0]);
1976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  for (int i = 0; i < times_length; ++i) {
1977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = univ.parse(times[i], status);
1978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("\ntime: ") + d);
1979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int j = 0; j < formats_length; ++j) {
1980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      test.remove();
1981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      formats[j].format(d, test);
1982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      logln("\ntest: '" + test + "'");
1983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      for (int k = 0; k < formats_length; ++k) {
1984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate t = formats[k].parse(test, status);
1985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_SUCCESS(status)) {
1986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          if (d != t) {
198750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            errln((UnicodeString)"FAIL: format " + k +
198850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                  " incorrectly parsed output of format " + j +
1989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " (" + test + "), returned " +
1990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  dateToString(t) + " instead of " + dateToString(d));
1991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          } else {
1992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"OK: format " + k + " parsed ok");
1993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          }
1994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (status == U_PARSE_ERROR) {
199550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          errln((UnicodeString)"FAIL: format " + k +
199650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                " could not parse output of format " + j +
1997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                " (" + test + ")");
1998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
2000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
2002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGenericTimeZoneOrder() {
2005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // generic times should parse the same no matter what the placement of the time zone string
2006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2007b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  // Note: We no longer support cross style format/parse
2008b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
2009b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //const char* XDATA[] = {
2010b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "yyyy MM dd HH:mm zzz",
2011b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  // standard time, explicit daylight/standard
2012b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "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",
2013b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "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",
2014b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "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",
2015b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
2016b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  // standard time, generic
2017b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "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",
2018b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "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",
2019b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "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",
2020b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
2021b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  // dahylight time, explicit daylight/standard
2022b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "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",
2023b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "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",
2024b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "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",
2025b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
2026b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  // daylight time, generic
2027b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "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",
2028b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "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",
2029b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //  "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",
2030b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  //};
2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char* XDATA[] = {
2032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "yyyy MM dd HH:mm zzz",
2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // standard time, explicit daylight/standard
2034b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "y/M/d H:mm zzz", "pf", "2004/1/1 1:00 PST", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
2035b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "y/M/d zzz H:mm", "pf", "2004/1/1 PST 1:00", "2004 01 01 01:00 PST", "2004/1/1 PST 1:00",
2036b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "zzz y/M/d H:mm", "pf", "PST 2004/1/1 1:00", "2004 01 01 01:00 PST", "PST 2004/1/1 1:00",
2037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // standard time, generic
2039b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "y/M/d H:mm vvvv", "pf", "2004/1/1 1:00 Pacific Time", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
2040b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "y/M/d vvvv H:mm", "pf", "2004/1/1 Pacific Time 1:00", "2004 01 01 01:00 PST", "2004/1/1 Pacific Time 1:00",
2041b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "vvvv y/M/d H:mm", "pf", "Pacific Time 2004/1/1 1:00", "2004 01 01 01:00 PST", "Pacific Time 2004/1/1 1:00",
2042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // dahylight time, explicit daylight/standard
2044b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "y/M/d H:mm zzz", "pf", "2004/7/1 1:00 PDT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 PDT",
2045b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "y/M/d zzz H:mm", "pf", "2004/7/1 PDT 1:00", "2004 07 01 01:00 PDT", "2004/7/1 PDT 1:00",
2046b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "zzz y/M/d H:mm", "pf", "PDT 2004/7/1 1:00", "2004 07 01 01:00 PDT", "PDT 2004/7/1 1:00",
2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // daylight time, generic
2049b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "y/M/d H:mm v", "pf", "2004/7/1 1:00 PT", "2004 07 01 01:00 PDT", "2004/7/1 1:00 PT",
2050b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "y/M/d v H:mm", "pf", "2004/7/1 PT 1:00", "2004 07 01 01:00 PDT", "2004/7/1 PT 1:00",
2051b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "v y/M/d H:mm", "pf", "PT 2004/7/1 1:00", "2004 07 01 01:00 PDT", "PT 2004/7/1 1:00",
2052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
2053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const int32_t XDATA_length = sizeof(XDATA)/sizeof(XDATA[0]);
2054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  Locale en("en");
2055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  expect(XDATA, XDATA_length, en);
2056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestZTimeZoneParsing(void) {
2059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const Locale en("en");
2061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString test;
2062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //SimpleDateFormat univ("yyyy-MM-dd'T'HH:mm Z", en, status);
2063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat univ("HH:mm Z", en, status);
206450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "construct SimpleDateFormat", TRUE)) return;
2065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const TimeZone *t = TimeZone::getGMT();
2066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    univ.setTimeZone(*t);
206750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    univ.setLenient(false);
2069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pp(0);
2070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    struct {
2071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString input;
2072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString expected_result;
2073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } tests[] = {
2074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 -0200", "13:00 +0000" },
2075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 +0200", "09:00 +0000" },
2076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 +0400", "07:00 +0000" },
2077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 +0530", "05:30 +0000" }
2078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
2079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result;
2081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t tests_length = sizeof(tests)/sizeof(tests[0]);
2082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int i = 0; i < tests_length; ++i) {
2083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        pp.setIndex(0);
2084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d = univ.parse(tests[i].input, pp);
2085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(pp.getIndex() != tests[i].input.length()){
2086b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln("Test %i: setZoneString() did not succeed. Consumed: %i instead of %i",
2087b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                  i, pp.getIndex(), tests[i].input.length());
2088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
208950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        }
2090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        result.remove();
2091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        univ.format(d, result);
2092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(result != tests[i].expected_result) {
2093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("Expected " + tests[i].expected_result
2094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  + " got " + result);
2095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
2096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("SUCCESS: Parsed " + tests[i].input
2098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              + " got " + result
2099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              + " expected " + tests[i].expected_result);
2100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestHost(void)
2104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef U_WINDOWS
2106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Win32DateTimeTest::testLocales(this);
2107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
2108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Relative Date Tests
2111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
211250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid DateFormatTest::TestRelative(int daysdelta,
2113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  const Locale& loc,
2114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  const char *expectChars) {
2115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char banner[25];
2116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sprintf(banner, "%d", daysdelta);
2117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString bannerStr(banner, "");
211850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
212050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos(0);
2122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString test;
2123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale en("en");
2124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *fullrelative = DateFormat::createDateInstance(DateFormat::kFullRelative, loc);
2125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (fullrelative == NULL) {
212785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("DateFormat::createDateInstance(DateFormat::kFullRelative, %s) returned NULL", loc.getName());
2128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full         = DateFormat::createDateInstance(DateFormat::kFull        , loc);
213250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
2134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("DateFormat::createDateInstance(DateFormat::kFull, %s) returned NULL", loc.getName());
2135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
213750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *en_full =         DateFormat::createDateInstance(DateFormat::kFull,         en);
213950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (en_full == NULL) {
2141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("DateFormat::createDateInstance(DateFormat::kFull, en) returned NULL");
2142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
214450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *en_fulltime =         DateFormat::createDateTimeInstance(DateFormat::kFull,DateFormat::kFull,en);
214650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (en_fulltime == NULL) {
2148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, en) returned NULL");
2149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
215150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result;
2153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString normalResult;
2154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString expect;
2155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString parseResult;
215650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *c = Calendar::createInstance(status);
2158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Today = Today
2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->setTime(Calendar::getNow(), status);
2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(daysdelta != 0) {
2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        c->add(Calendar::DATE,daysdelta,status);
2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
2165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // calculate the expected string
2167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(expectChars != NULL) {
2168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect = expectChars;
2169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        full->format(*c, expect, pos); // expected = normal full
2171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
217250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullrelative   ->format(*c, result, pos);
2174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    en_full        ->format(*c, normalResult, pos);
217550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(result != expect) {
2177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Relative Format ["+bannerStr+"] of "+normalResult+" failed, expected "+expect+" but got " + result);
2178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("PASS: Relative Format ["+bannerStr+"] of "+normalResult+" got " + result);
2180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
218150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
218250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //verify
2184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = fullrelative->parse(result, status);
2185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
218650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString parseFormat; // parse rel->format full
2188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    en_full->format(d, parseFormat, status);
218950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString origFormat;
2191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    en_full->format(*c, origFormat, pos);
219250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(parseFormat!=origFormat) {
2194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Relative Parse ["+bannerStr+"] of "+result+" failed, expected "+parseFormat+" but got "+origFormat);
2195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("PASS: Relative Parse ["+bannerStr+"] of "+result+" passed, got "+parseFormat);
2197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullrelative;
2201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete en_fulltime;
2202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete en_full;
2203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete c;
2204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelative(void)
2208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale en("en");
2210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 0, en, "Today");
2211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative(-1, en, "Yesterday");
2212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 1, en, "Tomorrow");
2213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 2, en, NULL);
2214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( -2, en, NULL);
2215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 3, en, NULL);
2216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( -3, en, NULL);
2217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 300, en, NULL);
2218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( -300, en, NULL);
2219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelativeClone(void)
2222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
2224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Verify that a cloned formatter gives the same results
2225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    and is useable after the original has been deleted.
2226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
2227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc("en");
2229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate now = Calendar::getNow();
2230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full = DateFormat::createDateInstance(DateFormat::kFullRelative, loc);
2231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
223285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("FAIL: Can't create Relative date instance");
2233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result1;
2236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(now, result1, status);
2237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Format *fullClone = full->clone();
2238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = NULL;
2240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result2;
2242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullClone->format(now, result2, status);
2243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
2244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result1 != result2) {
2245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Clone returned different result from non-clone.");
2246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullClone;
2248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestHostClone(void)
2251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
2253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Verify that a cloned formatter gives the same results
2254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    and is useable after the original has been deleted.
2255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
2256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // This is mainly important on Windows.
2257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc("en_US@compat=host");
2259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate now = Calendar::getNow();
2260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full = DateFormat::createDateInstance(DateFormat::kFull, loc);
2261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
226285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("FAIL: Can't create Relative date instance");
2263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result1;
2266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(now, result1, status);
2267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Format *fullClone = full->clone();
2268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = NULL;
2270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result2;
2272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullClone->format(now, result2, status);
2273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
2274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result1 != result2) {
2275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Clone returned different result from non-clone.");
2276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullClone;
2278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestTimeZoneDisplayName()
2281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // This test data was ported from ICU4J.  Don't know why the 6th column in there because it's not being
2283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // used currently.
2284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *fallbackTests[][6]  = {
2285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
2287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "PST", "America/Los_Angeles" },
2288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "V", "PST", "America/Los_Angeles" },
2289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "Pacific Standard Time", "America/Los_Angeles" },
2290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "PDT", "America/Los_Angeles" },
2293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "V", "PDT", "America/Los_Angeles" },
2294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "Pacific Daylight Time", "America/Los_Angeles" },
2295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "PT", "America/Los_Angeles" },
2296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "Pacific Time", "America/Los_Angeles" },
2297b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "VVVV", "United States Time (Los Angeles)", "America/Los_Angeles" },
2298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en_GB", "America/Los_Angeles", "2004-01-15T12:00:00Z", "z", "PST", "America/Los_Angeles" },
2299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "Z", "-0700", "-7:00" },
2300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "z", "MST", "America/Phoenix" },
2302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "V", "MST", "America/Phoenix" },
2303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "zzzz", "Mountain Standard Time", "America/Phoenix" },
2304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "z", "MST", "America/Phoenix" },
2307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "V", "MST", "America/Phoenix" },
2308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "zzzz", "Mountain Standard Time", "America/Phoenix" },
2309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "v", "MST", "America/Phoenix" },
2310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "vvvv", "Mountain Standard Time", "America/Phoenix" },
2311b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "VVVV", "United States Time (Phoenix)", "America/Phoenix" },
2312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2316b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "V", "GMT-03:00", "-3:00" },
2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentina Time", "-3:00" },
2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2321b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "V", "GMT-03:00", "-3:00" },
2322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentina Time", "-3:00" },
2323b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Argentina Time (Buenos Aires)", "America/Buenos_Aires" },
2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentina Time", "America/Buenos_Aires" },
2325b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "VVVV", "Argentina Time (Buenos Aires)", "America/Buenos_Aires" },
2326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2330b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "V", "GMT-03:00", "-3:00" },
2331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentina Time", "-3:00" },
2332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2335b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "V", "GMT-03:00", "-3:00" },
2336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentina Time", "-3:00" },
2337b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Argentina Time (Buenos Aires)", "America/Buenos_Aires" },
2338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentina Time", "America/Buenos_Aires" },
2339b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "VVVV", "Argentina Time (Buenos Aires)", "America/Buenos_Aires" },
2340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
2343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-05:00", "-5:00" },
2344b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "America/Havana", "2004-01-15T00:00:00Z", "V", "GMT-05:00", "-5:00" },
2345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "Cuba Standard Time", "-5:00" },
2346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
2348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-04:00", "-4:00" },
2349b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "America/Havana", "2004-07-15T00:00:00Z", "V", "GMT-04:00", "-4:00" },
2350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "Cuba Daylight Time", "-4:00" },
2351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "v", "Cuba Time", "America/Havana" },
2352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "Cuba Time", "America/Havana" },
2353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "VVVV", "Cuba Time", "America/Havana" },
2354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "V", "AEDT", "+11:00" },
2359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "Australian Eastern Daylight Time", "+11:00" },
2360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "V", "AEST", "+10:00" },
2364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "Australian Eastern Standard Time", "+10:00" },
2365b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "Australia Time (Sydney)", "Australia/Sydney" },
2366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "Eastern Australia Time", "Australia/Sydney" },
2367b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "VVVV", "Australia Time (Sydney)", "Australia/Sydney" },
2368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "V", "AEDT", "+11:00" },
2373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "Australian Eastern Daylight Time", "+11:00" },
2374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "V", "AEST", "+10:00" },
2378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "Australian Eastern Standard Time", "+10:00" },
2379b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "Australia Time (Sydney)", "Australia/Sydney" },
2380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "Eastern Australia Time", "Australia/Sydney" },
2381b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "VVVV", "Australia Time (Sydney)", "Australia/Sydney" },
2382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2384b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
2385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
2386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "V", "GMT", "+0:00" },
2387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "Greenwich Mean Time", "+0:00" },
2388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
2390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+01:00", "Europe/London" },
2391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "V", "BST", "Europe/London" },
2392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "British Summer Time", "Europe/London" },
2393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu en.txt has exemplar city for this time zone
2394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "v", "United Kingdom Time", "Europe/London" },
2395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "United Kingdom Time", "Europe/London" },
2396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "United Kingdom Time", "Europe/London" },
2397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-03:00", "-3:00" },
2407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+05:30", "+5:30" },
2413b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "V", "GMT+05:30", "+5:30" },
2414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "India Standard Time", "+5:30" },
2415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+05:30", "+05:30" },
2418b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "V", "GMT+05:30", "+05:30" },
2419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "India Standard Time", "+5:30" },
2420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "India Time", "Asia/Calcutta" },
2421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "India Standard Time", "Asia/Calcutta" },
242250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
2427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-08:00", "-8:00" },
2428b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "Nordamerikanische Westk\\u00fcsten-Winterzeit", "-8:00" },
2429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-07:00", "-7:00" },
2432b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "Nordamerikanische Westk\\u00fcsten-Sommerzeit", "-7:00" },
2433b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "Vereinigte Staaten Zeit (Los Angeles)", "America/Los_Angeles" },
2434b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "Nordamerikanische Westk\\u00fcstenzeit", "America/Los_Angeles" },
2435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2439b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentinische Winterzeit", "-3:00" },
2440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2443b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentinische Winterzeit", "-3:00" },
2444b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Argentinien Zeit (Buenos Aires)", "America/Buenos_Aires" },
2445b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentinische Winterzeit", "America/Buenos_Aires" },
2446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2450b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentinische Winterzeit", "-3:00" },
2451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2454b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentinische Winterzeit", "-3:00" },
2455b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Argentinien Zeit (Buenos Aires)", "America/Buenos_Aires" },
2456b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentinische Winterzeit", "America/Buenos_Aires" },
2457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
2460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-05:00", "-5:00" },
2461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-05:00", "-5:00" },
2462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
2464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-04:00", "-4:00" },
2465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-04:00", "-4:00" },
2466b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Havana", "2004-07-15T00:00:00Z", "v", "Kuba Zeit", "America/Havana" },
2467b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "Kuba Zeit", "America/Havana" },
2468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // added to test proper fallback of country name
2469b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de_CH", "America/Havana", "2004-07-15T00:00:00Z", "v", "Kuba Zeit", "America/Havana" },
2470b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de_CH", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "Kuba Zeit", "America/Havana" },
2471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2475b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "Ostaustralische Sommerzeit", "+11:00" },
2476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2479b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "Ostaustralische Winterzeit", "+10:00" },
2480b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "Australien Zeit (Sydney)", "Australia/Sydney" },
2481b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "Ostaustralische Zeit", "Australia/Sydney" },
2482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2486b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "Ostaustralische Sommerzeit", "+11:00" },
2487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2490b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "Ostaustralische Winterzeit", "+10:00" },
2491b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "Australien Zeit (Sydney)", "Australia/Sydney" },
2492b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "Ostaustralische Zeit", "Australia/Sydney" },
2493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2495b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
2496b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
2497b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "Mittlere Greenwich-Zeit", "+0:00" },
2498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
2500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+01:00", "+1:00" },
2501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+01:00", "+1:00" },
2502b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Europe/London", "2004-07-15T00:00:00Z", "v", "Vereinigtes K\\u00f6nigreich Zeit", "Europe/London" },
2503b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "Vereinigtes K\\u00f6nigreich Zeit", "Europe/London" },
2504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-03:00", "-3:00" },
2514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+05:30", "+5:30" },
2520b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "Indische Zeit", "+5:30" },
2521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+05:30", "+05:30" },
2524b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "Indische Zeit", "+5:30" },
2525b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "Indien Zeit", "Asia/Calcutta" },
2526b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "Indische Zeit", "Asia/Calcutta" },
2527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
253185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0800", "-8:00" },
253285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0800", "America/Los_Angeles" },
2533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u592a\\u5e73\\u6d0b\\u6807\\u51c6\\u65f6\\u95f4", "America/Los_Angeles" },
2534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
253585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0700", "-7:00" },
253685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0700", "America/Los_Angeles" },
2537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u592a\\u5e73\\u6d0b\\u590f\\u4ee4\\u65f6\\u95f4", "America/Los_Angeles" },
2538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu zh.txt has exemplar city for this time zone
2539b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u7f8e\\u56fd\\u65F6\\u95F4\\uff08\\u6d1b\\u6749\\u77f6\\uff09", "America/Los_Angeles" },
254085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u7f8e\\u56fd\\u592a\\u5e73\\u6d0b\\u65f6\\u95f4", "America/Los_Angeles" },
2541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
254385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
254485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
254585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
2546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
254785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
254885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
254985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
2550b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u963f\\u6839\\u5ef7\\u65F6\\u95F4\\uff08\\u5e03\\u5b9c\\u8bfa\\u65af\\u827e\\u5229\\u65af\\uff09", "America/Buenos_Aires" },
255185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "America/Buenos_Aires" },
2552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
255485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
255585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
255685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
2557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
255885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
255985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
256085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
2561b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u963f\\u6839\\u5ef7\\u65F6\\u95F4\\uff08\\u5e03\\u5b9c\\u8bfa\\u65af\\u827e\\u5229\\u65af\\uff09", "America/Buenos_Aires" },
256285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "America/Buenos_Aires" },
2563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
256585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0500", "-5:00" },
256685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0500", "-5:00" },
256785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "\\u53e4\\u5df4\\u6807\\u51c6\\u65f6\\u95f4", "-5:00" },
2568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
256985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0400", "-4:00" },
257085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0400", "-4:00" },
257185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "\\u53e4\\u5df4\\u590f\\u4ee4\\u65f6\\u95f4", "-4:00" },
257285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u53e4\\u5df4\\u65f6\\u95f4", "America/Havana" },
257385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u53e4\\u5df4\\u65f6\\u95f4", "America/Havana" },
2574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
257685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1100", "+11:00" },
257785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1100", "+11:00" },
2578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u590f\\u4ee4\\u65f6\\u95f4", "+11:00" },
2579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
258085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1000", "+10:00" },
258185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1000", "+10:00" },
258285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u6807\\u51c6\\u65f6\\u95f4", "+10:00" },
2583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu zh.txt does not have info for this time zone
2584b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u6fb3\\u5927\\u5229\\u4e9a\\u65F6\\u95F4\\uff08\\u6089\\u5c3c\\uff09", "Australia/Sydney" },
258585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u65f6\\u95f4", "Australia/Sydney" },
2586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
258885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1100", "+11:00" },
258985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1100", "+11:00" },
2590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u590f\\u4ee4\\u65f6\\u95f4", "+11:00" },
2591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
259285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1000", "+10:00" },
259385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1000", "+10:00" },
259485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u6807\\u51c6\\u65f6\\u95f4", "+10:00" },
2595b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u6fb3\\u5927\\u5229\\u4e9a\\u65F6\\u95F4\\uff08\\u6089\\u5c3c\\uff09", "Australia/Sydney" },
259685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u65f6\\u95f4", "Australia/Sydney" },
2597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2599b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4", "+0:00" },
2600b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4", "+0:00" },
2601b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "V", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4", "+0:00" },
2602b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4", "+0:00" },
2603b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4", "+0:00" },
2604b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "V", "\\u683C\\u6797\\u5C3C\\u6CBB\\u6807\\u51C6\\u65F6\\u95F4", "+0:00" },
2605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u683C\\u6797\\u5C3C\\u6CBB\\u6807\\u51C6\\u65F6\\u95F4", "+0:00" },
2606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
260785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0100", "+1:00" },
260885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0100", "+1:00" },
2609b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "V", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0100", "+1:00" },
261085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0100", "+1:00" },
261185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u82f1\\u56fd\\u65f6\\u95f4", "Europe/London" },
261285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u82f1\\u56fd\\u65f6\\u95f4", "Europe/London" },
261385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "\\u82f1\\u56fd\\u65f6\\u95f4", "Europe/London" },
2614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
261685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
261785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
261885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
2619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
262085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
262185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
262285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
262385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
262485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
2625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
262885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0530", "+5:30" },
262985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0530", "+5:30" },
263085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u5370\\u5ea6\\u6807\\u51c6\\u65f6\\u95f4", "+5:30" },
2631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
263285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0530", "+5:30" },
263385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0530", "+05:30" },
263485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u5370\\u5ea6\\u6807\\u51c6\\u65f6\\u95f4", "+5:30" },
263585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u5370\\u5ea6\\u65f6\\u95f4", "Asia/Calcutta" },
263685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u5370\\u5ea6\\u6807\\u51c6\\u65f6\\u95f4", "Asia/Calcutta" },
2637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u096e:\\u0966\\u0966", "-8:00" },
2642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u096e:\\u0966\\u0966", "-8:00" },
2643b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u092a\\u094d\\u0930\\u0936\\u093e\\u0902\\u0924\\u0020\\u092e\\u093e\\u0928\\u0915\\u0020\\u0938\\u092e\\u092f", "-8:00" },
2644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u096d:\\u0966\\u0966", "-7:00" },
2646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u096d:\\u0966\\u0966", "-7:00" },
2647b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u092A\\u094D\\u0930\\u0936\\u093E\\u0902\\u0924 \\u0926\\u093F\\u0935\\u093E\\u0935\\u0932\\u094B\\u0915 \\u0938\\u092E\\u092F", "-7:00" },
2648b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "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 \\u0938\\u092E\\u092F (\\u0932\\u094b\\u0938 \\u090f\\u0902\\u091c\\u093f\\u0932\\u0947\\u0938)", "America/Los_Angeles" },
2649b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u092A\\u094D\\u0930\\u0936\\u093E\\u0902\\u0924 \\u0938\\u092E\\u092F", "America/Los_Angeles" },
2650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2654b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u0938\\u092E\\u092F", "-3:00" },
2655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2658b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u0938\\u092E\\u092F", "-3:00" },
2659b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0905\\u0930\\u094d\\u091c\\u0947\\u0928\\u094d\\u091f\\u0940\\u0928\\u093e \\u0938\\u092E\\u092F (\\u092c\\u094d\\u092f\\u0942\\u0928\\u0938 \\u0906\\u092f\\u0930\\u0938)", "America/Buenos_Aires" },
2660b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u0938\\u092E\\u092F", "America/Buenos_Aires" },
2661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2665b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u0938\\u092E\\u092F", "-3:00" },
2666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2669b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u0938\\u092E\\u092F", "-3:00" },
2670b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0905\\u0930\\u094d\\u091c\\u0947\\u0928\\u094d\\u091f\\u0940\\u0928\\u093e \\u0938\\u092E\\u092F (\\u092c\\u094d\\u092f\\u0942\\u0928\\u0938 \\u0906\\u092f\\u0930\\u0938)", "America/Buenos_Aires" },
2671b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0905\\u0930\\u094D\\u091C\\u0947\\u0902\\u091F\\u0940\\u0928\\u093E \\u0938\\u092E\\u092F", "America/Buenos_Aires" },
2672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u096b:\\u0966\\u0966", "-5:00" },
2675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u096b:\\u0966\\u0966", "-5:00" },
2676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u096b:\\u0966\\u0966", "-5:00" },
2677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u096a:\\u0966\\u0966", "-4:00" },
2679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u096a:\\u0966\\u0966", "-4:00" },
2680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u096a:\\u0966\\u0966", "-4:00" },
2681b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u0915\\u094d\\u092f\\u0942\\u092c\\u093e \\u0938\\u092E\\u092F", "America/Havana" },
2682b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u0915\\u094d\\u092f\\u0942\\u092c\\u093e \\u0938\\u092E\\u092F", "America/Havana" },
2683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2687b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u0911\\u0938\\u094D\\u200D\\u091F\\u094D\\u0930\\u0947\\u0932\\u093F\\u092F\\u093E\\u0908 \\u092A\\u0942\\u0930\\u094D\\u0935\\u0940 \\u0926\\u093F\\u0935\\u093E\\u0935\\u0932\\u094B\\u0915 \\u0938\\u092E\\u092F", "+11:00" },
2688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2691b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "\\u0911\\u0938\\u094D\\u200D\\u091F\\u094D\\u0930\\u0947\\u0932\\u093F\\u092F\\u093E\\u0908 \\u092A\\u0942\\u0930\\u094D\\u0935\\u0940 \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "+10:00" },
2692b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u0911\\u0938\\u094d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e \\u0938\\u092E\\u092F (\\u0938\\u093f\\u0921\\u0928\\u0940)", "Australia/Sydney" },
2693b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u092A\\u0942\\u0930\\u094D\\u0935\\u0940 \\u0911\\u0938\\u094D\\u091F\\u094D\\u0930\\u0947\\u0932\\u093F\\u092F\\u093E\\u0908 \\u0938\\u092E\\u092F", "Australia/Sydney" },
2694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2698b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u0911\\u0938\\u094D\\u200D\\u091F\\u094D\\u0930\\u0947\\u0932\\u093F\\u092F\\u093E\\u0908 \\u092A\\u0942\\u0930\\u094D\\u0935\\u0940 \\u0926\\u093F\\u0935\\u093E\\u0935\\u0932\\u094B\\u0915 \\u0938\\u092E\\u092F", "+11:00" },
2699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2702b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "\\u0911\\u0938\\u094D\\u200D\\u091F\\u094D\\u0930\\u0947\\u0932\\u093F\\u092F\\u093E\\u0908 \\u092A\\u0942\\u0930\\u094D\\u0935\\u0940 \\u092E\\u093E\\u0928\\u0915 \\u0938\\u092E\\u092F", "+10:00" },
2703b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u0911\\u0938\\u094d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e \\u0938\\u092E\\u092F (\\u0938\\u093f\\u0921\\u0928\\u0940)", "Australia/Sydney" },
2704b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u092A\\u0942\\u0930\\u094D\\u0935\\u0940 \\u0911\\u0938\\u094D\\u091F\\u094D\\u0930\\u0947\\u0932\\u093F\\u092F\\u093E\\u0908 \\u0938\\u092E\\u092F", "Australia/Sydney" },
2705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2707b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
2708b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
2709b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "GMT", "+0:00" },
2710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+\\u0966\\u0967:\\u0966\\u0966", "+1:00" },
2712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+\\u0966\\u0967:\\u0966\\u0966", "+1:00" },
2713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+\\u0966\\u0967:\\u0966\\u0966", "+1:00" },
2714b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u092C\\u094D\\u0930\\u093F\\u0924\\u0928 \\u0938\\u092E\\u092F", "Europe/London" },
2715b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u092C\\u094D\\u0930\\u093F\\u0924\\u0928 \\u0938\\u092E\\u092F", "Europe/London" },
2716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+\\u0966\\u096B:\\u0969\\u0966", "+5:30" },
2730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "IST", "+5:30" },
2731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u0938\\u092E\\u092F", "+5:30" },
2732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+\\u0966\\u096B:\\u0969\\u0966", "+5:30" },
2734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "IST", "+05:30" },
2735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u0938\\u092E\\u092F", "+5:30" },
2736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "IST", "Asia/Calcutta" },
2737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u0938\\u092E\\u092F", "Asia/Calcutta" },
2738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
274285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0800", "-8:00" },
274385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0800", "America/Los_Angeles" },
2744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "V", "PST", "America/Los_Angeles" },
2745b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
274785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0700", "-7:00" },
274885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0700", "America/Los_Angeles" },
2749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "V", "PDT", "America/Los_Angeles" },
2750b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu bg.txt has exemplar city for this time zone
2752b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u0421\\u0410\\u0429 \\u0432\\u0440\\u0435\\u043C\\u0435 (\\u041b\\u043e\\u0441 \\u0410\\u043d\\u0436\\u0435\\u043b\\u0438\\u0441)", "America/Los_Angeles" },
2753b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u0422\\u0438\\u0445\\u043E\\u043E\\u043A\\u0435\\u0430\\u043D\\u0441\\u043A\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "America/Los_Angeles" },
2754b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "VVVV", "\\u0421\\u0410\\u0429 \\u0432\\u0440\\u0435\\u043C\\u0435 (\\u041b\\u043e\\u0441 \\u0410\\u043d\\u0436\\u0435\\u043b\\u0438\\u0441)", "America/Los_Angeles" },
2755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
275785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
275885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2759b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0430", "-3:00" },
2760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
276185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
276285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2763b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0430", "-3:00" },
2764b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0410\\u0440\\u0436\\u0435\\u043d\\u0442\\u0438\\u043d\\u0430 \\u0432\\u0440\\u0435\\u043C\\u0435 (\\u0411\\u0443\\u0435\\u043D\\u043E\\u0441 \\u0410\\u0439\\u0440\\u0435\\u0441)", "America/Buenos_Aires" },
2765b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0430", "America/Buenos_Aires" },
2766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
276885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
276985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2770b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0430", "-3:00" },
2771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
277285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
277385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2774b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0430", "-3:00" },
2775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu bg.txt does not have info for this time zone
2776b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0410\\u0440\\u0436\\u0435\\u043d\\u0442\\u0438\\u043d\\u0430 \\u0432\\u0440\\u0435\\u043C\\u0435 (\\u0411\\u0443\\u0435\\u043D\\u043E\\u0441 \\u0410\\u0439\\u0440\\u0435\\u0441)", "America/Buenos_Aires" },
2777b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0440\\u0436\\u0435\\u043D\\u0442\\u0438\\u043D\\u0430", "America/Buenos_Aires" },
2778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
278085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0500", "-5:00" },
278185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0500", "-5:00" },
278285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0500", "-5:00" },
2783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
278485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0400", "-4:00" },
278585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0400", "-4:00" },
278685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0400", "-4:00" },
2787b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u041a\\u0443\\u0431\\u0430 \\u0432\\u0440\\u0435\\u043C\\u0435", "America/Havana" },
2788b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u041a\\u0443\\u0431\\u0430 \\u0432\\u0440\\u0435\\u043C\\u0435", "America/Havana" },
2789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
279185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
279285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
2793b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u043B\\u044F\\u0442\\u043D\\u043E \\u0447\\u0430\\u0441\\u043E\\u0432\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "+11:00" },
2794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
279585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
279685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
2797b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u0441\\u0442\\u0430\\u043D\\u0434\\u0430\\u0440\\u0442\\u043D\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "+10:00" },
2798b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043b\\u0438\\u044f \\u0432\\u0440\\u0435\\u043C\\u0435 (\\u0421\\u0438\\u0434\\u043D\\u0438)", "Australia/Sydney" },
2799b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "Australia/Sydney" },
2800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
280285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
280385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
2804b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u043B\\u044F\\u0442\\u043D\\u043E \\u0447\\u0430\\u0441\\u043E\\u0432\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "+11:00" },
2805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
280685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
280785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
2808b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u0441\\u0442\\u0430\\u043D\\u0434\\u0430\\u0440\\u0442\\u043D\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "+10:00" },
2809b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043b\\u0438\\u044f \\u0432\\u0440\\u0435\\u043C\\u0435 (\\u0421\\u0438\\u0434\\u043D\\u0438)", "Australia/Sydney" },
2810b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043B\\u0438\\u044F \\u2013 \\u0438\\u0437\\u0442\\u043E\\u0447\\u043D\\u043E \\u0432\\u0440\\u0435\\u043C\\u0435", "Australia/Sydney" },
2811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2813b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447", "+0:00" },
2814b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447", "+0:00" },
2815b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
281785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0100", "+1:00" },
281885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0100", "+1:00" },
281985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0100", "+1:00" },
2820b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "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 \\u0432\\u0440\\u0435\\u043C\\u0435", "Europe/London" },
2821b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "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 \\u0432\\u0440\\u0435\\u043C\\u0435", "Europe/London" },
2822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
282485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
282585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
282685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
282885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
282985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
283085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
283185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
283285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
283685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
283785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
283885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
2839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
284085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
284185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+05:30" },
284285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
2843b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u0418\\u043D\\u0434\\u0438\\u044F \\u0432\\u0440\\u0435\\u043C\\u0435", "Asia/Calcutta" },
2844b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u0418\\u043D\\u0434\\u0438\\u044F \\u0432\\u0440\\u0435\\u043C\\u0435", "Asia/Calcutta" },
2845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // ==========
2846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
284885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
284985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-08:00", "America/Los_Angeles" },
2850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "V", "PST", "America/Los_Angeles" },
285185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u30a2\\u30e1\\u30ea\\u30ab\\u592a\\u5e73\\u6d0b\\u6a19\\u6e96\\u6642", "America/Los_Angeles" },
285285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-700" },
285385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
285485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-07:00", "America/Los_Angeles" },
2855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "V", "PDT", "America/Los_Angeles" },
285685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u30a2\\u30e1\\u30ea\\u30ab\\u592a\\u5e73\\u6d0b\\u590f\\u6642\\u9593", "America/Los_Angeles" },
2857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu ja.txt has exemplar city for this time zone
2858b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u30A2\\u30E1\\u30EA\\u30AB\\u5408\\u8846\\u56FD\\u6642\\u9593\\uFF08\\u30ed\\u30b5\\u30f3\\u30bc\\u30eb\\u30b9\\uFF09", "America/Los_Angeles" },
285985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u30A2\\u30E1\\u30EA\\u30AB\\u592A\\u5e73\\u6D0B\\u6642\\u9593", "America/Los_Angeles" },
2860b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "VVVV", "\\u30A2\\u30E1\\u30EA\\u30AB\\u5408\\u8846\\u56FD\\u6642\\u9593\\uFF08\\u30ed\\u30b5\\u30f3\\u30bc\\u30eb\\u30b9\\uFF09", "America/Los_Angeles" },
2861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
286385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
286485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2865b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "-3:00" },
2866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
286785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
286885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2869b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "-3:00" },
2870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu ja.txt does not have info for this time zone
2871b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u30a2\\u30eb\\u30bc\\u30f3\\u30c1\\u30f3\\u6642\\u9593\\uFF08\\u30D6\\u30A8\\u30CE\\u30B9\\u30A2\\u30A4\\u30EC\\u30B9\\uFF09", "America/Buenos_Aires" },
2872b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "America/Buenos_Aires" },
2873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
287585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
287685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2877b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "-3:00" },
2878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
287985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
288085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2881b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "-3:00" },
2882b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u30a2\\u30eb\\u30bc\\u30f3\\u30c1\\u30f3\\u6642\\u9593\\uFF08\\u30D6\\u30A8\\u30CE\\u30B9\\u30A2\\u30A4\\u30EC\\u30B9\\uFF09", "America/Buenos_Aires" },
2883b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u30A2\\u30EB\\u30BC\\u30F3\\u30C1\\u30F3\\u6A19\\u6E96\\u6642", "America/Buenos_Aires" },
2884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
288685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
288785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-05:00", "-5:00" },
2888b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "\\u30AD\\u30E5\\u30FC\\u30D0\\u6A19\\u6E96\\u6642", "-5:00" },
2889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
289085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
289185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-04:00", "-4:00" },
2892b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "\\u30AD\\u30E5\\u30FC\\u30D0\\u590F\\u6642\\u9593", "-4:00" },
2893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u30ad\\u30e5\\u30fc\\u30d0\\u6642\\u9593", "America/Havana" },
2894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u30ad\\u30e5\\u30fc\\u30d0\\u6642\\u9593", "America/Havana" },
2895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
289785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
289885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2899b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u590F\\u6642\\u9593", "+11:00" },
2900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
290185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
290285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2903b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u6A19\\u6E96\\u6642", "+10:00" },
2904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu ja.txt does not have info for this time zone
2905b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u30aa\\u30fc\\u30b9\\u30c8\\u30e9\\u30ea\\u30a2\\u6642\\u9593\\uFF08\\u30b7\\u30c9\\u30cb\\u30fc\\uFF09", "Australia/Sydney" },
2906b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u6642\\u9593", "Australia/Sydney" },
2907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
290985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
291085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2911b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u590F\\u6642\\u9593", "+11:00" },
2912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
291385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
291485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2915b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u6A19\\u6E96\\u6642", "+10:00" },
2916b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u30aa\\u30fc\\u30b9\\u30c8\\u30e9\\u30ea\\u30a2\\u6642\\u9593\\uFF08\\u30b7\\u30c9\\u30cb\\u30fc\\uFF09", "Australia/Sydney" },
2917b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u30AA\\u30FC\\u30B9\\u30C8\\u30E9\\u30EA\\u30A2\\u6771\\u90E8\\u6642\\u9593", "Australia/Sydney" },
2918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2920b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
2921b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
2922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "V", "GMT", "+0:00" },
2923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u30B0\\u30EA\\u30CB\\u30C3\\u30B8\\u6A19\\u6E96\\u6642", "+0:00" },
2924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
292585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
292685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+01:00", "+1:00" },
292785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "V", "GMT+01:00", "+1:00" },
292885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+01:00", "+1:00" },
2929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
2930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
2931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
2932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
293485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
293585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
293685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
293885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
293985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
294085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
294185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-03:00", "-3:00" },
294285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
294685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
294785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+05:30", "+5:30" },
2948b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u30A4\\u30F3\\u30C9\\u6A19\\u6E96\\u6642", "+5:30" },
2949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
295085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
295185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+05:30", "+05:30" },
2952b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u30A4\\u30F3\\u30C9\\u6A19\\u6E96\\u6642", "+5:30" },
2953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u30A4\\u30F3\\u30C9\\u6642\\u9593", "Asia/Calcutta" },
2954b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u30A4\\u30F3\\u30C9\\u6A19\\u6E96\\u6642", "Asia/Calcutta" },
2955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // ==========
2957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2958b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2959b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
2960b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-08:00", "-8:00" },
2961b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "GMT-08:00", "-8:00" },
2962b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2963b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2964b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-07:00", "-7:00" },
2965b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "GMT-07:00", "-7:00" },
2966b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "US (Los Angeles)", "America/Los_Angeles" },
2967b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "US (Los Angeles)", "America/Los_Angeles" },
2968b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
2969b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2970b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2971b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2972b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2973b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2974b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2975b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2976b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2977b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "AR (Buenos Aires)", "America/Buenos_Aires" },
2978b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "AR (Buenos Aires)", "America/Buenos_Aires" },
2979b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
2980b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2981b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2982b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2983b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2984b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2985b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2986b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2987b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2988b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "AR (Buenos Aires)", "America/Buenos_Aires" },
2989b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "AR (Buenos Aires)", "America/Buenos_Aires" },
2990b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
2991b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2992b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
2993b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-05:00", "-5:00" },
2994b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-05:00", "-5:00" },
2995b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2996b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
2997b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-04:00", "-4:00" },
2998b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-04:00", "-4:00" },
2999b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Havana", "2004-07-15T00:00:00Z", "v", "(CU)", "America/Havana" },
3000b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "(CU)", "America/Havana" },
3001b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3002b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
3003b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
3004b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
3005b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
3006b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
3007b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
3008b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
3009b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
3010b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "AU (Sydney)", "Australia/Sydney" },
3011b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "AU (Sydney)", "Australia/Sydney" },
3012b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3013b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
3014b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
3015b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
3016b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
3017b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
3018b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
3019b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
3020b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
3021b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "AU (Sydney)", "Australia/Sydney" },
3022b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "AU (Sydney)", "Australia/Sydney" },
3023b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3024b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
3025b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
3026b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
3027b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "GMT", "+0:00" },
3028b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
3029b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
3030b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+01:00", "+1:00" },
3031b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+01:00", "+1:00" },
3032b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-07-15T00:00:00Z", "v", "(GB)", "Europe/London" },
3033b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "(GB)", "Europe/London" },
3034b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3035b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
3036b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
3037b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
3038b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
3039b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
3040b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
3041b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
3042b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
3043b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-03:00", "-3:00" },
3044b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
3045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
3047b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
3048b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
3049b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+05:30", "+5:30" },
3050b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
3051b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
3052b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
3053b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+05:30", "+05:30" },
3054b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
3055b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "(IN)", "Alna/Calcutta" },
3056b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "(IN)", "Asia/Calcutta" },
3057b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3058b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // Ticket#8589 Partial location name to use country name if the zone is the golden
3059b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // zone for the time zone's country.
3060b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en_MX", "America/Chicago", "1995-07-15T00:00:00Z", "vvvv", "Central Time (United States)", "America/Chicago"},
3061b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
306285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { NULL, NULL, NULL, NULL, NULL, NULL },
3063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
3064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
306585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
306685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    Calendar *cal = GregorianCalendar::createInstance(status);
306750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "GregorianCalendar::createInstance", TRUE)) return;
3068b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    SimpleDateFormat testfmt(UnicodeString("yyyy-MM-dd'T'HH:mm:ss'Z'"), status);
3069b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (failure(status, "SimpleDateFormat constructor", TRUE)) return;
3070b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    testfmt.setTimeZone(*TimeZone::getGMT());
3071b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
307285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for (int i = 0; fallbackTests[i][0]; i++) {
307385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        const char **testLine = fallbackTests[i];
307485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        UnicodeString info[5];
307585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        for ( int j = 0 ; j < 5 ; j++ ) {
307685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            info[j] = UnicodeString(testLine[j], -1, US_INV);
307785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
307885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        info[4] = info[4].unescape();
307985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        logln("%s;%s;%s;%s", testLine[0], testLine[1], testLine[2], testLine[3]);
3080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
308185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        TimeZone *tz = TimeZone::createTimeZone(info[1]);
308285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
3083b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UDate d = testfmt.parse(testLine[2], status);
3084b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        cal->setTime(d, status);
3085b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (U_FAILURE(status)) {
3086b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln(UnicodeString("Failed to set date: ") + testLine[2]);
308785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
308885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
308985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        SimpleDateFormat fmt(info[3], Locale(testLine[0]),status);
309085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        ASSERT_OK(status);
309185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        cal->adoptTimeZone(tz);
309285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        UnicodeString result;
309385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        FieldPosition pos(0);
309485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        fmt.format(*cal,result,pos);
309585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        if (result != info[4]) {
309650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            errln(info[0] + ";" + info[1] + ";" + info[2] + ";" + info[3] + " expected: '" +
309785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                  info[4] + "' but got: '" + result + "'");
309885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
309985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
310085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete cal;
310185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
310285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
310385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::TestRoundtripWithCalendar(void) {
310485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
310585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
310685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeZone *tz = TimeZone::createTimeZone("Europe/Paris");
310785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeZone *gmt = TimeZone::createTimeZone("Etc/GMT");
310885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
310985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    Calendar *calendars[] = {
311085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Calendar::createInstance(*tz, Locale("und@calendar=gregorian"), status),
311185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Calendar::createInstance(*tz, Locale("und@calendar=buddhist"), status),
311285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//        Calendar::createInstance(*tz, Locale("und@calendar=hebrew"), status),
311385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Calendar::createInstance(*tz, Locale("und@calendar=islamic"), status),
311485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Calendar::createInstance(*tz, Locale("und@calendar=japanese"), status),
311585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        NULL
311685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    };
311785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(status)) {
311850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Failed to initialize calendars: %s", u_errorName(status));
311985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        for (int i = 0; calendars[i] != NULL; i++) {
312085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            delete calendars[i];
312185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
312285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
312385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
3124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
312585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    //FIXME The formatters commented out below are currently failing because of
312685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    // the calendar calculation problem reported by #6691
312785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
312885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    // The order of test formatters must match the order of calendars above.
312985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat *formatters[] = {
313085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("en_US")), //calendar=gregorian
313185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("th_TH")), //calendar=buddhist
313285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("he_IL@calendar=hebrew")),
313385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("ar_EG@calendar=islamic")),
313485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("ja_JP@calendar=japanese")),
313585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        NULL
313685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    };
313785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
313885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate d = Calendar::getNow();
313985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString buf;
314085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    FieldPosition fpos;
314185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    ParsePosition ppos;
314285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
314385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for (int i = 0; formatters[i] != NULL; i++) {
314485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        buf.remove();
314585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        fpos.setBeginIndex(0);
314685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        fpos.setEndIndex(0);
314785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        calendars[i]->setTime(d, status);
314885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
314985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // Normal case output - the given calendar matches the calendar
315085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // used by the formatter
315185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        formatters[i]->format(*calendars[i], buf, fpos);
315285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        UnicodeString refStr(buf);
315385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
315485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        for (int j = 0; calendars[j] != NULL; j++) {
315585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            if (j == i) {
315685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                continue;
315785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            }
315885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            buf.remove();
315985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            fpos.setBeginIndex(0);
316085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            fpos.setEndIndex(0);
316185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            calendars[j]->setTime(d, status);
316285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
316385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            // Even the different calendar type is specified,
316485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            // we should get the same result.
316585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            formatters[i]->format(*calendars[j], buf, fpos);
316685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            if (refStr != buf) {
316785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                errln((UnicodeString)"FAIL: Different format result with a different calendar for the same time -"
316885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Reference calendar type=" + calendars[i]->getType()
316985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Another calendar type=" + calendars[j]->getType()
317085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Expected result=" + refStr
317185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Actual result=" + buf);
3172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
317385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
3174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
317585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        calendars[i]->setTimeZone(*gmt);
317685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        calendars[i]->clear();
317785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        ppos.setErrorIndex(-1);
317885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        ppos.setIndex(0);
317985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
318085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // Normal case parse result - the given calendar matches the calendar
318185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // used by the formatter
318285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        formatters[i]->parse(refStr, *calendars[i], ppos);
318385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
318485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        for (int j = 0; calendars[j] != NULL; j++) {
318585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            if (j == i) {
318685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                continue;
318785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            }
318885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            calendars[j]->setTimeZone(*gmt);
318985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            calendars[j]->clear();
319085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            ppos.setErrorIndex(-1);
319185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            ppos.setIndex(0);
319285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
319385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            // Even the different calendar type is specified,
319485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            // we should get the same time and time zone.
319585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            formatters[i]->parse(refStr, *calendars[j], ppos);
319685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            if (calendars[i]->getTime(status) != calendars[j]->getTime(status)
319785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                || calendars[i]->getTimeZone() != calendars[j]->getTimeZone()) {
319885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                UnicodeString tzid;
319985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                errln((UnicodeString)"FAIL: Different parse result with a different calendar for the same string -"
320085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Reference calendar type=" + calendars[i]->getType()
320185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Another calendar type=" + calendars[j]->getType()
320285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Date string=" + refStr
320385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Expected time=" + calendars[i]->getTime(status)
320485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Expected time zone=" + calendars[i]->getTimeZone().getID(tzid)
320585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Actual time=" + calendars[j]->getTime(status)
320685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Actual time zone=" + calendars[j]->getTimeZone().getID(tzid));
3207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
3208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
320985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        if (U_FAILURE(status)) {
321085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            errln((UnicodeString)"FAIL: " + u_errorName(status));
321185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            break;
321285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
321385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
321485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
321585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete tz;
321685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete gmt;
321785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for (int i = 0; calendars[i] != NULL; i++) {
321885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete calendars[i];
321985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
322085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for (int i = 0; formatters[i] != NULL; i++) {
322185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete formatters[i];
3222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
3223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
3224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
3226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelativeError(void)
3227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
3228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status;
3229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale en("en");
323050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *en_reltime_reldate =         DateFormat::createDateTimeInstance(DateFormat::kFullRelative,DateFormat::kFullRelative,en);
3232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(en_reltime_reldate == NULL) {
3233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("PASS: rel date/rel time failed");
3234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
3235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: rel date/rel time created, should have failed.");
3236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete en_reltime_reldate;
3237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
3238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
3239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelativeOther(void)
3241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
3242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Nothing in this test. When we get more data from CLDR, put in some tests of -2, +2, etc. ");
3243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
3244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
3245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
324685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::Test6338(void)
324785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho{
324885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
324985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
325085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    SimpleDateFormat *fmt1 = new SimpleDateFormat(UnicodeString("y-M-d"), Locale("ar"), status);
325150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "new SimpleDateFormat", TRUE)) return;
325285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
325385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt1 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
325485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str1;
325585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str1 = fmt1->format(dt1, str1);
325685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str1);
325785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
325885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt11 = fmt1->parse(str1, status);
325985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "fmt->parse");
326085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
326185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str11;
326285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str11 = fmt1->format(dt11, str11);
326385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str11);
326485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
326585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (str1 != str11) {
326685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Different dates str1:" + str1
326785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            + " str2:" + str11);
326885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
326985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt1;
327085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
327185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    /////////////////
327285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
327385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    status = U_ZERO_ERROR;
327485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    SimpleDateFormat *fmt2 = new SimpleDateFormat(UnicodeString("y M d"), Locale("ar"), status);
327585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "new SimpleDateFormat");
327685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
327785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt2 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
327885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str2;
327985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str2 = fmt2->format(dt2, str2);
328085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str2);
328185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
328285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt22 = fmt2->parse(str2, status);
328385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "fmt->parse");
328485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
328585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str22;
328685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str22 = fmt2->format(dt22, str22);
328785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str22);
328885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
328985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (str2 != str22) {
329085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Different dates str1:" + str2
329185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            + " str2:" + str22);
329285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
329385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt2;
329485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
329585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    /////////////////
329685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
329785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    status = U_ZERO_ERROR;
329885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    SimpleDateFormat *fmt3 = new SimpleDateFormat(UnicodeString("y-M-d"), Locale("en-us"), status);
329985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "new SimpleDateFormat");
330085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
330185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt3 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
330285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str3;
330385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str3 = fmt3->format(dt3, str3);
330485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str3);
330585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
330685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt33 = fmt3->parse(str3, status);
330785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "fmt->parse");
330885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
330985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str33;
331085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str33 = fmt3->format(dt33, str33);
331185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str33);
331285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
331385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (str3 != str33) {
331485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Different dates str1:" + str3
331585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            + " str2:" + str33);
331685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
331785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt3;
331885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
331985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    /////////////////
332085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
332185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    status = U_ZERO_ERROR;
332285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    SimpleDateFormat *fmt4 = new SimpleDateFormat(UnicodeString("y M  d"), Locale("en-us"), status);
332385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "new SimpleDateFormat");
332485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
332585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt4 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
332685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str4;
332785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str4 = fmt4->format(dt4, str4);
332885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str4);
332985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
333085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt44 = fmt4->parse(str4, status);
333185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "fmt->parse");
333285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
333385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str44;
333485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str44 = fmt4->format(dt44, str44);
333585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str44);
333685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
333785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (str4 != str44) {
333885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Different dates str1:" + str4
333985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            + " str2:" + str44);
334085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
334185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt4;
334285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
334385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
334485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
334585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::Test6726(void)
334685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho{
334785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    // status
334885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//    UErrorCode status = U_ZERO_ERROR;
334985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
335085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    // fmtf, fmtl, fmtm, fmts;
335185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString strf, strl, strm, strs;
335285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt = date(2008-1900, UCAL_JUNE, 10, 12, 00);
335385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
335485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    Locale loc("ja");
335585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat* fmtf = DateFormat::createDateTimeInstance(DateFormat::FULL, DateFormat::FULL, loc);
335685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat* fmtl = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::FULL, loc);
335785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat* fmtm = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL, loc);
335885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat* fmts = DateFormat::createDateTimeInstance(DateFormat::SHORT, DateFormat::FULL, loc);
335985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (fmtf == NULL || fmtl == NULL || fmtm == NULL || fmts == NULL) {
336085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("Unable to create DateFormat. got NULL.");
336185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        /* It may not be true that if one is NULL all is NULL.  Just to be safe. */
336285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete fmtf;
336385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete fmtl;
336485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete fmtm;
336585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete fmts;
336650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
336785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
336885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
336985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    strf = fmtf->format(dt, strf);
337085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    strl = fmtl->format(dt, strl);
337185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    strm = fmtm->format(dt, strm);
337285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    strs = fmts->format(dt, strs);
337385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
337427f654740f2a26ad62a5c155af9199af9e69b889claireho
337585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/* Locale data is not yet updated
337627f654740f2a26ad62a5c155af9199af9e69b889claireho    if (strf.charAt(13) == UChar(0x20)) {
337727f654740f2a26ad62a5c155af9199af9e69b889claireho        errln((UnicodeString)"FAIL: Improper formatted date: " + strf);
337885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
337927f654740f2a26ad62a5c155af9199af9e69b889claireho    if (strl.charAt(10) == UChar(0x20)) {
338027f654740f2a26ad62a5c155af9199af9e69b889claireho        errln((UnicodeString)"FAIL: Improper formatted date: " + strl);
338185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
338285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho*/
338327f654740f2a26ad62a5c155af9199af9e69b889claireho    logln("strm.charAt(10)=%04X wanted 0x20\n", strm.charAt(10));
338427f654740f2a26ad62a5c155af9199af9e69b889claireho    if (strm.charAt(10) != UChar(0x0020)) {
338527f654740f2a26ad62a5c155af9199af9e69b889claireho      errln((UnicodeString)"FAIL: Improper formatted date: " + strm );
338685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
338727f654740f2a26ad62a5c155af9199af9e69b889claireho    logln("strs.charAt(10)=%04X wanted 0x20\n", strs.charAt(8));
338827f654740f2a26ad62a5c155af9199af9e69b889claireho    if (strs.charAt(8)  != UChar(0x0020)) {
338927f654740f2a26ad62a5c155af9199af9e69b889claireho        errln((UnicodeString)"FAIL: Improper formatted date: " + strs);
339085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
339185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
339285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmtf;
339350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete fmtl;
339450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete fmtm;
339585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmts;
339685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
339785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    return;
339885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
339985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
340085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/**
340185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Test DateFormat's parsing of default GMT variants.  See ticket#6135
340285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */
340385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::TestGMTParsing() {
340485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    const char* DATA[] = {
340585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss Z",
340685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
340785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // pattern, input, expected output (in quotes)
340885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss Z",       "10:20:30 GMT+03:00",   "10:20:30 +0300",
340985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss Z",       "10:20:30 UT-02:00",    "10:20:30 -0200",
341085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss Z",       "10:20:30 GMT",         "10:20:30 +0000",
341185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss vvvv",    "10:20:30 UT+10:00",    "10:20:30 +1000",
341285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss zzzz",    "10:20:30 UTC",         "10:20:30 +0000",   // standalone "UTC"
341385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "ZZZZ HH:mm:ss",    "UT 10:20:30",          "10:20:30 +0000",
341485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "V HH:mm:ss",       "UT+0130 10:20:30",     "10:20:30 +0130",
341585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "V HH:mm:ss",       "UTC+0130 10:20:30",    NULL,               // UTC+0130 is not a supported pattern
341685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH mm Z ss",       "10 20 GMT-1100 30",    "10:20:30 -1100",
341785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    };
341885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
341985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    expectParse(DATA, DATA_len, Locale("en"));
342085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
342185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
342285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho// Test case for localized GMT format parsing
342385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho// with no delimitters in offset format (Chinese locale)
342485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::Test6880() {
342585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
342685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate d1, d2, dp1, dp2, dexp1, dexp2;
342785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString s1, s2;
342885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
342985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeZone *tz = TimeZone::createTimeZone("Asia/Shanghai");
343085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    GregorianCalendar gcal(*tz, status);
343150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "construct GregorianCalendar", TRUE)) return;
343250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
343385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.clear();
343485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.set(1910, UCAL_JULY, 1, 12, 00);   // offset 8:05:52
343585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    d1 = gcal.getTime(status);
343685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
343785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.clear();
343885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.set(1950, UCAL_JULY, 1, 12, 00);   // offset 8:00
343985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    d2 = gcal.getTime(status);
344085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
344185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.clear();
344285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.set(1970, UCAL_JANUARY, 1, 12, 00);
344385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    dexp2 = gcal.getTime(status);
344485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    dexp1 = dexp2 - (5*60 + 52)*1000;   // subtract 5m52s
344585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
344685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(status)) {
344785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("FAIL: Gregorian calendar error");
344885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
344985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
345085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat *fmt = DateFormat::createTimeInstance(DateFormat::kFull, Locale("zh"));
345185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (fmt == NULL) {
345285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("Unable to create DateFormat. Got NULL.");
345385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
345485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
345585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    fmt->adoptTimeZone(tz);
345685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
345785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    fmt->format(d1, s1);
345885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    fmt->format(d2, s2);
345985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
346085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    dp1 = fmt->parse(s1, status);
346185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    dp2 = fmt->parse(s2, status);
346285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
346385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(status)) {
346485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("FAIL: Parse failure");
346585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
346685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
346785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (dp1 != dexp1) {
346885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("FAIL: Failed to parse " + s1 + " parsed: " + dp1 + " expected: " + dexp1);
346985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
347085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (dp2 != dexp2) {
347185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("FAIL: Failed to parse " + s2 + " parsed: " + dp2 + " expected: " + dexp2);
347285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
347385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
347485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt;
347585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
3476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3477b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehotypedef struct {
3478b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    const char * localeStr;
3479b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UBool        lenient;
3480b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UBool        expectFail;
3481b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UnicodeString datePattern;
3482b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UnicodeString dateString;
3483b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} NumAsStringItem;
3484b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3485b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid DateFormatTest::TestNumberAsStringParsing()
3486b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho{
3487b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    const NumAsStringItem items[] = {
3488b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // loc lenient fail?  datePattern                                         dateString
3489b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "",   FALSE, FALSE, UnicodeString("y MMMM d HH:mm:ss"),                 UnicodeString("2009 7 14 08:43:57") },
3490b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "",   TRUE,  FALSE, UnicodeString("y MMMM d HH:mm:ss"),                 UnicodeString("2009 7 14 08:43:57") },
3491b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", FALSE, FALSE, UnicodeString("MMM d, y"),                          UnicodeString("Jul 14, 2009") },
3492b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", TRUE,  FALSE, UnicodeString("MMM d, y"),                          UnicodeString("Jul 14, 2009") },
3493b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", FALSE, TRUE,  UnicodeString("MMM d, y"),                          UnicodeString("7 14, 2009") },
3494b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "en", TRUE,  FALSE, UnicodeString("MMM d, y"),                          UnicodeString("7 14, 2009") },
3495b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", FALSE, FALSE, UnicodeString("yyyy/MM/dd"),                        UnicodeString("2009/07/14")         },
3496b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", TRUE,  FALSE, UnicodeString("yyyy/MM/dd"),                        UnicodeString("2009/07/14")         },
3497b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho      //{ "ja", FALSE, FALSE, UnicodeString("yyyy/MMMMM/d"),                      UnicodeString("2009/7/14")          }, // #8860 covers test failure
3498b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", TRUE,  FALSE, UnicodeString("yyyy/MMMMM/d"),                      UnicodeString("2009/7/14")          },
3499b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", FALSE, FALSE, CharsToUnicodeString("y\\u5E74M\\u6708d\\u65E5"),   CharsToUnicodeString("2009\\u5E747\\u670814\\u65E5")   },
3500b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", TRUE,  FALSE, CharsToUnicodeString("y\\u5E74M\\u6708d\\u65E5"),   CharsToUnicodeString("2009\\u5E747\\u670814\\u65E5")   },
3501b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", FALSE, FALSE, CharsToUnicodeString("y\\u5E74MMMd\\u65E5"),        CharsToUnicodeString("2009\\u5E747\\u670814\\u65E5")   },
3502b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ja", TRUE,  FALSE, CharsToUnicodeString("y\\u5E74MMMd\\u65E5"),        CharsToUnicodeString("2009\\u5E747\\u670814\\u65E5")   }, // #8820 fixes test failure
3503b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ko", FALSE, FALSE, UnicodeString("yyyy. M. d."),                       UnicodeString("2009. 7. 14.")       },
3504b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ko", TRUE,  FALSE, UnicodeString("yyyy. M. d."),                       UnicodeString("2009. 7. 14.")       },
3505b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ko", FALSE, FALSE, UnicodeString("yyyy. MMMMM d."),                    CharsToUnicodeString("2009. 7\\uC6D4 14.")             },
3506b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ko", TRUE,  FALSE, UnicodeString("yyyy. MMMMM d."),                    CharsToUnicodeString("2009. 7\\uC6D4 14.")             }, // #8820 fixes test failure
3507b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ko", FALSE, FALSE, CharsToUnicodeString("y\\uB144 M\\uC6D4 d\\uC77C"), CharsToUnicodeString("2009\\uB144 7\\uC6D4 14\\uC77C") },
3508b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ko", TRUE,  FALSE, CharsToUnicodeString("y\\uB144 M\\uC6D4 d\\uC77C"), CharsToUnicodeString("2009\\uB144 7\\uC6D4 14\\uC77C") },
3509b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ko", FALSE, FALSE, CharsToUnicodeString("y\\uB144 MMM d\\uC77C"),      CharsToUnicodeString("2009\\uB144 7\\uC6D4 14\\uC77C") },
3510b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { "ko", TRUE,  FALSE, CharsToUnicodeString("y\\uB144 MMM d\\uC77C"),      CharsToUnicodeString("2009\\uB144 7\\uC6D4 14\\uC77C") }, // #8820 fixes test failure
3511b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        { NULL, FALSE, FALSE, UnicodeString(""),                                  UnicodeString("")                   }
3512b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    };
3513b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    const NumAsStringItem * itemPtr;
3514b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    for (itemPtr = items; itemPtr->localeStr != NULL; itemPtr++ ) {
3515b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        Locale locale = Locale::createFromName(itemPtr->localeStr);
3516b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UErrorCode status = U_ZERO_ERROR;
3517b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        SimpleDateFormat *formatter = new SimpleDateFormat(itemPtr->datePattern, locale, status);
3518b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (formatter == NULL || U_FAILURE(status)) {
3519b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            dataerrln("Unable to create SimpleDateFormat - %s", u_errorName(status));
3520b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            return;
3521b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
3522b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3523b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        formatter->setLenient(itemPtr->lenient);
3524b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UDate date1 = formatter->parse(itemPtr->dateString, status);
3525b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (U_FAILURE(status)) {
3526b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (!itemPtr->expectFail) {
3527b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                errln("FAIL, err when expected success: Locale \"" + UnicodeString(itemPtr->localeStr) + "\", lenient " + itemPtr->lenient +
3528b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                        ": using pattern \"" + itemPtr->datePattern + "\", could not parse \"" + itemPtr->dateString + "\"; err: " + u_errorName(status) );
3529b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
3530b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        } else if (itemPtr->expectFail) {
3531b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                errln("FAIL, expected err but got none: Locale \"" + UnicodeString(itemPtr->localeStr) + "\", lenient " + itemPtr->lenient +
3532b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                        ": using pattern \"" + itemPtr->datePattern + "\", did parse \"" + itemPtr->dateString + "\"." );
3533b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        } else if (!itemPtr->lenient) {
3534b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            UnicodeString formatted;
3535b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            formatter->format(date1, formatted);
3536b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (formatted != itemPtr->dateString) {
3537b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                errln("FAIL, mismatch formatting parsed date: Locale \"" + UnicodeString(itemPtr->localeStr) + "\", lenient " + itemPtr->lenient +
3538b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                        ": using pattern \"" + itemPtr->datePattern + "\", did parse \"" + itemPtr->dateString + "\", formatted result \"" + formatted + "\".");
3539b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
3540b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
3541b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3542b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete formatter;
3543b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
3544b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}
3545b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
354627f654740f2a26ad62a5c155af9199af9e69b889clairehovoid DateFormatTest::TestISOEra() {
354727f654740f2a26ad62a5c155af9199af9e69b889claireho
354827f654740f2a26ad62a5c155af9199af9e69b889claireho    const char* data[] = {
354927f654740f2a26ad62a5c155af9199af9e69b889claireho    // input, output
355027f654740f2a26ad62a5c155af9199af9e69b889claireho    "BC 4004-10-23T07:00:00Z", "BC 4004-10-23T07:00:00Z",
355127f654740f2a26ad62a5c155af9199af9e69b889claireho    "AD 4004-10-23T07:00:00Z", "AD 4004-10-23T07:00:00Z",
355227f654740f2a26ad62a5c155af9199af9e69b889claireho    "-4004-10-23T07:00:00Z"  , "BC 4005-10-23T07:00:00Z",
355327f654740f2a26ad62a5c155af9199af9e69b889claireho    "4004-10-23T07:00:00Z"   , "AD 4004-10-23T07:00:00Z",
355427f654740f2a26ad62a5c155af9199af9e69b889claireho    };
355527f654740f2a26ad62a5c155af9199af9e69b889claireho
355627f654740f2a26ad62a5c155af9199af9e69b889claireho    int32_t numData = 8;
355727f654740f2a26ad62a5c155af9199af9e69b889claireho
355827f654740f2a26ad62a5c155af9199af9e69b889claireho    UErrorCode status = U_ZERO_ERROR;
355927f654740f2a26ad62a5c155af9199af9e69b889claireho
356027f654740f2a26ad62a5c155af9199af9e69b889claireho    // create formatter
356127f654740f2a26ad62a5c155af9199af9e69b889claireho    SimpleDateFormat *fmt1 = new SimpleDateFormat(UnicodeString("GGG yyyy-MM-dd'T'HH:mm:ss'Z"), status);
356227f654740f2a26ad62a5c155af9199af9e69b889claireho    failure(status, "new SimpleDateFormat", TRUE);
3563b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (status == U_MISSING_RESOURCE_ERROR) {
3564b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (fmt1 != NULL) {
3565b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            delete fmt1;
3566b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
3567b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        return;
3568b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
356927f654740f2a26ad62a5c155af9199af9e69b889claireho    for(int i=0; i < numData; i+=2) {
357027f654740f2a26ad62a5c155af9199af9e69b889claireho        // create input string
357127f654740f2a26ad62a5c155af9199af9e69b889claireho        UnicodeString in = data[i];
357227f654740f2a26ad62a5c155af9199af9e69b889claireho
357327f654740f2a26ad62a5c155af9199af9e69b889claireho        // parse string to date
357427f654740f2a26ad62a5c155af9199af9e69b889claireho        UDate dt1 = fmt1->parse(in, status);
357527f654740f2a26ad62a5c155af9199af9e69b889claireho        failure(status, "fmt->parse", TRUE);
357627f654740f2a26ad62a5c155af9199af9e69b889claireho
357727f654740f2a26ad62a5c155af9199af9e69b889claireho        // format date back to string
357827f654740f2a26ad62a5c155af9199af9e69b889claireho        UnicodeString out;
357927f654740f2a26ad62a5c155af9199af9e69b889claireho        out = fmt1->format(dt1, out);
358027f654740f2a26ad62a5c155af9199af9e69b889claireho        logln(out);
358127f654740f2a26ad62a5c155af9199af9e69b889claireho
358227f654740f2a26ad62a5c155af9199af9e69b889claireho        // check that roundtrip worked as expected
358327f654740f2a26ad62a5c155af9199af9e69b889claireho        UnicodeString expected = data[i+1];
358427f654740f2a26ad62a5c155af9199af9e69b889claireho        if (out != expected) {
358527f654740f2a26ad62a5c155af9199af9e69b889claireho            dataerrln((UnicodeString)"FAIL: " + in + " -> " + out + " expected -> " + expected);
358627f654740f2a26ad62a5c155af9199af9e69b889claireho        }
358727f654740f2a26ad62a5c155af9199af9e69b889claireho    }
358827f654740f2a26ad62a5c155af9199af9e69b889claireho
3589b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    delete fmt1;
359027f654740f2a26ad62a5c155af9199af9e69b889claireho}
359127f654740f2a26ad62a5c155af9199af9e69b889clairehovoid DateFormatTest::TestFormalChineseDate() {
359227f654740f2a26ad62a5c155af9199af9e69b889claireho
359327f654740f2a26ad62a5c155af9199af9e69b889claireho    UErrorCode status = U_ZERO_ERROR;
359427f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString pattern ("y\\u5e74M\\u6708d\\u65e5", -1, US_INV );
359527f654740f2a26ad62a5c155af9199af9e69b889claireho    pattern = pattern.unescape();
359627f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString override ("y=hanidec;M=hans;d=hans", -1, US_INV );
359727f654740f2a26ad62a5c155af9199af9e69b889claireho
359827f654740f2a26ad62a5c155af9199af9e69b889claireho    // create formatter
359927f654740f2a26ad62a5c155af9199af9e69b889claireho    SimpleDateFormat *sdf = new SimpleDateFormat(pattern,override,Locale::getChina(),status);
360027f654740f2a26ad62a5c155af9199af9e69b889claireho    failure(status, "new SimpleDateFormat with override", TRUE);
360127f654740f2a26ad62a5c155af9199af9e69b889claireho
360227f654740f2a26ad62a5c155af9199af9e69b889claireho    UDate thedate = date(2009-1900, UCAL_JULY, 28);
360327f654740f2a26ad62a5c155af9199af9e69b889claireho    FieldPosition pos(0);
360427f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString result;
360527f654740f2a26ad62a5c155af9199af9e69b889claireho    sdf->format(thedate,result,pos);
360627f654740f2a26ad62a5c155af9199af9e69b889claireho
360727f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString expected = "\\u4e8c\\u3007\\u3007\\u4e5d\\u5e74\\u4e03\\u6708\\u4e8c\\u5341\\u516b\\u65e5";
360827f654740f2a26ad62a5c155af9199af9e69b889claireho    expected = expected.unescape();
360927f654740f2a26ad62a5c155af9199af9e69b889claireho    if (result != expected) {
361027f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln((UnicodeString)"FAIL: -> " + result + " expected -> " + expected);
361127f654740f2a26ad62a5c155af9199af9e69b889claireho    }
361227f654740f2a26ad62a5c155af9199af9e69b889claireho
361327f654740f2a26ad62a5c155af9199af9e69b889claireho    UDate parsedate = sdf->parse(expected,status);
361427f654740f2a26ad62a5c155af9199af9e69b889claireho    if ( parsedate != thedate ) {
361527f654740f2a26ad62a5c155af9199af9e69b889claireho        UnicodeString pat1 ("yyyy-MM-dd'T'HH:mm:ss'Z'", -1, US_INV );
361627f654740f2a26ad62a5c155af9199af9e69b889claireho        SimpleDateFormat *usf = new SimpleDateFormat(pat1,Locale::getEnglish(),status);
361727f654740f2a26ad62a5c155af9199af9e69b889claireho        UnicodeString parsedres,expres;
361827f654740f2a26ad62a5c155af9199af9e69b889claireho        usf->format(parsedate,parsedres,pos);
361927f654740f2a26ad62a5c155af9199af9e69b889claireho        usf->format(thedate,expres,pos);
3620b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        dataerrln((UnicodeString)"FAIL: parsed -> " + parsedres + " expected -> " + expres);
362127f654740f2a26ad62a5c155af9199af9e69b889claireho        delete usf;
362227f654740f2a26ad62a5c155af9199af9e69b889claireho    }
3623b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    delete sdf;
3624b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}
3625b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3626b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// Test case for #8675
3627b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// Incorrect parse offset with stand alone GMT string on 2nd or later iteration.
3628b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid DateFormatTest::TestStandAloneGMTParse() {
3629b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UErrorCode status = U_ZERO_ERROR;
3630b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    SimpleDateFormat *sdf = new SimpleDateFormat("ZZZZ", Locale(""), status);
3631b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3632b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (!failure(status, "new SimpleDateFormat")) {
3633b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3634b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UnicodeString inText("GMT$$$");
3635b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int32_t i = 0; i < 10; i++) {
3636b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            ParsePosition pos(0);
3637b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            sdf->parse(inText, pos);
3638b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (pos.getIndex() != 3) {
3639b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                errln((UnicodeString)"FAIL: Incorrect output parse position: actual=" + pos.getIndex() + " expected=3");
3640b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
3641b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
3642b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3643b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete sdf;
3644b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
3645b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}
364627f654740f2a26ad62a5c155af9199af9e69b889claireho
3647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */
3648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof
3650