dtfmttst.cpp revision 27f654740f2a26ad62a5c155af9199af9e69b889
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/********************************************************************
250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * COPYRIGHT:
350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Copyright (c) 1997-2010, 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);
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
8527f654740f2a26ad62a5c155af9199af9e69b889claireho        TESTCASE(43,TestRelativeError);
8627f654740f2a26ad62a5c155af9199af9e69b889claireho        TESTCASE(44,TestRelativeOther);
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        */
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        default: name = ""; break;
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test written by Wally Wedel and emailed to me.
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestWallyWedel()
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Instantiate a TimeZone so we can get the ids.
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *tz = new SimpleTimeZone(7,"");
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Computational variables.
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t offset, hours, minutes, seconds;
104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Instantiate a SimpleDateFormat set up to produce a full time
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     zone name.
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *sdf = new SimpleDateFormat((UnicodeString)"zzzz", status);
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * A String array for the time zone ids.
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t ids_length;
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    StringEnumeration* ids = TimeZone::createEnumeration();
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ids_length = ids->count(status);
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * How many ids do we have?
117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Time Zone IDs size: %d", ids_length);
119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Column headings (sort of)
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Ordinal ID offset(h:m) name");
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Loop through the tzs.
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate today = Calendar::getNow();
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal = Calendar::createInstance(status);
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i = 0; i < ids_length; i++) {
129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // logln(i + " " + ids[i]);
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const UnicodeString* id = ids->snext(status);
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TimeZone *ttz = TimeZone::createTimeZone(*id);
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // offset = ttz.getRawOffset();
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->setTimeZone(*ttz);
134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        cal->setTime(today, status);
135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        offset = cal->get(UCAL_ZONE_OFFSET, status) + cal->get(UCAL_DST_OFFSET, status);
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // logln(i + " " + ids[i] + " offset " + offset);
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* sign = "+";
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (offset < 0) {
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            sign = "-";
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            offset = -offset;
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        hours = offset/3600000;
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        minutes = (offset%3600000)/60000;
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        seconds = (offset%60000)/1000;
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString dstOffset = (UnicodeString)"" + sign + (hours < 10 ? "0" : "") +
146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            (int32_t)hours + ":" + (minutes < 10 ? "0" : "") + (int32_t)minutes;
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (seconds != 0) {
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            dstOffset = dstOffset + ":" + (seconds < 10 ? "0" : "") + seconds;
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Instantiate a date so we can display the time zone name.
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         */
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf->setTimeZone(*ttz);
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Format the output.
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         */
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString fmtOffset;
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        FieldPosition pos(0);
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        sdf->format(today,fmtOffset, pos);
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // UnicodeString fmtOffset = tzS.toString();
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString *fmtDstOffset = 0;
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (fmtOffset.startsWith("GMT"))
163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            //fmtDstOffset = fmtOffset->substring(3);
165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmtDstOffset = new UnicodeString();
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmtOffset.extract(3, fmtOffset.length(), *fmtDstOffset);
167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*
169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         * Show our result.
170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru         */
171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UBool ok = fmtDstOffset == 0 || *fmtDstOffset == dstOffset;
172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (ok)
173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(UnicodeString() + i + " " + *id + " " + dstOffset +
175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " " + fmtOffset +
176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  (fmtDstOffset != 0 ? " ok" : " ?"));
177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else
179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString() + i + " " + *id + " " + dstOffset +
181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " " + fmtOffset + " *** FAIL ***");
182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete ttz;
184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmtDstOffset;
185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //  delete ids;   // TODO:  BAD API
188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete ids;
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete sdf;
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete tz;
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
19450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test operator==
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestEquals()
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* fmtA = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL);
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* fmtB = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL);
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if ( fmtA == NULL || fmtB == NULL){
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateTimeInstance");
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmtA;
206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmtB;
207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(*fmtA == *fmtB)) errln((UnicodeString)"FAIL");
211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmtA;
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmtB;
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* test = TimeZone::createTimeZone("PDT");
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete test;
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
21750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the parsing of 2-digit years.
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestTwoDigitYearDSTParse(void)
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* fullFmt = new SimpleDateFormat((UnicodeString)"EEE MMM dd HH:mm:ss.SSS zzz yyyy G", status);
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *fmt = new SimpleDateFormat((UnicodeString)"dd-MMM-yy h:mm:ss 'o''clock' a z", Locale::getEnglish(), status);
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //DateFormat* fmt = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL, Locale::ENGLISH);
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString* s = new UnicodeString("03-Apr-04 2:20:47 o'clock AM PST", "");
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* defaultTZ = TimeZone::createDefault();
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* PST = TimeZone::createTimeZone("PST");
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t defaultOffset = defaultTZ->getRawOffset();
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t PSTOffset = PST->getRawOffset();
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t hour = 2 + (defaultOffset - PSTOffset) / (60*60*1000);
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // hour is the expected hour of day, in units of seconds
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    hour = ((hour < 0) ? hour + 24 : hour) * 60*60;
23850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
24250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Could not set up test. exitting - %s", u_errorName(status));
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = fmt->parse(*s, status);
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(*s + " P> " + ((DateFormat*)fullFmt)->format(d, str));
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t y, m, day, hr, min, sec;
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateToFields(d, y, m, day, hr, min, sec);
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    hour += defaultTZ->inDaylightTime(d, status) ? 1 : 0;
251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    hr = hr*60*60;
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (hr != hour)
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Should parse to hour " + hour + " but got " + hr);
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: " + (int32_t)status);
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete s;
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullFmt;
261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete PST;
262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete defaultTZ;
263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
26450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
26650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUChar toHexString(int32_t i) { return (UChar)(i + (i < 10 ? 0x30 : (0x41 - 10))); }
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString&
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::escape(UnicodeString& s)
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString buf;
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i=0; i<s.length(); ++i)
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UChar c = s[(int32_t)i];
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (c <= (UChar)0x7F) buf += c;
277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += (UChar)0x5c; buf += (UChar)0x55;
279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0xF000) >> 12);
280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0x0F00) >> 8);
281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0x00F0) >> 4);
282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString(c & 0x000F);
283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return (s = buf);
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
28750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This MUST be kept in sync with DateFormatSymbols.gPatternChars.
292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* PATTERN_CHARS = "GyMdkHmsSEDFwWahKzYeugAZvcLQqV";
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A list of the names of all the fields in DateFormat.
297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This MUST be kept in sync with DateFormat.
298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* DATEFORMAT_FIELD_NAMES[] = {
300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "ERA_FIELD",
301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "YEAR_FIELD",
302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MONTH_FIELD",
303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DATE_FIELD",
304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR_OF_DAY1_FIELD",
305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR_OF_DAY0_FIELD",
306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MINUTE_FIELD",
307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "SECOND_FIELD",
308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MILLISECOND_FIELD",
309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DAY_OF_WEEK_FIELD",
310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DAY_OF_YEAR_FIELD",
311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DAY_OF_WEEK_IN_MONTH_FIELD",
312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "WEEK_OF_YEAR_FIELD",
313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "WEEK_OF_MONTH_FIELD",
314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "AM_PM_FIELD",
315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR1_FIELD",
316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "HOUR0_FIELD",
317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "TIMEZONE_FIELD",
318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "YEAR_WOY_FIELD",
319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "DOW_LOCAL_FIELD",
320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "EXTENDED_YEAR_FIELD",
321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "JULIAN_DAY_FIELD",
322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MILLISECONDS_IN_DAY_FIELD",
323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "TIMEZONE_RFC_FIELD",
324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "GENERIC_TIMEZONE_FIELD",
325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "STAND_ALONE_DAY_FIELD",
326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "STAND_ALONE_MONTH_FIELD",
327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "QUARTER_FIELD",
328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "STAND_ALONE_QUARTER_FIELD",
329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "TIMEZONE_SPECIAL_FIELD"
330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const int32_t DATEFORMAT_FIELD_NAMES_LENGTH =
333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sizeof(DATEFORMAT_FIELD_NAMES) / sizeof(DATEFORMAT_FIELD_NAMES[0]);
334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that returned field position indices are correct.
337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestFieldPosition() {
339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i, j, exp;
341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString buf;
342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Verify data
344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormatSymbols rootSyms(Locale(""), ec);
345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertSuccess("DateFormatSymbols", ec);
34685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(ec)) {
34785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
34885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // local pattern chars data is not longer loaded
351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // from icu locale bundle
352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("patternChars", PATTERN_CHARS, rootSyms.getLocalPatternChars(buf));
353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("patternChars", PATTERN_CHARS, DateFormatSymbols::getPatternUChars());
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertTrue("DATEFORMAT_FIELD_NAMES", DATEFORMAT_FIELD_NAMES_LENGTH == UDAT_FIELD_COUNT);
355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertTrue("Data", UDAT_FIELD_COUNT == uprv_strlen(PATTERN_CHARS));
356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Create test formatters
358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t COUNT = 4;
359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* dateFormats[COUNT];
360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[0] = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale::getUS());
361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[1] = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale::getFrance());
362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Make the pattern "G y M d..."
363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    buf.remove().append(PATTERN_CHARS);
364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (j=buf.length()-1; j>=0; --j) buf.insert(j, (UChar)32/*' '*/);
365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[2] = new SimpleDateFormat(buf, Locale::getUS(), ec);
366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Make the pattern "GGGG yyyy MMMM dddd..."
367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (j=buf.length()-1; j>=0; j-=2) {
368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i=0; i<3; ++i) {
369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf.insert(j, buf.charAt(j));
370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dateFormats[3] = new SimpleDateFormat(buf, Locale::getUS(), ec);
373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(ec)){
374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("Could not create SimpleDateFormat object for locale en_US. Error: " )+ UnicodeString(u_errorName(ec)));
375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate aug13 = 871508052513.0;
378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Expected output field values for above DateFormats on aug13
380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Fields are given in order of DateFormat field number
381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* EXPECTED[] = {
382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "", "1997", "August", "13", "", "", "34", "12", "",
38385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "Wednesday", "", "", "", "", "PM", "2", "", "Pacific Daylight Time", "", "", "", "", "", "", "", "", "", "", "","",
384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "", "1997", "ao\\u00FBt", "13", "", "14", "34", "12", "",
38685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "mercredi", "", "", "", "", "", "", "", "heure avanc\\u00e9e du Pacifique", "", "", "", "", "", "", "",  "", "", "", "", "",
387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "AD", "1997", "8", "13", "14", "14", "34", "12", "5",
38985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "Wed", "225", "2", "33", "2", "PM", "2", "2", "PDT", "1997", "4", "1997", "2450674", "52452513", "-0700", "PT",  "4", "8", "3", "3","PDT",
390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Anno Domini", "1997", "August", "0013", "0014", "0014", "0034", "0012", "5130",
39285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "Wednesday", "0225", "0002", "0033", "0002", "PM", "0002", "0002", "Pacific Daylight Time", "1997", "Wednesday", "1997", "2450674", "52452513", "GMT-07:00",
393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Pacific Time",  "Wednesday", "August", "3rd quarter", "3rd quarter", "United States (Los Angeles)"
394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t EXPECTED_LENGTH = sizeof(EXPECTED)/sizeof(EXPECTED[0]);
397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertTrue("data size", EXPECTED_LENGTH == COUNT * UDAT_FIELD_COUNT);
399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone* PT = TimeZone::createTimeZone("America/Los_Angeles");
401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (j = 0, exp = 0; j < COUNT; ++j) {
402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //  String str;
403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat* df = dateFormats[j];
404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        df->setTimeZone(*PT);
40527f654740f2a26ad62a5c155af9199af9e69b889claireho        SimpleDateFormat* sdtfmt = dynamic_cast<SimpleDateFormat*>(df);
40627f654740f2a26ad62a5c155af9199af9e69b889claireho        if (sdtfmt != NULL) {
40727f654740f2a26ad62a5c155af9199af9e69b889claireho            logln(" Pattern = " + sdtfmt->toPattern(buf.remove()));
408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(" Pattern = ? (not a SimpleDateFormat)");
410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"  Result = " + df->format(aug13, buf.remove()));
412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
41350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        int32_t expBase = exp; // save for later
414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i = 0; i < UDAT_FIELD_COUNT; ++i, ++exp) {
415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            FieldPosition pos(i);
416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf.remove();
41750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            df->format(aug13, buf, pos);
418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString field;
419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf.extractBetween(pos.getBeginIndex(), pos.getEndIndex(), field);
420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"field #" + i + " " + DATEFORMAT_FIELD_NAMES[i],
421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(EXPECTED[exp]), field);
422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
42350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
42450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // test FieldPositionIterator API
42550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        logln("FieldPositionIterator");
42650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {
42750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          UErrorCode status = U_ZERO_ERROR;
42850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          FieldPositionIterator posIter;
42950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          FieldPosition fp;
43050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
43150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          buf.remove();
43250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          df->format(aug13, buf, &posIter, status);
43350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          while (posIter.next(fp)) {
43450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            int32_t i = fp.getField();
43550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            UnicodeString field;
43650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            buf.extractBetween(fp.getBeginIndex(), fp.getEndIndex(), field);
43750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            assertEquals((UnicodeString)"field #" + i + " " + DATEFORMAT_FIELD_NAMES[i],
43850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                         ctou(EXPECTED[expBase + i]), field);
43950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          }
44050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
44150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        }
442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
44450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
44550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // test null posIter
44650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    buf.remove();
44750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UErrorCode status = U_ZERO_ERROR;
44850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    dateFormats[0]->format(aug13, buf, NULL, status);
44950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // if we didn't crash, we succeeded.
45050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (i=0; i<COUNT; ++i) {
452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete dateFormats[i];
453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete PT;
455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * General parse/format tests.  Add test cases as needed.
461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGeneral() {
463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss.SSS",
465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Milliseconds are left-justified, since they format as fractions of a second
46727f654740f2a26ad62a5c155af9199af9e69b889claireho        "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",
46827f654740f2a26ad62a5c155af9199af9e69b889claireho        "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",
469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm:ss.SSS", "F", "2004 03 10 16:36:31.567", "2004/3/10 16:36:31.567",
470b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(DATA, ARRAY_SIZE(DATA), Locale("en", "", ""));
473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
47450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify that strings which contain incomplete specifications are parsed
479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * correctly.  In some instances, this means not being parsed at all, and
480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * returning an appropriate error.
481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestPartialParse994()
484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* f = new SimpleDateFormat(status);
48785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(status)) {
48850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
48985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete f;
49085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
49185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate null = 0;
493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10:11:42", date(97, 1 - 1, 17, 10, 11, 42));
494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10:", null);
495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 10", null);
496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17 ", null);
497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPat994(f, "yy/MM/dd HH:mm:ss", "97/01/17", null);
498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete f;
500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
50150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
50350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::tryPat994(SimpleDateFormat* format, const char* pat, const char* str, UDate expected)
506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate null = 0;
509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("Pattern \"") + pat + "\"   String \"" + str + "\"");
510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        format->applyPattern(pat);
512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate date = format->parse(str, status);
513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status) || date == null)
514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"ParseException: " + (int32_t)status);
516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (expected != null) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else
519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString f;
521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            ((DateFormat*)format)->format(date, f);
522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(UnicodeString(" parse(") + str + ") -> " + dateToString(date));
523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)" format -> " + f);
524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (expected == null ||
525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                !(date == expected)) errln((UnicodeString)"FAIL: Expected null");//" + expected);
526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!(f == str)) errln(UnicodeString("FAIL: Expected ") + str);
527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    logln((UnicodeString)"ParseException: " + e.getMessage());
531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    if (expected != null) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Exception e) {
534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    errln((UnicodeString)"*** Exception:");
535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    e.printStackTrace();
536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
53850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
54050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the behavior of patterns in which digits for different fields run together
543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * without intervening separators.
544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestRunTogetherPattern985()
547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString format("yyyyMMddHHmmssSSS");
550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString now, then;
551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //UBool flag;
552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *formatter = new SimpleDateFormat(format, status);
55350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(status)) {
55450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
55550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        delete formatter;
55650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
55750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date1 = Calendar::getNow();
559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((DateFormat*)formatter)->format(date1, now);
560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(now);
561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos(0);
562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date2 = formatter->parse(now, pos);
563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (date2 == 0) then = "Parse stopped at " + pos.getIndex();
564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else ((DateFormat*)formatter)->format(date2, then);
565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(then);
566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(date2 == date1)) errln((UnicodeString)"FAIL");
567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
57050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
57250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the behavior of patterns in which digits for different fields run together
575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * without intervening separators.
576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestRunTogetherPattern917()
579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* fmt;
582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString myDate;
583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt = new SimpleDateFormat((UnicodeString)"yyyy/MM/dd", status);
58450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(status)) {
58550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
58650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        delete fmt;
58750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
58850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    myDate = "1997/02/03";
590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testIt917(fmt, myDate, date(97, 2 - 1, 3));
591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt = new SimpleDateFormat((UnicodeString)"yyyyMMdd", status);
593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    myDate = "19970304";
594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testIt917(fmt, myDate, date(97, 3 - 1, 4));
595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
59850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
60050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::testIt917(SimpleDateFormat* fmt, UnicodeString& str, UDate expected)
603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pattern;
606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"pattern=" + fmt->toPattern(pattern) + "   string=" + str);
607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable o;
608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ((Format*)fmt)->parseObject(str, o, status);
610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) return;
612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    e.printStackTrace();
614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    return;
615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Parsed object: " + dateToString(o.getDate()));
617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(o.getDate() == expected)) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString formatted; ((Format*)fmt)->format(o, formatted, status);
619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Formatted string: " + formatted);
620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(formatted == str)) errln((UnicodeString)"FAIL: Expected " + str);
621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
62350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
62550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the handling of Czech June and July, which have the unique attribute that
628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * one is a proper prefix substring of the other.
629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestCzechMonths459()
632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat* fmt = DateFormat::createDateInstance(DateFormat::FULL, Locale("cs", "", ""));
635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (fmt == NULL){
636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateInstance()");
637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pattern;
641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Pattern " + ((SimpleDateFormat*) fmt)->toPattern(pattern));
642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate june = date(97, UCAL_JUNE, 15);
643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate july = date(97, UCAL_JULY, 15);
644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString juneStr; fmt->format(june, juneStr);
645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString julyStr; fmt->format(july, julyStr);
646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"format(June 15 1997) = " + juneStr);
648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d = fmt->parse(juneStr, status);
649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString s; fmt->format(d, s);
650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t month,yr,day,hr,min,sec; dateToFields(d,yr,month,day,hr,min,sec);
651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"  -> parse -> " + s + " (month = " + month + ")");
652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (month != UCAL_JUNE) errln((UnicodeString)"FAIL: Month should be June");
653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"format(July 15 1997) = " + julyStr);
654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        d = fmt->parse(julyStr, status);
655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt->format(d, s);
656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dateToFields(d,yr,month,day,hr,min,sec);
657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"  -> parse -> " + s + " (month = " + month + ")");
658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (month != UCAL_JULY) errln((UnicodeString)"FAIL: Month should be July");
659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"Exception: " + (int32_t)status);
663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
66650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of 'D' in patterns.
671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestLetterDPattern212()
674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString dateString("1995-040.05:01:29");
677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString bigD("yyyy-DDD.hh:mm:ss");
678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString littleD("yyyy-ddd.hh:mm:ss");
679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate expLittleD = date(95, 0, 1, 5, 1, 29);
680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate expBigD = expLittleD + 39 * 24 * 3600000.0;
681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expLittleD = expBigD; // Expect the same, with default lenient parsing
682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"dateString= " + dateString);
683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat *formatter = new SimpleDateFormat(bigD, status);
68450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(status)) {
68550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
68650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        delete formatter;
68750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
68850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos(0);
690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate myDate = formatter->parse(dateString, pos);
691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Using " + bigD + " -> " + myDate);
692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (myDate != expBigD) errln((UnicodeString)"FAIL: Expected " + dateToString(expBigD));
693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    formatter = new SimpleDateFormat(littleD, status);
69550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    ASSERT_OK(status);
696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pos = ParsePosition(0);
697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    myDate = formatter->parse(dateString, pos);
698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Using " + littleD + " -> " + dateToString(myDate));
699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (myDate != expLittleD) errln((UnicodeString)"FAIL: Expected " + dateToString(expLittleD));
700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
70350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the day of year pattern.
708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestDayOfYearPattern195()
711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate today = Calendar::getNow();
714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t year,month,day,hour,min,sec; dateToFields(today,year,month,day,hour,min,sec);
715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate expected = date(year, month, day);
716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Test Date: " + dateToString(today));
717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* sdf = (SimpleDateFormat*)DateFormat::createDateInstance();
718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (sdf == NULL){
719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateInstance()");
720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPattern(*sdf, today, 0, expected);
723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tryPattern(*sdf, today, "G yyyy DDD", expected);
724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete sdf;
725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
72750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
72950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::tryPattern(SimpleDateFormat& sdf, UDate d, const char* pattern, UDate expected)
732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pattern != 0) sdf.applyPattern(pattern);
735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString thePat;
736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"pattern: " + sdf.toPattern(thePat));
737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString formatResult; (*(DateFormat*)&sdf).format(d, formatResult);
738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" format -> " + formatResult);
739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // try {
740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d2 = sdf.parse(formatResult, status);
741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)" parse(" + formatResult + ") -> " + dateToString(d2));
742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (d2 != expected) errln((UnicodeString)"FAIL: Expected " + dateToString(expected));
743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString format2; (*(DateFormat*)&sdf).format(d2, format2);
744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)" format -> " + format2);
745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!(formatResult == format2)) errln((UnicodeString)"FAIL: Round trip drift");
746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Exception e) {
748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"Error: " + (int32_t)status);
750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
75250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of single quotes in patterns.
757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestQuotePattern161()
760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat* formatter = new SimpleDateFormat((UnicodeString)"MM/dd/yyyy 'at' hh:mm:ss a zzz", status);
76350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(status)) {
76450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail new SimpleDateFormat: %s", u_errorName(status));
76550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        delete formatter;
76650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
76750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate currentTime_1 = date(97, UCAL_AUGUST, 13, 10, 42, 28);
769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString dateString; ((DateFormat*)formatter)->format(currentTime_1, dateString);
770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString exp("08/13/1997 at 10:42:28 AM ");
771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"format(" + dateToString(currentTime_1) + ") = " + dateString);
772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (0 != dateString.compareBetween(0, exp.length(), exp, 0, exp.length())) errln((UnicodeString)"FAIL: Expected " + exp);
773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
77650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the correct behavior when handling invalid input strings.
781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestBadInput135()
784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat::EStyle looks[] = {
787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat::SHORT, DateFormat::MEDIUM, DateFormat::LONG, DateFormat::FULL
788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t looks_length = (int32_t)(sizeof(looks) / sizeof(looks[0]));
790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* strings[] = {
791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Mar 15", "Mar 15 1997", "asdf", "3/1/97 1:23:", "3/1/00 1:23:45 AM"
792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t strings_length = (int32_t)(sizeof(strings) / sizeof(strings[0]));
794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::LONG);
795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(full==NULL) {
79685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho      dataerrln("could not create date time instance");
797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString expected("March 1, 2000 1:23:45 AM ");
800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i = 0; i < strings_length;++i) {
801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* text = strings[i];
802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (int32_t j = 0; j < looks_length;++j) {
803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            DateFormat::EStyle dateLook = looks[j];
804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            for (int32_t k = 0; k < looks_length;++k) {
805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                DateFormat::EStyle timeLook = looks[k];
806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                DateFormat *df = DateFormat::createDateTimeInstance(dateLook, timeLook);
807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (df == NULL){
808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    dataerrln("Error calling DateFormat::createDateTimeInstance()");
809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    continue;
810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString prefix = UnicodeString(text) + ", " + dateLook + "/" + timeLook + ": ";
812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //try {
813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    UDate when = df->parse(text, status);
814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (when == 0 && U_SUCCESS(status)) {
815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        errln(prefix + "SHOULD NOT HAPPEN: parse returned 0.");
816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        continue;
817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (U_SUCCESS(status))
819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    {
820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        UnicodeString format;
821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        full->format(when, format);
822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        logln(prefix + "OK: " + format);
823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        if (0!=format.compareBetween(0, expected.length(), expected, 0, expected.length()))
824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            errln((UnicodeString)"FAIL: Expected " + expected + " got " + format);
825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //}
827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //catch(ParseException e) {
828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    else
829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        status = U_ZERO_ERROR;
830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //}
831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //catch(StringIndexOutOfBoundsException e) {
832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //    errln(prefix + "SHOULD NOT HAPPEN: " + (int)status);
833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //}
834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                delete df;
835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
84250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* const parseFormats[] = {
844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MMMM d, yyyy",
845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MMMM d yyyy",
846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "M/d/yy",
847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "d MMMM, yyyy",
848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "d MMMM yyyy",
849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "d MMMM",
850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "MMMM d",
851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "yyyy",
852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "h:mm a MMMM d, yyyy"
853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
85450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* const inputStrings[] = {
856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "bogus string", 0, 0, 0, 0, 0, 0, 0, 0, 0,
857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "April 1, 1997", "April 1, 1997", 0, 0, 0, 0, 0, "April 1", 0, 0,
858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "Jan 1, 1970", "January 1, 1970", 0, 0, 0, 0, 0, "January 1", 0, 0,
859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "Jan 1 2037", 0, "January 1 2037", 0, 0, 0, 0, "January 1", 0, 0,
860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "1/1/70", 0, 0, "1/1/70", 0, 0, 0, 0, "0001", 0,
861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "5 May 1997", 0, 0, 0, 0, "5 May 1997", "5 May", 0, "0005", 0,
862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "16 May", 0, 0, 0, 0, 0, "16 May", 0, "0016", 0,
863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "April 30", 0, 0, 0, 0, 0, 0, "April 30", 0, 0,
864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "1998", 0, 0, 0, 0, 0, 0, 0, "1998", 0,
865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "1", 0, 0, 0, 0, 0, 0, 0, "0001", 0,
866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "3:00 pm Jan 1, 1997", 0, 0, 0, 0, 0, 0, 0, "0003", "3:00 PM January 1, 1997",
867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
86850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Verify the correct behavior when parsing an array of inputs against an
873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * array of patterns, with known results.  The results are encoded after
874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the input strings in each row.
875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestBadInput135a()
878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode status = U_ZERO_ERROR;
880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  SimpleDateFormat* dateParse = new SimpleDateFormat(status);
881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_FAILURE(status)) {
88250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    dataerrln("Failed creating SimpleDateFormat with %s. Quitting test", u_errorName(status));
883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete dateParse;
884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return;
885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char* s;
887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UDate date;
888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const uint32_t PF_LENGTH = (int32_t)(sizeof(parseFormats)/sizeof(parseFormats[0]));
889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const uint32_t INPUT_LENGTH = (int32_t)(sizeof(inputStrings)/sizeof(inputStrings[0]));
890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  dateParse->applyPattern("d MMMM, yyyy");
892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  dateParse->adoptTimeZone(TimeZone::createDefault());
893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  s = "not parseable";
894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString thePat;
895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  logln(UnicodeString("Trying to parse \"") + s + "\" with " + dateParse->toPattern(thePat));
896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //try {
897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  date = dateParse->parse(s, status);
898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if (U_SUCCESS(status))
899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln((UnicodeString)"FAIL: Expected exception during parse");
900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //}
901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //catch(Exception ex) {
902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  else
903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Exception during parse: " + (int32_t)status);
904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  status = U_ZERO_ERROR;
905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  //}
906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  for (uint32_t i = 0; i < INPUT_LENGTH; i += (PF_LENGTH + 1)) {
907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition parsePosition(0);
908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s( inputStrings[i]);
909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (uint32_t index = 0; index < PF_LENGTH;++index) {
910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      const char* expected = inputStrings[i + 1 + index];
911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      dateParse->applyPattern(parseFormats[index]);
912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      dateParse->adoptTimeZone(TimeZone::createDefault());
913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //try {
914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      parsePosition.setIndex(0);
915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      date = dateParse->parse(s, parsePosition);
916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if (parsePosition.getIndex() != 0) {
917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString s1, s2;
918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s.extract(0, parsePosition.getIndex(), s1);
919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s.extract(parsePosition.getIndex(), s.length(), s2);
920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (date == 0) {
921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          errln((UnicodeString)"ERROR: null result fmt=\"" +
922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     parseFormats[index] +
923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     "\" pos=" + parsePosition.getIndex() + " " +
924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     s1 + "|" + s2);
925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          UnicodeString result;
928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          ((DateFormat*)dateParse)->format(date, result);
929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          logln((UnicodeString)"Parsed \"" + s + "\" using \"" + dateParse->toPattern(thePat) + "\" to: " + result);
930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          if (expected == 0)
931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: Expected parse failure");
932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          else if (!(result == expected))
933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("FAIL: Expected ") + expected);
934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      else if (expected != 0) {
937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("FAIL: Expected ") + expected + " from \"" +
938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     s + "\" with \"" + dateParse->toPattern(thePat) + "\"");
939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //}
941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //catch(Exception ex) {
942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if (U_FAILURE(status))
943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"An exception was thrown during parse: " + (int32_t)status);
944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      //}
945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  delete dateParse;
948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if (U_FAILURE(status))
949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln((UnicodeString)"FAIL: UErrorCode received during test: " + (int32_t)status);
950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
95150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the parsing of two-digit years.
956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestTwoDigitYear()
959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("dd/MM/yy", Locale::getUK(), ec);
962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
96350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("FAIL: SimpleDateFormat constructor - %s", u_errorName(ec));
964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    parse2DigitYear(fmt, "5/6/17", date(117, UCAL_JUNE, 5));
967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    parse2DigitYear(fmt, "4/6/34", date(34, UCAL_JUNE, 4));
968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
96950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
97150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::parse2DigitYear(DateFormat& fmt, const char* str, UDate expected)
974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d = fmt.parse(str, status);
978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString thePat;
979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Parsing \"") + str + "\" with " + ((SimpleDateFormat*)&fmt)->toPattern(thePat) +
980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "  => " + dateToString(d));
981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (d != expected) errln((UnicodeString)"FAIL: Expected " + expected);
982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(ParseException e) {
984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status))
985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Got exception");
986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
98850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the formatting of time zones.
993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestDateFormatZone061()
996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date;
999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *formatter;
1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    date= 859248000000.0;
1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date 1997/3/25 00:00 GMT: " + date);
1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    formatter = new SimpleDateFormat((UnicodeString)"dd-MMM-yyyyy HH:mm", Locale::getUK(), status);
1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
100450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      dataerrln("Failed creating SimpleDateFormat with %s. Quitting test", u_errorName(status));
1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      delete formatter;
1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    formatter->adoptTimeZone(TimeZone::createTimeZone("GMT"));
1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString temp; formatter->format(date, temp);
1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Formatted in GMT to: " + temp);
1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate tempDate = formatter->parse(temp, status);
1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"Parsed to: " + dateToString(tempDate));
1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (tempDate != date) errln((UnicodeString)"FAIL: Expected " + dateToString(date));
1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Throwable t) {
1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"Date Formatter throws: " + (int32_t)status);
1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete formatter;
1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
102250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
102450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the formatting of time zones.
1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestDateFormatZone146()
1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *saveDefault = TimeZone::createDefault();
1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //try {
1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone *thedefault = TimeZone::createTimeZone("GMT");
1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TimeZone::setDefault(*thedefault);
1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // java.util.Locale.setDefault(new java.util.Locale("ar", "", ""));
1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // check to be sure... its GMT all right
1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TimeZone *testdefault = TimeZone::createDefault();
1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString testtimezone;
1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        testdefault->getID(testtimezone);
1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (testtimezone == "GMT")
1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln("Test timezone = " + testtimezone);
1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else
1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("Test timezone should be GMT, not " + testtimezone);
1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // now try to use the default GMT time zone
1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        GregorianCalendar *greenwichcalendar =
1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            new GregorianCalendar(1997, 3, 4, 23, 0, status);
105150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        if (U_FAILURE(status)) {
105250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            dataerrln("Fail new GregorianCalendar: %s", u_errorName(status));
105350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        } else {
105450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            //*****************************greenwichcalendar.setTimeZone(TimeZone.getDefault());
105550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            //greenwichcalendar.set(1997, 3, 4, 23, 0);
105650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            // try anything to set hour to 23:00 !!!
105750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            greenwichcalendar->set(UCAL_HOUR_OF_DAY, 23);
105850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            // get time
105950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            UDate greenwichdate = greenwichcalendar->getTime(status);
106050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            // format every way
106150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            UnicodeString DATA [] = {
106250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                UnicodeString("simple format:  "), UnicodeString("04/04/97 23:00 GMT+00:00"),
106350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UnicodeString("MM/dd/yy HH:mm z"),
106450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                UnicodeString("full format:    "), UnicodeString("Friday, April 4, 1997 11:00:00 o'clock PM GMT+00:00"),
106550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UnicodeString("EEEE, MMMM d, yyyy h:mm:ss 'o''clock' a z"),
106650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                UnicodeString("long format:    "), UnicodeString("April 4, 1997 11:00:00 PM GMT+00:00"),
106750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UnicodeString("MMMM d, yyyy h:mm:ss a z"),
106850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                UnicodeString("default format: "), UnicodeString("04-Apr-97 11:00:00 PM"),
106950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UnicodeString("dd-MMM-yy h:mm:ss a"),
107050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                UnicodeString("short format:   "), UnicodeString("4/4/97 11:00 PM"),
107150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    UnicodeString("M/d/yy h:mm a")
107250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            };
107350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            int32_t DATA_length = (int32_t)(sizeof(DATA) / sizeof(DATA[0]));
107450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
107550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            for (int32_t i=0; i<DATA_length; i+=3) {
107650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                DateFormat *fmt = new SimpleDateFormat(DATA[i+2], Locale::getEnglish(), status);
107750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                if(failure(status, "new SimpleDateFormat")) break;
107850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                fmt->setCalendar(*greenwichcalendar);
107950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                UnicodeString result;
108050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                result = fmt->format(greenwichdate, result);
108150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                logln(DATA[i] + result);
108250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                if (result != DATA[i+1])
108350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    errln("FAIL: Expected " + DATA[i+1] + ", got " + result);
108450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                delete fmt;
108550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            }
1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //finally {
1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        TimeZone::adoptDefault(saveDefault);
1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete testdefault;
1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete greenwichcalendar;
1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete thedefault;
1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
109750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
109950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the formatting of dates in different locales.
1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDateFormatTest::TestLocaleDateFormat() // Bug 495
1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate testDate = date(97, UCAL_SEPTEMBER, 15);
110750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    DateFormat *dfFrench = DateFormat::createDateTimeInstance(DateFormat::FULL,
1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat::FULL, Locale::getFrench());
110950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    DateFormat *dfUS = DateFormat::createDateTimeInstance(DateFormat::FULL,
1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DateFormat::FULL, Locale::getUS());
111185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString expectedFRENCH ( "lundi 15 septembre 1997 00:00:00 heure avanc\\u00E9e du Pacifique", -1, US_INV );
1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectedFRENCH = expectedFRENCH.unescape();
1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //UnicodeString expectedUS ( "Monday, September 15, 1997 12:00:00 o'clock AM PDT" );
111485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString expectedUS ( "Monday, September 15, 1997 12:00:00 AM Pacific Daylight Time" );
1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date set to : " + dateToString(testDate));
111650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString out;
1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (dfUS == NULL || dfFrench == NULL){
1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling DateFormat::createDateTimeInstance)");
1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete dfUS;
1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete dfFrench;
1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dfFrench->format(testDate, out);
1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date Formated with French Locale " + out);
1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(out == expectedFRENCH))
1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected " + expectedFRENCH);
1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    out.truncate(0);
1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dfUS->format(testDate, out);
1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Date Formated with US Locale " + out);
1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(out == expectedUS))
1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected " + expectedUS);
1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete dfUS;
1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete dfFrench;
1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test DateFormat(Calendar) API
1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestDateFormatCalendar() {
1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *date=0, *time=0, *full=0;
1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *cal=0;
1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos;
1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate when;
1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a formatter for date fields. */
1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    date = DateFormat::createDateInstance(DateFormat::kShort, Locale::getUS());
1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (date == NULL) {
115185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("FAIL: createDateInstance failed");
1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a formatter for time fields. */
1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    time = DateFormat::createTimeInstance(DateFormat::kShort, Locale::getUS());
1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (time == NULL) {
1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: createTimeInstance failed");
1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a full format for output */
1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull,
1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                              Locale::getUS());
1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: createInstance failed");
1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Create a calendar */
1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal = Calendar::createInstance(Locale::getUS(), ec);
1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (cal == NULL || U_FAILURE(ec)) {
117350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln((UnicodeString)"FAIL: Calendar::createInstance failed with " +
1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              u_errorName(ec));
1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Parse the date */
1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cal->clear();
1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str = UnicodeString("4/5/2001", "");
1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pos.setIndex(0);
1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    date->parse(str, *cal, pos);
1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pos.getIndex() != str.length()) {
1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: DateFormat::parse(4/5/2001) failed at " +
1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              pos.getIndex());
1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Parse the time */
1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str = UnicodeString("5:45 PM", "");
1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pos.setIndex(0);
1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    time->parse(str, *cal, pos);
1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pos.getIndex() != str.length()) {
1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: DateFormat::parse(17:45) failed at " +
1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              pos.getIndex());
1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
119850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Check result */
1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    when = cal->getTime(ec);
1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: cal->getTime() failed with " + u_errorName(ec));
1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto FAIL;
1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.truncate(0);
1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(when, str);
1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Thursday, April 5, 2001 5:45:00 PM PDT 986517900000
1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (when == 986517900000.0) {
1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("Ok: Parsed result: " + str);
1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Parsed result: " + str + ", exp 4/5/2001 5:45 PM");
1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
121450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FAIL:
1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete date;
1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete time;
1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cal;
1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test DateFormat's parsing of space characters.  See jitterbug 1916.
1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestSpaceParsing() {
1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // pattern, input, expected parse or NULL if expect parse failure
1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM d yy", " 04 05 06",  NULL, // MMMM wants Apr/April
1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,        "04 05 06",   NULL,
1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MM d yy",   " 04 05 06",  "2006 04 05 00:00:00",
1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,        "04 05 06",   "2006 04 05 00:00:00",
1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM d yy", " Apr 05 06", "2006 04 05 00:00:00",
1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,        "Apr 05 06",  "2006 04 05 00:00:00",
1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectParse(DATA, DATA_len, Locale("en"));
1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test handling of "HHmmss" pattern.
1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestExactCountFormat() {
1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // pattern, input, expected parse or NULL if expect parse failure
1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "HHmmss", "123456", "1970 01 01 12:34:56",
1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "12345",  "1970 01 01 01:23:45",
1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "1234",   NULL,
1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "00-05",  NULL,
1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "12-34",  NULL,
1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,     "00+05",  NULL,
1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ahhmm",  "PM730",  "1970 01 01 19:30:00",
1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectParse(DATA, DATA_len, Locale("en"));
1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test handling of white space.
1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestWhiteSpaceParsing() {
1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd",
126850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // pattern, input, expected parse or null if expect parse failure
127050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Pattern space run should parse input text space run
1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MM   d yy",   " 04 01 03",    "2003 04 01",
1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL,          " 04  01   03 ", "2003 04 01",
1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
127650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectParse(DATA, DATA_len, Locale("en"));
1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestInvalidPattern() {
1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat f(UnicodeString("Yesterday"), ec);
128450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(ec)) {
128550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(ec));
128650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
128750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString out;
1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos;
1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    f.format((UDate)0, out, pos);
1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(out);
1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // The bug is that the call to format() will crash.  By not
1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // crashing, the test passes.
1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGreekMay() {
1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate date = -9896080848000.0;
1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("EEEE, dd MMMM yyyy h:mm:ss a", Locale("el", "", ""), ec);
130050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(ec)) {
130150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(ec));
130250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
130350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(date, str);
1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pos(0);
1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d2 = fmt.parse(str, pos);
1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (date != d2) {
1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: unable to parse strings where case-folding changes length");
1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestStandAloneMonths()
1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1318b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1319b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy LLLL dd H:mm:ss", "F",  "2004 03 10 16:36:31", "2004 March 10 16:36:31",
1321b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
132250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 01 01 0:00:00", "January",   "1970 01 01 0:00:00",
1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 02 01 0:00:00", "February",  "1970 02 01 0:00:00",
1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 03 01 0:00:00", "March",     "1970 03 01 0:00:00",
1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 04 01 0:00:00", "April",     "1970 04 01 0:00:00",
1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 05 01 0:00:00", "May",       "1970 05 01 0:00:00",
1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 06 01 0:00:00", "June",      "1970 06 01 0:00:00",
1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 07 01 0:00:00", "July",      "1970 07 01 0:00:00",
1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 08 01 0:00:00", "August",    "1970 08 01 0:00:00",
1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 09 01 0:00:00", "September", "1970 09 01 0:00:00",
1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 10 01 0:00:00", "October",   "1970 10 01 0:00:00",
1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 11 01 0:00:00", "November",  "1970 11 01 0:00:00",
1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 12 01 0:00:00", "December",  "1970 12 01 0:00:00",
133550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 01 01 0:00:00", "Jan", "1970 01 01 0:00:00",
1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 02 01 0:00:00", "Feb", "1970 02 01 0:00:00",
1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 03 01 0:00:00", "Mar", "1970 03 01 0:00:00",
1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 04 01 0:00:00", "Apr", "1970 04 01 0:00:00",
1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 05 01 0:00:00", "May", "1970 05 01 0:00:00",
1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 06 01 0:00:00", "Jun", "1970 06 01 0:00:00",
1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 07 01 0:00:00", "Jul", "1970 07 01 0:00:00",
1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 08 01 0:00:00", "Aug", "1970 08 01 0:00:00",
1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 09 01 0:00:00", "Sep", "1970 09 01 0:00:00",
1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 10 01 0:00:00", "Oct", "1970 10 01 0:00:00",
1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 11 01 0:00:00", "Nov", "1970 11 01 0:00:00",
1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 12 01 0:00:00", "Dec", "1970 12 01 0:00:00",
1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
134950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *CS_DATA[] = {
1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1353b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1354b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1355b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy LLLL dd H:mm:ss", "F",  "2004 04 10 16:36:31", "2004 duben 10 16:36:31",
1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MMMM dd H:mm:ss", "F",  "2004 04 10 16:36:31", "2004 dubna 10 16:36:31",
1358b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1359b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
136050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 01 01 0:00:00", "leden",               "1970 01 01 0:00:00",
1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 02 01 0:00:00", "\\u00FAnor",           "1970 02 01 0:00:00",
1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 03 01 0:00:00", "b\\u0159ezen",         "1970 03 01 0:00:00",
1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 04 01 0:00:00", "duben",               "1970 04 01 0:00:00",
1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 05 01 0:00:00", "kv\\u011Bten",         "1970 05 01 0:00:00",
1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 06 01 0:00:00", "\\u010Derven",         "1970 06 01 0:00:00",
1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 07 01 0:00:00", "\\u010Dervenec",       "1970 07 01 0:00:00",
1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 08 01 0:00:00", "srpen",               "1970 08 01 0:00:00",
1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 09 01 0:00:00", "z\\u00E1\\u0159\\u00ED", "1970 09 01 0:00:00",
1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 10 01 0:00:00", "\\u0159\\u00EDjen",     "1970 10 01 0:00:00",
1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 11 01 0:00:00", "listopad",            "1970 11 01 0:00:00",
1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLLL", "fp", "1970 12 01 0:00:00", "prosinec",            "1970 12 01 0:00:00",
1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 01 01 0:00:00", "1.",  "1970 01 01 0:00:00",
1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 02 01 0:00:00", "2.",  "1970 02 01 0:00:00",
1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 03 01 0:00:00", "3.",  "1970 03 01 0:00:00",
1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 04 01 0:00:00", "4.",  "1970 04 01 0:00:00",
1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 05 01 0:00:00", "5.",  "1970 05 01 0:00:00",
1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 06 01 0:00:00", "6.",  "1970 06 01 0:00:00",
1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 07 01 0:00:00", "7.",  "1970 07 01 0:00:00",
1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 08 01 0:00:00", "8.",  "1970 08 01 0:00:00",
1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 09 01 0:00:00", "9.",  "1970 09 01 0:00:00",
1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 10 01 0:00:00", "10.", "1970 10 01 0:00:00",
1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 11 01 0:00:00", "11.", "1970 11 01 0:00:00",
1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "LLL", "fp", "1970 12 01 0:00:00", "12.", "1970 12 01 0:00:00",
1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
138750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestStandAloneDays()
1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 04 0:00:00", "Sunday",    "1970 01 04 0:00:00",
1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 05 0:00:00", "Monday",    "1970 01 05 0:00:00",
1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 06 0:00:00", "Tuesday",   "1970 01 06 0:00:00",
1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 07 0:00:00", "Wednesday", "1970 01 07 0:00:00",
1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 01 0:00:00", "Thursday",  "1970 01 01 0:00:00",
1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 02 0:00:00", "Friday",    "1970 01 02 0:00:00",
1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 03 0:00:00", "Saturday",  "1970 01 03 0:00:00",
140450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 04 0:00:00", "Sun", "1970 01 04 0:00:00",
1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 05 0:00:00", "Mon", "1970 01 05 0:00:00",
1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 06 0:00:00", "Tue", "1970 01 06 0:00:00",
1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 07 0:00:00", "Wed", "1970 01 07 0:00:00",
1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 01 0:00:00", "Thu", "1970 01 01 0:00:00",
1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 02 0:00:00", "Fri", "1970 01 02 0:00:00",
1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 03 0:00:00", "Sat", "1970 01 03 0:00:00",
1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
141350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *CS_DATA[] = {
1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm:ss",
1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 04 0:00:00", "ned\\u011Ble",       "1970 01 04 0:00:00",
1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 05 0:00:00", "pond\\u011Bl\\u00ED", "1970 01 05 0:00:00",
1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 06 0:00:00", "\\u00FAter\\u00FD",   "1970 01 06 0:00:00",
1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 07 0:00:00", "st\\u0159eda",       "1970 01 07 0:00:00",
1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 01 0:00:00", "\\u010Dtvrtek",      "1970 01 01 0:00:00",
1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 02 0:00:00", "p\\u00E1tek",        "1970 01 02 0:00:00",
1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "cccc", "fp", "1970 01 03 0:00:00", "sobota",            "1970 01 03 0:00:00",
142450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 04 0:00:00", "ne",      "1970 01 04 0:00:00",
1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 05 0:00:00", "po",      "1970 01 05 0:00:00",
1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 06 0:00:00", "\\u00FAt", "1970 01 06 0:00:00",
1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 07 0:00:00", "st",      "1970 01 07 0:00:00",
1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 01 0:00:00", "\\u010Dt", "1970 01 01 0:00:00",
1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 02 0:00:00", "p\\u00E1", "1970 01 02 0:00:00",
1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "ccc", "fp", "1970 01 03 0:00:00", "so",      "1970 01 03 0:00:00",
1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
143350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestNarrowNames()
1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MM dd HH:mm:ss",
1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MMMMM dd H:mm:ss", "2004 03 10 16:36:31", "2004 M 10 16:36:31",
1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy LLLLL dd H:mm:ss",  "2004 03 10 16:36:31", "2004 M 10 16:36:31",
144550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 01 01 0:00:00", "J",
1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 02 01 0:00:00", "F",
1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 03 01 0:00:00", "M",
1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 04 01 0:00:00", "A",
1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 05 01 0:00:00", "M",
1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 06 01 0:00:00", "J",
1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 07 01 0:00:00", "J",
1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 08 01 0:00:00", "A",
1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 09 01 0:00:00", "S",
1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 10 01 0:00:00", "O",
1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 11 01 0:00:00", "N",
1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 12 01 0:00:00", "D",
145850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 01 01 0:00:00", "J",
1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 02 01 0:00:00", "F",
1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 03 01 0:00:00", "M",
1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 04 01 0:00:00", "A",
1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 05 01 0:00:00", "M",
1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 06 01 0:00:00", "J",
1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 07 01 0:00:00", "J",
1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 08 01 0:00:00", "A",
1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 09 01 0:00:00", "S",
1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 10 01 0:00:00", "O",
1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 11 01 0:00:00", "N",
1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 12 01 0:00:00", "D",
1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 04 0:00:00", "S",
1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 05 0:00:00", "M",
1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 06 0:00:00", "T",
1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 07 0:00:00", "W",
1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 01 0:00:00", "T",
1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 02 0:00:00", "F",
1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 03 0:00:00", "S",
147950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 04 0:00:00", "S",
1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 05 0:00:00", "M",
1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 06 0:00:00", "T",
1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 07 0:00:00", "W",
1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 01 0:00:00", "T",
1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 02 0:00:00", "F",
1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 03 0:00:00", "S",
1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
148850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char *CS_DATA[] = {
1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MM dd HH:mm:ss",
1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy LLLLL dd H:mm:ss", "2004 04 10 16:36:31", "2004 d 10 16:36:31",
1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "yyyy MMMMM dd H:mm:ss", "2004 04 10 16:36:31", "2004 d 10 16:36:31",
149450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 01 01 0:00:00", "l",
1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 02 01 0:00:00", "\\u00FA",
1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 03 01 0:00:00", "b",
1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 04 01 0:00:00", "d",
1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 05 01 0:00:00", "k",
1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 06 01 0:00:00", "\\u010D",
1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 07 01 0:00:00", "\\u010D",
1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 08 01 0:00:00", "s",
1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 09 01 0:00:00", "z",
1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 10 01 0:00:00", "\\u0159",
1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 11 01 0:00:00", "l",
1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "MMMMM", "1970 12 01 0:00:00", "p",
150750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 01 01 0:00:00", "l",
1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 02 01 0:00:00", "\\u00FA",
1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 03 01 0:00:00", "b",
1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 04 01 0:00:00", "d",
1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 05 01 0:00:00", "k",
1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 06 01 0:00:00", "\\u010D",
1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 07 01 0:00:00", "\\u010D",
1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 08 01 0:00:00", "s",
1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 09 01 0:00:00", "z",
1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 10 01 0:00:00", "\\u0159",
1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 11 01 0:00:00", "l",
1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "LLLLL", "1970 12 01 0:00:00", "p",
1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 04 0:00:00", "N",
1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 05 0:00:00", "P",
1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 06 0:00:00", "\\u00DA",
1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 07 0:00:00", "S",
1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 01 0:00:00", "\\u010C",
1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 02 0:00:00", "P",
1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "EEEEE", "1970 01 03 0:00:00", "S",
1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 04 0:00:00", "N",
1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 05 0:00:00", "P",
1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 06 0:00:00", "\\u00DA",
1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 07 0:00:00", "S",
1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 01 0:00:00", "\\u010C",
1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 02 0:00:00", "P",
1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "ccccc", "1970 01 03 0:00:00", "S",
1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
153750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      expectFormat(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      expectFormat(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestEras()
1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd",
1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy G",    "fp", "1951 07 17", "July 17 1951 AD",          "1951 07 17",
1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GG",   "fp", "1951 07 17", "July 17 1951 AD",          "1951 07 17",
1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGG",  "fp", "1951 07 17", "July 17 1951 AD",          "1951 07 17",
1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGGG", "fp", "1951 07 17", "July 17 1951 Anno Domini", "1951 07 17",
1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy G",    "fp", "-438 07 17", "July 17 0439 BC",            "-438 07 17",
1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GG",   "fp", "-438 07 17", "July 17 0439 BC",            "-438 07 17",
1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGG",  "fp", "-438 07 17", "July 17 0439 BC",            "-438 07 17",
1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "MMMM dd yyyy GGGG", "fp", "-438 07 17", "July 17 0439 Before Christ", "-438 07 17",
1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
155750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestQuarters()
1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *EN_DATA[] = {
1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd",
1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "Q",    "fp", "1970 01 01", "1",           "1970 01 01",
1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "QQ",   "fp", "1970 04 01", "02",          "1970 04 01",
1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "QQQ",  "fp", "1970 07 01", "Q3",          "1970 07 01",
1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "QQQQ", "fp", "1970 10 01", "4th quarter", "1970 10 01",
1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "q",    "fp", "1970 01 01", "1",           "1970 01 01",
1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "qq",   "fp", "1970 04 01", "02",          "1970 04 01",
1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "qqq",  "fp", "1970 07 01", "Q3",          "1970 07 01",
1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "qqqq", "fp", "1970 10 01", "4th quarter", "1970 10 01",
1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
157650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test parsing.  Input is an array that starts with the following
1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * header:
1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [0]   = pattern string to parse [i+2] with
1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * followed by test cases, each of which is 3 array elements:
1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i]   = pattern, or NULL to reuse prior pattern
1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+1] = input string
1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+2] = expected parse result (parsed with pattern [0])
1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If expect parse failure, then [i+2] should be NULL.
1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::expectParse(const char** data, int32_t data_length,
1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 const Locale& loc) {
1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UDate FAIL = (UDate) -1;
1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UnicodeString FAIL_STR("parse failure");
1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = 0;
1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("", loc, ec);
1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat ref(data[i++], loc, ec);
1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat gotfmt("G yyyy MM dd HH:mm:ss z", loc, ec);
1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
160550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("FAIL: SimpleDateFormat constructor - %s", u_errorName(ec));
1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* currentPat = NULL;
1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (i<data_length) {
1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pattern  = data[i++];
1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* input    = data[i++];
1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* expected = data[i++];
1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ec = U_ZERO_ERROR;
1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pattern != NULL) {
1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.applyPattern(pattern);
1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            currentPat = pattern;
1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate got = fmt.parse(input, ec);
1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString gotstr(FAIL_STR);
1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(ec)) {
1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            got = FAIL;
1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            gotstr.remove();
1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            gotfmt.format(got, gotstr);
1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode ec2 = U_ZERO_ERROR;
1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate exp = FAIL;
1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString expstr(FAIL_STR);
1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (expected != NULL) {
1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            expstr = expected;
1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            exp = ref.parse(expstr, ec2);
1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(ec2)) {
1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // This only happens if expected is in wrong format --
1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // should never happen once test is debugged.
1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln("FAIL: Internal test error");
1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                return;
1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (got == exp) {
1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"Ok: " + input + " x " +
164550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                  currentPat + " => " + gotstr);
1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: " + input + " x " +
1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  currentPat + " => " + gotstr + ", expected " +
1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  expstr);
1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
165150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test formatting and parsing.  Input is an array that starts
1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with the following header:
1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [0]   = pattern string to parse [i+2] with
1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * followed by test cases, each of which is 3 array elements:
1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i]   = pattern, or null to reuse prior pattern
1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+1] = control string, either "fp", "pf", or "F".
1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+2..] = data strings
1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The number of data strings depends on the control string.
1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Examples:
1668b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'f': Format date [i+2] (as parsed using pattern [0]) and expect string [i+3].
1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'p': Parse string [i+3] and expect date [i+4].
1671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1672b13da9df870a61b11249bf741347908dbea0edd8Jean-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"
1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'F': Format date [i+2] and expect string [i+3],
1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *      then parse string [i+3] and expect date [i+2].
1675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1676b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'p': Parse string [i+2] and expect date [i+3].
1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 'f': Format date [i+3] and expect string [i+4].
1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::expect(const char** data, int32_t data_length,
1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            const Locale& loc) {
1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = 0;
1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str, str2;
1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("", loc, ec);
1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat ref(data[i++], loc, ec);
1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat univ("EE G yyyy MM dd HH:mm:ss.SSS z", loc, ec);
168850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(ec)) {
168950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(ec));
169050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
169150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString currentPat;
1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (i<data_length) {
1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pattern  = data[i++];
1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pattern != NULL) {
1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.applyPattern(pattern);
1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            currentPat = pattern;
1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* control = data[i++];
1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (uprv_strcmp(control, "fp") == 0) {
1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'f'
1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* datestr = data[i++];
1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* string = data[i++];
1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate date = ref.parse(ctou(datestr), ec);
1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(string),
1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         fmt.format(date, str.remove()));
1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'p'
1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            datestr = data[i++];
1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            date = ref.parse(ctou(datestr), ec);
1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate parsedate = fmt.parse(ctou(string), ec);
1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(date, str.remove()),
1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(parsedate, str2.remove()));
1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else if (uprv_strcmp(control, "pf") == 0) {
1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'p'
1726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* string = data[i++];
1727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* datestr = data[i++];
1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate date = ref.parse(ctou(datestr), ec);
1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate parsedate = fmt.parse(ctou(string), ec);
1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(date, str.remove()),
1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(parsedate, str2.remove()));
1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // 'f'
1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            string = data[i++];
1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(string),
1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         fmt.format(date, str.remove()));
1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else if (uprv_strcmp(control, "F") == 0) {
1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* datestr  = data[i++];
1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const char* string   = data[i++];
1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate date = ref.parse(ctou(datestr), ec);
1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!assertSuccess("parse", ec)) return;
1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         ctou(string),
1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         fmt.format(date, str.remove()));
1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UDate parsedate = fmt.parse(string, ec);
1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")", ec)) {
1754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals((UnicodeString)"\"" + currentPat + "\".parse(" + string + ")",
1755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(date, str.remove()),
1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             univ.format(parsedate, str2.remove()));
1757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
1761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: Invalid control string " + control);
1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test formatting.  Input is an array that starts
1769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with the following header:
1770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [0]   = pattern string to parse [i+2] with
1772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * followed by test cases, each of which is 3 array elements:
1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i]   = pattern, or null to reuse prior pattern
1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+1] = data string a
1777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [i+2] = data string b
1778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Examples:
1780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Format date [i+1] and expect string [i+2].
1781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
1782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "y/M/d H:mm:ss.SSSS", "2004/3/10 16:36:31.5679", "2004 03 10 16:36:31.567"
1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::expectFormat(const char** data, int32_t data_length,
1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            const Locale& loc) {
1786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = 0;
1787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str, str2;
1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat fmt("", loc, ec);
1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat ref(data[i++], loc, ec);
1791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat univ("EE G yyyy MM dd HH:mm:ss.SSS z", loc, ec);
179250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(ec)) {
179350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(ec));
179450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return;
179550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString currentPat;
1798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while (i<data_length) {
1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pattern  = data[i++];
1801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pattern != NULL) {
1802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.applyPattern(pattern);
1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            currentPat = pattern;
1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* datestr = data[i++];
1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* string = data[i++];
1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate date = ref.parse(ctou(datestr), ec);
1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!assertSuccess("parse", ec)) return;
1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        assertEquals((UnicodeString)"\"" + currentPat + "\".format(" + datestr + ")",
1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        ctou(string),
1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        fmt.format(date, str.remove()));
1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGenericTime() {
1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // any zone pattern should parse any zone
1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const Locale en("en");
1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char* ZDATA[] = {
1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "yyyy MM dd HH:mm zzz",
1821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // round trip
1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Standard Time",
1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm zzz", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PST",
1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm vvvv", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 Pacific Time",
1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm v", "F", "2004 01 01 01:00 PST", "2004/1/1 1:00 PT",
1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // non-generic timezone string influences dst offset even if wrong for date/time
1827b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1828b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1829b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1830b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // generic timezone generates dst offset appropriate for local time
1832b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1833b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1834b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1835b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // daylight savings time transition edge cases.
1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // time to parse does not really exist, PT interpreted as earlier time
1838b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1839b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1840b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1841b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1842b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1843b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm", "pf", "2005/4/3 2:30", "2005 04 03 03:30 PDT", "2005/4/3 3:30",
1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // time to parse is ambiguous, PT interpreted as later time
1846b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1847b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1848b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1850b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1851b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1852b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1853b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1854b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1855b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "y/M/d H:mm", "pf", "2004/10/31 1:30", "2004 10 31 01:30 PST", "2004/10/31 1:30",
1857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
1858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const int32_t ZDATA_length = sizeof(ZDATA)/ sizeof(ZDATA[0]);
1859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  expect(ZDATA, ZDATA_length, en);
1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode status = U_ZERO_ERROR;
1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  logln("cross format/parse tests");
1864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString basepat("yy/MM/dd H:mm ");
186550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  SimpleDateFormat formats[] = {
1866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "vvv", en, status),
1867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "vvvv", en, status),
1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "zzz", en, status),
1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat(basepat + "zzzz", en, status)
1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
187150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  if (U_FAILURE(status)) {
187250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    dataerrln("Fail construct SimpleDateFormat: %s", u_errorName(status));
187350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return;
187450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const int32_t formats_length = sizeof(formats)/sizeof(formats[0]);
1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UnicodeString test;
1878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  SimpleDateFormat univ("yyyy MM dd HH:mm zzz", en, status);
1879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ASSERT_OK(status);
188050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  const UnicodeString times[] = {
188150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    "2004 01 02 03:04 PST",
188250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    "2004 07 08 09:10 PDT"
1883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
1884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  int32_t times_length = sizeof(times)/sizeof(times[0]);
1885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  for (int i = 0; i < times_length; ++i) {
1886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = univ.parse(times[i], status);
1887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln(UnicodeString("\ntime: ") + d);
1888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int j = 0; j < formats_length; ++j) {
1889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      test.remove();
1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      formats[j].format(d, test);
1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      logln("\ntest: '" + test + "'");
1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      for (int k = 0; k < formats_length; ++k) {
1893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate t = formats[k].parse(test, status);
1894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_SUCCESS(status)) {
1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          if (d != t) {
189650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            errln((UnicodeString)"FAIL: format " + k +
189750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                  " incorrectly parsed output of format " + j +
1898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  " (" + test + "), returned " +
1899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  dateToString(t) + " instead of " + dateToString(d));
1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          } else {
1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"OK: format " + k + " parsed ok");
1902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          }
1903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (status == U_PARSE_ERROR) {
190450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          errln((UnicodeString)"FAIL: format " + k +
190550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                " could not parse output of format " + j +
1906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                " (" + test + ")");
1907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
1909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
1911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestGenericTimeZoneOrder() {
1914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // generic times should parse the same no matter what the placement of the time zone string
1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // should work for standard and daylight times
1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char* XDATA[] = {
1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "yyyy MM dd HH:mm zzz",
1919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // standard time, explicit daylight/standard
1920b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "y/M/d zzz H:mm", "pf", "2004/1/1 PT 1:00", "2004 01 01 01:00 PST", "2004/1/1 PST 1:00",
1922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "zzz y/M/d H:mm", "pf", "PT 2004/1/1 1:00", "2004 01 01 01:00 PST", "PST 2004/1/1 1:00",
1923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // standard time, generic
1925b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "y/M/d vvvv H:mm", "pf", "2004/1/1 PT 1:00", "2004 01 01 01:00 PST", "2004/1/1 Pacific Time 1:00",
1927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "vvvv y/M/d H:mm", "pf", "PT 2004/1/1 1:00", "2004 01 01 01:00 PST", "Pacific Time 2004/1/1 1:00",
1928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // dahylight time, explicit daylight/standard
1930b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "y/M/d zzz H:mm", "pf", "2004/7/1 PT 1:00", "2004 07 01 01:00 PDT", "2004/7/1 PDT 1:00",
1932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "zzz y/M/d H:mm", "pf", "PT 2004/7/1 1:00", "2004 07 01 01:00 PDT", "PDT 2004/7/1 1:00",
1933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // daylight time, generic
1935b13da9df870a61b11249bf741347908dbea0edd8Jean-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",
1936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "y/M/d vvvv H:mm", "pf", "2004/7/1 PT 1:00", "2004 07 01 01:00 PDT", "2004/7/1 Pacific Time 1:00",
1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "vvvv y/M/d H:mm", "pf", "PT 2004/7/1 1:00", "2004 07 01 01:00 PDT", "Pacific Time 2004/7/1 1:00",
1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  };
1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const int32_t XDATA_length = sizeof(XDATA)/sizeof(XDATA[0]);
1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  Locale en("en");
1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  expect(XDATA, XDATA_length, en);
1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestZTimeZoneParsing(void) {
1945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const Locale en("en");
1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString test;
1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //SimpleDateFormat univ("yyyy-MM-dd'T'HH:mm Z", en, status);
1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    SimpleDateFormat univ("HH:mm Z", en, status);
195050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "construct SimpleDateFormat", TRUE)) return;
1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const TimeZone *t = TimeZone::getGMT();
1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    univ.setTimeZone(*t);
195350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    univ.setLenient(false);
1955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ParsePosition pp(0);
1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    struct {
1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString input;
1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString expected_result;
1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } tests[] = {
1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 -0200", "13:00 +0000" },
1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 +0200", "09:00 +0000" },
1962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 +0400", "07:00 +0000" },
1963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "11:00 +0530", "05:30 +0000" }
1964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result;
1967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t tests_length = sizeof(tests)/sizeof(tests[0]);
1968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int i = 0; i < tests_length; ++i) {
1969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        pp.setIndex(0);
1970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UDate d = univ.parse(tests[i].input, pp);
1971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(pp.getIndex() != tests[i].input.length()){
1972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("setZoneString() did not succeed. Consumed: %i instead of %i",
197350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                  pp.getIndex(), tests[i].input.length());
1974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
197550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        }
1976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        result.remove();
1977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        univ.format(d, result);
1978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(result != tests[i].expected_result) {
1979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("Expected " + tests[i].expected_result
1980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  + " got " + result);
1981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("SUCCESS: Parsed " + tests[i].input
1984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              + " got " + result
1985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              + " expected " + tests[i].expected_result);
1986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestHost(void)
1990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef U_WINDOWS
1992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Win32DateTimeTest::testLocales(this);
1993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
1994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Relative Date Tests
1997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
199850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid DateFormatTest::TestRelative(int daysdelta,
1999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  const Locale& loc,
2000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  const char *expectChars) {
2001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char banner[25];
2002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sprintf(banner, "%d", daysdelta);
2003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString bannerStr(banner, "");
200450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
200650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos(0);
2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString test;
2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale en("en");
2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *fullrelative = DateFormat::createDateInstance(DateFormat::kFullRelative, loc);
2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (fullrelative == NULL) {
201385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("DateFormat::createDateInstance(DateFormat::kFullRelative, %s) returned NULL", loc.getName());
2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full         = DateFormat::createDateInstance(DateFormat::kFull        , loc);
201850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
2020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("DateFormat::createDateInstance(DateFormat::kFull, %s) returned NULL", loc.getName());
2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
202350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *en_full =         DateFormat::createDateInstance(DateFormat::kFull,         en);
202550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (en_full == NULL) {
2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("DateFormat::createDateInstance(DateFormat::kFull, en) returned NULL");
2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
203050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *en_fulltime =         DateFormat::createDateTimeInstance(DateFormat::kFull,DateFormat::kFull,en);
203250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (en_fulltime == NULL) {
2034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, en) returned NULL");
2035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
203750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result;
2039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString normalResult;
2040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString expect;
2041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString parseResult;
204250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Calendar *c = Calendar::createInstance(status);
2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Today = Today
2046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    c->setTime(Calendar::getNow(), status);
2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(daysdelta != 0) {
2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        c->add(Calendar::DATE,daysdelta,status);
2049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
2051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // calculate the expected string
2053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(expectChars != NULL) {
2054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect = expectChars;
2055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        full->format(*c, expect, pos); // expected = normal full
2057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
205850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullrelative   ->format(*c, result, pos);
2060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    en_full        ->format(*c, normalResult, pos);
206150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(result != expect) {
2063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Relative Format ["+bannerStr+"] of "+normalResult+" failed, expected "+expect+" but got " + result);
2064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("PASS: Relative Format ["+bannerStr+"] of "+normalResult+" got " + result);
2066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
206750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
206850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //verify
2070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate d = fullrelative->parse(result, status);
2071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
207250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString parseFormat; // parse rel->format full
2074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    en_full->format(d, parseFormat, status);
207550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString origFormat;
2077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    en_full->format(*c, origFormat, pos);
207850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(parseFormat!=origFormat) {
2080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Relative Parse ["+bannerStr+"] of "+result+" failed, expected "+parseFormat+" but got "+origFormat);
2081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("PASS: Relative Parse ["+bannerStr+"] of "+result+" passed, got "+parseFormat);
2083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullrelative;
2087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete en_fulltime;
2088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete en_full;
2089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete c;
2090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelative(void)
2094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale en("en");
2096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 0, en, "Today");
2097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative(-1, en, "Yesterday");
2098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 1, en, "Tomorrow");
2099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 2, en, NULL);
2100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( -2, en, NULL);
2101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 3, en, NULL);
2102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( -3, en, NULL);
2103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( 300, en, NULL);
2104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestRelative( -300, en, NULL);
2105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelativeClone(void)
2108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
2110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Verify that a cloned formatter gives the same results
2111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    and is useable after the original has been deleted.
2112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
2113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc("en");
2115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate now = Calendar::getNow();
2116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full = DateFormat::createDateInstance(DateFormat::kFullRelative, loc);
2117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
211885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("FAIL: Can't create Relative date instance");
2119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result1;
2122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(now, result1, status);
2123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Format *fullClone = full->clone();
2124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = NULL;
2126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result2;
2128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullClone->format(now, result2, status);
2129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
2130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result1 != result2) {
2131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Clone returned different result from non-clone.");
2132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullClone;
2134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestHostClone(void)
2137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
2139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Verify that a cloned formatter gives the same results
2140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    and is useable after the original has been deleted.
2141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
2142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // This is mainly important on Windows.
2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc("en_US@compat=host");
2145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate now = Calendar::getNow();
2146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *full = DateFormat::createDateInstance(DateFormat::kFull, loc);
2147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL) {
214885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("FAIL: Can't create Relative date instance");
2149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result1;
2152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(now, result1, status);
2153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Format *fullClone = full->clone();
2154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = NULL;
2156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result2;
2158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullClone->format(now, result2, status);
2159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ASSERT_OK(status);
2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result1 != result2) {
2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Clone returned different result from non-clone.");
2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullClone;
2164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestTimeZoneDisplayName()
2167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // This test data was ported from ICU4J.  Don't know why the 6th column in there because it's not being
2169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // used currently.
2170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *fallbackTests[][6]  = {
2171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
2173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "PST", "America/Los_Angeles" },
2174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "V", "PST", "America/Los_Angeles" },
2175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "Pacific Standard Time", "America/Los_Angeles" },
2176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "PDT", "America/Los_Angeles" },
2179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "V", "PDT", "America/Los_Angeles" },
2180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "Pacific Daylight Time", "America/Los_Angeles" },
2181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "PT", "America/Los_Angeles" },
2182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "Pacific Time", "America/Los_Angeles" },
2183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Los_Angeles", "2004-07-15T00:00:00Z", "VVVV", "United States (Los Angeles)", "America/Los_Angeles" },
2184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en_GB", "America/Los_Angeles", "2004-01-15T12:00:00Z", "z", "PST", "America/Los_Angeles" },
2185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "Z", "-0700", "-7:00" },
2186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "z", "MST", "America/Phoenix" },
2188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "V", "MST", "America/Phoenix" },
2189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-01-15T00:00:00Z", "zzzz", "Mountain Standard Time", "America/Phoenix" },
2190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "z", "MST", "America/Phoenix" },
2193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "V", "MST", "America/Phoenix" },
2194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "zzzz", "Mountain Standard Time", "America/Phoenix" },
2195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "v", "MST", "America/Phoenix" },
2196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "vvvv", "Mountain Standard Time", "America/Phoenix" },
2197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Phoenix", "2004-07-15T00:00:00Z", "VVVV", "United States (Phoenix)", "America/Phoenix" },
2198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "V", "ART", "-3:00" },
2203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentina Time", "-3:00" },
2204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "V", "ART", "-3:00" },
2208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentina Time", "-3:00" },
2209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Argentina (Buenos Aires)", "America/Buenos_Aires" },
2210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentina Time", "America/Buenos_Aires" },
2211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "VVVV", "Argentina (Buenos Aires)", "America/Buenos_Aires" },
2212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "V", "ART", "-3:00" },
2217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "Argentina Time", "-3:00" },
2218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "V", "ART", "-3:00" },
2222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "Argentina Time", "-3:00" },
2223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Argentina (Buenos Aires)", "America/Buenos_Aires" },
2224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentina Time", "America/Buenos_Aires" },
2225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "VVVV", "Argentina (Buenos Aires)", "America/Buenos_Aires" },
2226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
2229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-05:00", "-5:00" },
2230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "V", "CST (Cuba)", "-5:00" },
2231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "Cuba Standard Time", "-5:00" },
2232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
2234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-04:00", "-4:00" },
2235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "V", "CDT (Cuba)", "-4:00" },
2236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "Cuba Daylight Time", "-4:00" },
2237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "v", "Cuba Time", "America/Havana" },
2238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "Cuba Time", "America/Havana" },
2239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "America/Havana", "2004-07-15T00:00:00Z", "VVVV", "Cuba Time", "America/Havana" },
2240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "V", "AEDT", "+11:00" },
2245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "Australian Eastern Daylight Time", "+11:00" },
2246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "V", "AEST", "+10:00" },
2250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "Australian Eastern Standard Time", "+10:00" },
2251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "Australia (Sydney)", "Australia/Sydney" },
2252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "Eastern Australia Time", "Australia/Sydney" },
2253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/ACT", "2004-07-15T00:00:00Z", "VVVV", "Australia (Sydney)", "Australia/Sydney" },
2254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "V", "AEDT", "+11:00" },
2259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "Australian Eastern Daylight Time", "+11:00" },
2260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "V", "AEST", "+10:00" },
2264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "Australian Eastern Standard Time", "+10:00" },
2265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "Australia (Sydney)", "Australia/Sydney" },
2266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "Eastern Australia Time", "Australia/Sydney" },
2267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Australia/Sydney", "2004-07-15T00:00:00Z", "VVVV", "Australia (Sydney)", "Australia/Sydney" },
2268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+00:00", "+0:00" },
2271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT", "+0:00" },
2272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "V", "GMT", "+0:00" },
2273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "Greenwich Mean Time", "+0:00" },
2274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
2276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+01:00", "Europe/London" },
2277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "V", "BST", "Europe/London" },
2278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "British Summer Time", "Europe/London" },
2279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu en.txt has exemplar city for this time zone
2280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "v", "United Kingdom Time", "Europe/London" },
2281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "United Kingdom Time", "Europe/London" },
2282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "United Kingdom Time", "Europe/London" },
2283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-03:00", "-3:00" },
2293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+05:30", "+5:30" },
2299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "V", "IST", "+5:30" },
2300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "India Standard Time", "+5:30" },
2301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+05:30", "+05:30" },
2304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "V", "IST", "+05:30" },
2305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "India Standard Time", "+5:30" },
2306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "India Time", "Asia/Calcutta" },
2307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "India Standard Time", "Asia/Calcutta" },
230850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
2313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-08:00", "-8:00" },
2314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "GMT-08:00", "-8:00" },
2315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-07:00", "-7:00" },
2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "GMT-07:00", "-7:00" },
2319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "Vereinigte Staaten (Los Angeles)", "America/Los_Angeles" },
2320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "Vereinigte Staaten (Los Angeles)", "America/Los_Angeles" },
2321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Argentinien (Buenos Aires)", "America/Buenos_Aires" },
2331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentinien (Buenos Aires)", "America/Buenos_Aires" },
2332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Argentinien (Buenos Aires)", "America/Buenos_Aires" },
2342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Argentinien (Buenos Aires)", "America/Buenos_Aires" },
2343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
2346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-05:00", "-5:00" },
2347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-05:00", "-5:00" },
2348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
2350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-04:00", "-4:00" },
2351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-04:00", "-4:00" },
235250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "de", "America/Havana", "2004-07-15T00:00:00Z", "v", "(Kuba)", "America/Havana" },
235350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "de", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "(Kuba)", "America/Havana" },
2354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // added to test proper fallback of country name
235550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "de_CH", "America/Havana", "2004-07-15T00:00:00Z", "v", "(Kuba)", "America/Havana" },
235650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "de_CH", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "(Kuba)", "America/Havana" },
2357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
2362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
2366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "Australien (Sydney)", "Australia/Sydney" },
2367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "Australien (Sydney)", "Australia/Sydney" },
2368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
2371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
2372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
2373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
2375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
2376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
2377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "Australien (Sydney)", "Australia/Sydney" },
2378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "Australien (Sydney)", "Australia/Sydney" },
2379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+00:00", "+0:00" },
2382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT+00:00", "+0:00" },
2383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "GMT+00:00", "+0:00" },
2384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
2386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+01:00", "+1:00" },
2387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+01:00", "+1:00" },
238850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "de", "Europe/London", "2004-07-15T00:00:00Z", "v", "(Vereinigtes K\\u00f6nigreich)", "Europe/London" },
238950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "de", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "(Vereinigtes K\\u00f6nigreich)", "Europe/London" },
2390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
2397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
2398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-03:00", "-3:00" },
2400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+05:30", "+5:30" },
2406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
2407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
2409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+05:30", "+05:30" },
2410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
241150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "(Indien)", "Asia/Calcutta" },
241250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "de", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "(Indien)", "Asia/Calcutta" },
2413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
241785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0800", "-8:00" },
241885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0800", "America/Los_Angeles" },
2419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u592a\\u5e73\\u6d0b\\u6807\\u51c6\\u65f6\\u95f4", "America/Los_Angeles" },
2420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
242185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0700", "-7:00" },
242285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0700", "America/Los_Angeles" },
2423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u592a\\u5e73\\u6d0b\\u590f\\u4ee4\\u65f6\\u95f4", "America/Los_Angeles" },
2424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu zh.txt has exemplar city for this time zone
2425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u7f8e\\u56fd (\\u6d1b\\u6749\\u77f6)", "America/Los_Angeles" },
242685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u7f8e\\u56fd\\u592a\\u5e73\\u6d0b\\u65f6\\u95f4", "America/Los_Angeles" },
2427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
242985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
243085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
243185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
2432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
243385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
243485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
243585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
2436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u963f\\u6839\\u5ef7 (\\u5e03\\u5b9c\\u8bfa\\u65af\\u827e\\u5229\\u65af)", "America/Buenos_Aires" },
243785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "America/Buenos_Aires" },
2438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
244085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
244185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
244285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
2443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
244485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
244585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
244685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "-3:00" },
2447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u963f\\u6839\\u5ef7 (\\u5e03\\u5b9c\\u8bfa\\u65af\\u827e\\u5229\\u65af)", "America/Buenos_Aires" },
244885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u963f\\u6839\\u5ef7\\u6807\\u51c6\\u65f6\\u95f4", "America/Buenos_Aires" },
2449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
245185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0500", "-5:00" },
245285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0500", "-5:00" },
245385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "\\u53e4\\u5df4\\u6807\\u51c6\\u65f6\\u95f4", "-5:00" },
2454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
245585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0400", "-4:00" },
245685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0400", "-4:00" },
245785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "\\u53e4\\u5df4\\u590f\\u4ee4\\u65f6\\u95f4", "-4:00" },
245885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u53e4\\u5df4\\u65f6\\u95f4", "America/Havana" },
245985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u53e4\\u5df4\\u65f6\\u95f4", "America/Havana" },
2460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
246285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1100", "+11:00" },
246385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1100", "+11:00" },
2464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u590f\\u4ee4\\u65f6\\u95f4", "+11:00" },
2465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
246685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1000", "+10:00" },
246785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1000", "+10:00" },
246885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u6807\\u51c6\\u65f6\\u95f4", "+10:00" },
2469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu zh.txt does not have info for this time zone
2470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u6fb3\\u5927\\u5229\\u4e9a (\\u6089\\u5c3c)", "Australia/Sydney" },
247185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u65f6\\u95f4", "Australia/Sydney" },
2472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
247485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1100", "+11:00" },
247585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1100", "+11:00" },
2476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u590f\\u4ee4\\u65f6\\u95f4", "+11:00" },
2477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
247885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1000", "+10:00" },
247985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+1000", "+10:00" },
248085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u6807\\u51c6\\u65f6\\u95f4", "+10:00" },
2481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u6fb3\\u5927\\u5229\\u4e9a (\\u6089\\u5c3c)", "Australia/Sydney" },
248285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u6fb3\\u5927\\u5229\\u4e9a\\u4e1c\\u90e8\\u65f6\\u95f4", "Australia/Sydney" },
2483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
248585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0000", "+0:00" },
248685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0000", "+0:00" },
2487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "V", "GMT", "+0:00" },
2488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u683C\\u6797\\u5C3C\\u6CBB\\u6807\\u51C6\\u65F6\\u95F4", "+0:00" },
2489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
249085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0100", "+1:00" },
249185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0100", "+1:00" },
2492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "V", "BST", "+1:00" },
249385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0100", "+1:00" },
249485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u82f1\\u56fd\\u65f6\\u95f4", "Europe/London" },
249585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u82f1\\u56fd\\u65f6\\u95f4", "Europe/London" },
249685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "\\u82f1\\u56fd\\u65f6\\u95f4", "Europe/London" },
2497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
249985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
250085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
250185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
2502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
250385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
250485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
250585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
250685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
250785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4-0300", "-3:00" },
2508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
251185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0530", "+5:30" },
251285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0530", "+5:30" },
251385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u5370\\u5ea6\\u6807\\u51c6\\u65f6\\u95f4", "+5:30" },
2514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
251585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0530", "+5:30" },
251685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "\\u683c\\u6797\\u5c3c\\u6cbb\\u6807\\u51c6\\u65f6\\u95f4+0530", "+05:30" },
251785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u5370\\u5ea6\\u6807\\u51c6\\u65f6\\u95f4", "+5:30" },
251885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u5370\\u5ea6\\u65f6\\u95f4", "Asia/Calcutta" },
251985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u5370\\u5ea6\\u6807\\u51c6\\u65f6\\u95f4", "Asia/Calcutta" },
2520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
2524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u096e:\\u0966\\u0966", "-8:00" },
2525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u096e:\\u0966\\u0966", "-8:00" },
2526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u096e:\\u0966\\u0966", "-8:00" },
2527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
2528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u096d:\\u0966\\u0966", "-7:00" },
2529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u096d:\\u0966\\u0966", "-7:00" },
2530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u096d:\\u0966\\u0966", "-7:00" },
253185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u0938\\u0902\\u092f\\u0941\\u0915\\u094d\\u0924 \\u0930\\u093e\\u091c\\u094d\\u092f \\u0905\\u092e\\u0947\\u0930\\u093f\\u0915\\u093e (\\u0932\\u094b\\u0938 \\u090f\\u0902\\u091c\\u093f\\u0932\\u0947\\u0938)", "America/Los_Angeles" },
253285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u0938\\u0902\\u092f\\u0941\\u0915\\u094d\\u0924 \\u0930\\u093e\\u091c\\u094d\\u092f \\u0905\\u092e\\u0947\\u0930\\u093f\\u0915\\u093e (\\u0932\\u094b\\u0938 \\u090f\\u0902\\u091c\\u093f\\u0932\\u0947\\u0938)", "America/Los_Angeles" },
2533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
254285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0905\\u0930\\u094d\\u091c\\u0947\\u0928\\u094d\\u091f\\u0940\\u0928\\u093e (\\u092c\\u094d\\u092f\\u0942\\u0928\\u0938 \\u0906\\u092f\\u0930\\u0938)", "America/Buenos_Aires" },
254385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0905\\u0930\\u094d\\u091c\\u0947\\u0928\\u094d\\u091f\\u0940\\u0928\\u093e (\\u092c\\u094d\\u092f\\u0942\\u0928\\u0938 \\u0906\\u092f\\u0930\\u0938)", "America/Buenos_Aires" },
2544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
255385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0905\\u0930\\u094d\\u091c\\u0947\\u0928\\u094d\\u091f\\u0940\\u0928\\u093e (\\u092c\\u094d\\u092f\\u0942\\u0928\\u0938 \\u0906\\u092f\\u0930\\u0938)", "America/Buenos_Aires" },
255485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0905\\u0930\\u094d\\u091c\\u0947\\u0928\\u094d\\u091f\\u0940\\u0928\\u093e (\\u092c\\u094d\\u092f\\u0942\\u0928\\u0938 \\u0906\\u092f\\u0930\\u0938)", "America/Buenos_Aires" },
2555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
2557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u096b:\\u0966\\u0966", "-5:00" },
2558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u096b:\\u0966\\u0966", "-5:00" },
2559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u096b:\\u0966\\u0966", "-5:00" },
2560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
2561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u096a:\\u0966\\u0966", "-4:00" },
2562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u096a:\\u0966\\u0966", "-4:00" },
2563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u096a:\\u0966\\u0966", "-4:00" },
256450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "v", "(\\u0915\\u094d\\u092f\\u0942\\u092c\\u093e)", "America/Havana" },
256550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "hi", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "(\\u0915\\u094d\\u092f\\u0942\\u092c\\u093e)", "America/Havana" },
2566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
257585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u0911\\u0938\\u094d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e (\\u0938\\u093f\\u0921\\u0928\\u0940)", "Australia/Sydney" },
257685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u0911\\u0938\\u094d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e (\\u0938\\u093f\\u0921\\u0928\\u0940)", "Australia/Sydney" },
2577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
2579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "GMT+\\u0967\\u0967:\\u0966\\u0966", "+11:00" },
2582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
2583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
2585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+\\u0967\\u0966:\\u0966\\u0966", "+10:00" },
258685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u0911\\u0938\\u094d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e (\\u0938\\u093f\\u0921\\u0928\\u0940)", "Australia/Sydney" },
258785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "hi", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u0911\\u0938\\u094d\\u091f\\u094d\\u0930\\u0947\\u0932\\u093f\\u092f\\u093e (\\u0938\\u093f\\u0921\\u0928\\u0940)", "Australia/Sydney" },
2588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
2590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+\\u0966\\u0966:\\u0966\\u0966", "+0:00" },
2591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT+\\u0966\\u0966:\\u0966\\u0966", "+0:00" },
2592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "GMT+\\u0966\\u0966:\\u0966\\u0966", "+0:00" },
2593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
2594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+\\u0966\\u0967:\\u0966\\u0966", "+1:00" },
2595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+\\u0966\\u0967:\\u0966\\u0966", "+1:00" },
2596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+\\u0966\\u0967:\\u0966\\u0966", "+1:00" },
259750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "v", "(\\u092C\\u094D\\u0930\\u093F\\u0924\\u0928)", "Europe/London" },
259850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "hi", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "(\\u092C\\u094D\\u0930\\u093F\\u0924\\u0928)", "Europe/London" },
2599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
2601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
2605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-\\u0966\\u0969:\\u0966\\u0966", "-3:00" },
2610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
2612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+\\u0966\\u096B:\\u0969\\u0966", "+5:30" },
2613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "IST", "+5:30" },
2614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u0938\\u092E\\u092F", "+5:30" },
2615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
2616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+\\u0966\\u096B:\\u0969\\u0966", "+5:30" },
2617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "IST", "+05:30" },
2618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u0938\\u092E\\u092F", "+5:30" },
2619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "IST", "Asia/Calcutta" },
2620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "hi", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u092D\\u093E\\u0930\\u0924\\u0940\\u092F \\u0938\\u092E\\u092F", "Asia/Calcutta" },
2621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ==========
2623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
262585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0800", "-8:00" },
262685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0800", "America/Los_Angeles" },
2627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-01-15T00:00:00Z", "V", "PST", "America/Los_Angeles" },
2628b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
263085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0700", "-7:00" },
263185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0700", "America/Los_Angeles" },
2632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "V", "PDT", "America/Los_Angeles" },
2633b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu bg.txt has exemplar city for this time zone
2635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u0421\\u0410\\u0429 (\\u041b\\u043e\\u0441 \\u0410\\u043d\\u0436\\u0435\\u043b\\u0438\\u0441)", "America/Los_Angeles" },
2636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u0421\\u0410\\u0429 (\\u041b\\u043e\\u0441 \\u0410\\u043d\\u0436\\u0435\\u043b\\u0438\\u0441)", "America/Los_Angeles" },
2637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Los_Angeles", "2004-07-15T00:00:00Z", "VVVV", "\\u0421\\u0410\\u0429 (\\u041b\\u043e\\u0441 \\u0410\\u043d\\u0436\\u0435\\u043b\\u0438\\u0441)", "America/Los_Angeles" },
2638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
264085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
264185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
264285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
264485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
264585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
264685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0410\\u0440\\u0436\\u0435\\u043d\\u0442\\u0438\\u043d\\u0430 (\\u0411\\u0443\\u0435\\u043D\\u043E\\u0441 \\u0410\\u0439\\u0440\\u0435\\u0441)", "America/Buenos_Aires" },
2648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0440\\u0436\\u0435\\u043d\\u0442\\u0438\\u043d\\u0430 (\\u0411\\u0443\\u0435\\u043D\\u043E\\u0441 \\u0410\\u0439\\u0440\\u0435\\u0441)", "America/Buenos_Aires" },
2649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
265185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
265285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
265385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
265585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
265685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
265785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu bg.txt does not have info for this time zone
2659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u0410\\u0440\\u0436\\u0435\\u043d\\u0442\\u0438\\u043d\\u0430 (\\u0411\\u0443\\u0435\\u043D\\u043E\\u0441 \\u0410\\u0439\\u0440\\u0435\\u0441)", "America/Buenos_Aires" },
2660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0440\\u0436\\u0435\\u043d\\u0442\\u0438\\u043d\\u0430 (\\u0411\\u0443\\u0435\\u043D\\u043E\\u0441 \\u0410\\u0439\\u0440\\u0435\\u0441)", "America/Buenos_Aires" },
2661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
266385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0500", "-5:00" },
266485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0500", "-5:00" },
266585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0500", "-5:00" },
2666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
266785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0400", "-4:00" },
266885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0400", "-4:00" },
266985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0400", "-4:00" },
267050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "v", "(\\u041a\\u0443\\u0431\\u0430)", "America/Havana" },
267150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "bg", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "(\\u041a\\u0443\\u0431\\u0430)", "America/Havana" },
2672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
267485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
267585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
267685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
2677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
267885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
267985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
268085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
2681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043b\\u0438\\u044f (\\u0421\\u0438\\u0434\\u043D\\u0438)", "Australia/Sydney" },
2682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043b\\u0438\\u044f (\\u0421\\u0438\\u0434\\u043D\\u0438)", "Australia/Sydney" },
2683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
268585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
268685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
268785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1100", "+11:00" },
2688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
268985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
269085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
269185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+1000", "+10:00" },
2692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043b\\u0438\\u044f (\\u0421\\u0438\\u0434\\u043D\\u0438)", "Australia/Sydney" },
2693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u0410\\u0432\\u0441\\u0442\\u0440\\u0430\\u043b\\u0438\\u044f (\\u0421\\u0438\\u0434\\u043D\\u0438)", "Australia/Sydney" },
2694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
269685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0000", "+0:00" },
269785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Europe/London", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0000", "+0:00" },
2698b13da9df870a61b11249bf741347908dbea0edd8Jean-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" },
2699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
270085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0100", "+1:00" },
270185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0100", "+1:00" },
270285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0100", "+1:00" },
270350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "v", "(\\u041e\\u0431\\u0435\\u0434\\u0438\\u043d\\u0435\\u043d\\u043e \\u043a\\u0440\\u0430\\u043b\\u0441\\u0442\\u0432\\u043e)", "Europe/London" },
270450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "bg", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "(\\u041e\\u0431\\u0435\\u0434\\u0438\\u043d\\u0435\\u043d\\u043e \\u043a\\u0440\\u0430\\u043b\\u0441\\u0442\\u0432\\u043e)", "Europe/London" },
2705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
270785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
270885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
270985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
271185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
271285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
271385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
271485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
271585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447-0300", "-3:00" },
2716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
271985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
272085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
272185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
2722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
272385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
272485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+05:30" },
272585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "\\u0413\\u0440\\u0438\\u0438\\u043D\\u0443\\u0438\\u0447+0530", "+5:30" },
272650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "(\\u0418\\u043D\\u0434\\u0438\\u044F)", "Asia/Calcutta" },
272750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "bg", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "(\\u0418\\u043D\\u0434\\u0438\\u044F)", "Asia/Calcutta" },
2728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // ==========
2729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
273185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
273285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-08:00", "America/Los_Angeles" },
2733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "V", "PST", "America/Los_Angeles" },
273485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "\\u30a2\\u30e1\\u30ea\\u30ab\\u592a\\u5e73\\u6d0b\\u6a19\\u6e96\\u6642", "America/Los_Angeles" },
273585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-700" },
273685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
273785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-07:00", "America/Los_Angeles" },
2738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "V", "PDT", "America/Los_Angeles" },
273985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "\\u30a2\\u30e1\\u30ea\\u30ab\\u592a\\u5e73\\u6d0b\\u590f\\u6642\\u9593", "America/Los_Angeles" },
2740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu ja.txt has exemplar city for this time zone
2741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u30A2\\u30E1\\u30EA\\u30AB\\u5408\\u8846\\u56FD (\\u30ed\\u30b5\\u30f3\\u30bc\\u30eb\\u30b9)", "America/Los_Angeles" },
274285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u30A2\\u30E1\\u30EA\\u30AB\\u592A\\u5e73\\u6D0B\\u6642\\u9593", "America/Los_Angeles" },
2743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Los_Angeles", "2004-07-15T00:00:00Z", "VVVV", "\\u30A2\\u30E1\\u30EA\\u30AB\\u5408\\u8846\\u56FD (\\u30ed\\u30b5\\u30f3\\u30bc\\u30eb\\u30b9)", "America/Los_Angeles" },
2744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
274685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
274785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
274885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
275085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
275185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
275285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu ja.txt does not have info for this time zone
275485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u30a2\\u30eb\\u30bc\\u30f3\\u30c1\\u30f3 (\\u30D6\\u30A8\\u30CE\\u30B9\\u30A2\\u30A4\\u30EC\\u30B9)", "America/Buenos_Aires" },
275585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u30a2\\u30eb\\u30bc\\u30f3\\u30c1\\u30f3\\u6642\\u9593", "America/Buenos_Aires" },
2756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
275885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
275985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
276085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
276285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
276385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
276485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
276585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u30a2\\u30eb\\u30bc\\u30f3\\u30c1\\u30f3 (\\u30D6\\u30A8\\u30CE\\u30B9\\u30A2\\u30A4\\u30EC\\u30B9)", "America/Buenos_Aires" },
276685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u30a2\\u30eb\\u30bc\\u30f3\\u30c1\\u30f3\\u6642\\u9593", "America/Buenos_Aires" },
2767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
276985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
277085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-05:00", "-5:00" },
277185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-05:00", "-5:00" },
2772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
277385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
277485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-04:00", "-4:00" },
277585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-04:00", "-4:00" },
2776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u30ad\\u30e5\\u30fc\\u30d0\\u6642\\u9593", "America/Havana" },
2777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u30ad\\u30e5\\u30fc\\u30d0\\u6642\\u9593", "America/Havana" },
2778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
278085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
278185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
278285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
2783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
278485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
278585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
278685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
2787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // icu ja.txt does not have info for this time zone
278885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u30aa\\u30fc\\u30b9\\u30c8\\u30e9\\u30ea\\u30a2 (\\u30b7\\u30c9\\u30cb\\u30fc)", "Australia/Sydney" },
278985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u30aa\\u30fc\\u30b9\\u30c8\\u30e9\\u30ea\\u30a2 (\\u30b7\\u30c9\\u30cb\\u30fc)", "Australia/Sydney" },
2790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
279285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
279385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
279485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
2795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
279685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
279785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
279885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
279985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u30aa\\u30fc\\u30b9\\u30c8\\u30e9\\u30ea\\u30a2 (\\u30b7\\u30c9\\u30cb\\u30fc)", "Australia/Sydney" },
280085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u30aa\\u30fc\\u30b9\\u30c8\\u30e9\\u30ea\\u30a2 (\\u30b7\\u30c9\\u30cb\\u30fc)", "Australia/Sydney" },
2801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
280385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+00:00", "+0:00" },
280485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT+00:00", "+0:00" },
2805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "V", "GMT", "+0:00" },
2806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "\\u30B0\\u30EA\\u30CB\\u30C3\\u30B8\\u6A19\\u6E96\\u6642", "+0:00" },
2807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
280885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
280985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+01:00", "+1:00" },
281085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "V", "GMT+01:00", "+1:00" },
281185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+01:00", "+1:00" },
2812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
2813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
2814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Europe/London", "2004-07-15T00:00:00Z", "VVVV", "\\u30a4\\u30ae\\u30ea\\u30b9\\u6642\\u9593", "Europe/London" },
2815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
281785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
281885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
281985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
2820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
282185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
282285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
282385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
282485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-03:00", "-3:00" },
282585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
2828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
282985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
283085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+05:30", "+5:30" },
283185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
2832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
283385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
283485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+05:30", "+05:30" },
283585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
2836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u30A4\\u30F3\\u30C9\\u6642\\u9593", "Asia/Calcutta" },
2837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        { "ja", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u30A4\\u30F3\\u30C9\\u6642\\u9593", "Asia/Calcutta" },
2838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // ==========
2840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
284185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
284285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-08:00", "-8:00" },
284385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-01-15T00:00:00Z", "z", "GMT-08:00", "-8:00" },
284485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-01-15T00:00:00Z", "zzzz", "GMT-08:00", "-8:00" },
284585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-07-15T00:00:00Z", "Z", "-0700", "-7:00" },
284685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
284785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-07:00", "-7:00" },
284885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "GMT-07:00", "-7:00" },
284985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "US (Los Angeles)", "America/Los_Angeles" },
285085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "US (Los Angeles)", "America/Los_Angeles" },
285185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
285285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
285385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
285485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
285585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
285685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
285785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
285885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
285985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
286085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "AR (Buenos Aires)", "America/Buenos_Aires" },
286185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "AR (Buenos Aires)", "America/Buenos_Aires" },
286285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
286385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
286485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
286585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
286685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
286785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
286885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
286985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
287085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
287185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "AR (Buenos Aires)", "America/Buenos_Aires" },
287285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "AR (Buenos Aires)", "America/Buenos_Aires" },
287385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
287485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
287585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
287685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-01-15T00:00:00Z", "z", "GMT-05:00", "-5:00" },
287785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-01-15T00:00:00Z", "zzzz", "GMT-05:00", "-5:00" },
287885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-07-15T00:00:00Z", "Z", "-0400", "-4:00" },
287985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
288085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-04:00", "-4:00" },
288185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-04:00", "-4:00" },
288250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "si", "America/Havana", "2004-07-15T00:00:00Z", "v", "(CU)", "America/Havana" },
288350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "si", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "(CU)", "America/Havana" },
288485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
288585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
288685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
288785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
288885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
288985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
289085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
289185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
289285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
289385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "AU (Sydney)", "Australia/Sydney" },
289485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "AU (Sydney)", "Australia/Sydney" },
289585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
289685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
289785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
289885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-01-15T00:00:00Z", "z", "GMT+11:00", "+11:00" },
289985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-01-15T00:00:00Z", "zzzz", "GMT+11:00", "+11:00" },
290085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-07-15T00:00:00Z", "Z", "+1000", "+10:00" },
290185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
290285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10:00", "+10:00" },
290385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
290485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "AU (Sydney)", "Australia/Sydney" },
290585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "AU (Sydney)", "Australia/Sydney" },
290685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
290785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
290885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+00:00", "+0:00" },
290985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-01-15T00:00:00Z", "z", "GMT+00:00", "+0:00" },
291085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-01-15T00:00:00Z", "zzzz", "GMT+00:00", "+0:00" },
291185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
291285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
291385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+01:00", "+1:00" },
291485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "GMT+01:00", "+1:00" },
291550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "si", "Europe/London", "2004-07-15T00:00:00Z", "v", "(GB)", "Europe/London" },
291650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "si", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "(GB)", "Europe/London" },
291785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
291885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
291985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
292085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-01-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
292185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
292285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
292385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
292485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-07-15T00:00:00Z", "z", "GMT-03:00", "-3:00" },
292585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
292685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-07-15T00:00:00Z", "v", "GMT-03:00", "-3:00" },
292785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Etc/GMT+3", "2004-07-15T00:00:00Z", "vvvv", "GMT-03:00", "-3:00" },
2928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // JB#5150
293085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-01-15T00:00:00Z", "Z", "+0530", "+5:30" },
293185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
293285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-01-15T00:00:00Z", "z", "GMT+05:30", "+5:30" },
293385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-01-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
293485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-07-15T00:00:00Z", "Z", "+0530", "+5:30" },
293585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
293685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+05:30", "+05:30" },
293785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { "si", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
293850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "si", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "(IN)", "Asia/Calcutta" },
293950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        { "si", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "(IN)", "Asia/Calcutta" },
294085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        { NULL, NULL, NULL, NULL, NULL, NULL },
2941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
2942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
294385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
294485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    Calendar *cal = GregorianCalendar::createInstance(status);
294550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "GregorianCalendar::createInstance", TRUE)) return;
294685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for (int i = 0; fallbackTests[i][0]; i++) {
294785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        const char **testLine = fallbackTests[i];
294885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        UnicodeString info[5];
294985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        for ( int j = 0 ; j < 5 ; j++ ) {
295085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            info[j] = UnicodeString(testLine[j], -1, US_INV);
295185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
295285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        info[4] = info[4].unescape();
295385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        logln("%s;%s;%s;%s", testLine[0], testLine[1], testLine[2], testLine[3]);
2954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
295585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        TimeZone *tz = TimeZone::createTimeZone(info[1]);
295685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
295785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        if (strcmp(testLine[2], "2004-07-15T00:00:00Z") == 0) {
295885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            cal->set(2004,6,15,0,0,0);
295985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        } else {
296085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            cal->set(2004,0,15,0,0,0);
296185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
296285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
296385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        SimpleDateFormat fmt(info[3], Locale(testLine[0]),status);
296485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        ASSERT_OK(status);
296585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        cal->adoptTimeZone(tz);
296685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        UnicodeString result;
296785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        FieldPosition pos(0);
296885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        fmt.format(*cal,result,pos);
296985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        if (result != info[4]) {
297050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            errln(info[0] + ";" + info[1] + ";" + info[2] + ";" + info[3] + " expected: '" +
297185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                  info[4] + "' but got: '" + result + "'");
297285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
297385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
297485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete cal;
297585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
297685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
297785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::TestRoundtripWithCalendar(void) {
297885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
297985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
298085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeZone *tz = TimeZone::createTimeZone("Europe/Paris");
298185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeZone *gmt = TimeZone::createTimeZone("Etc/GMT");
298285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
298385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    Calendar *calendars[] = {
298485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Calendar::createInstance(*tz, Locale("und@calendar=gregorian"), status),
298585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Calendar::createInstance(*tz, Locale("und@calendar=buddhist"), status),
298685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//        Calendar::createInstance(*tz, Locale("und@calendar=hebrew"), status),
298785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Calendar::createInstance(*tz, Locale("und@calendar=islamic"), status),
298885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        Calendar::createInstance(*tz, Locale("und@calendar=japanese"), status),
298985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        NULL
299085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    };
299185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(status)) {
299250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("Failed to initialize calendars: %s", u_errorName(status));
299385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        for (int i = 0; calendars[i] != NULL; i++) {
299485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            delete calendars[i];
299585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
299685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
299785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
2998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
299985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    //FIXME The formatters commented out below are currently failing because of
300085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    // the calendar calculation problem reported by #6691
300185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
300285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    // The order of test formatters must match the order of calendars above.
300385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat *formatters[] = {
300485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("en_US")), //calendar=gregorian
300585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("th_TH")), //calendar=buddhist
300685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("he_IL@calendar=hebrew")),
300785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("ar_EG@calendar=islamic")),
300885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//        DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, Locale("ja_JP@calendar=japanese")),
300985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        NULL
301085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    };
301185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
301285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate d = Calendar::getNow();
301385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString buf;
301485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    FieldPosition fpos;
301585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    ParsePosition ppos;
301685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
301785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for (int i = 0; formatters[i] != NULL; i++) {
301885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        buf.remove();
301985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        fpos.setBeginIndex(0);
302085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        fpos.setEndIndex(0);
302185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        calendars[i]->setTime(d, status);
302285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
302385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // Normal case output - the given calendar matches the calendar
302485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // used by the formatter
302585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        formatters[i]->format(*calendars[i], buf, fpos);
302685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        UnicodeString refStr(buf);
302785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
302885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        for (int j = 0; calendars[j] != NULL; j++) {
302985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            if (j == i) {
303085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                continue;
303185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            }
303285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            buf.remove();
303385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            fpos.setBeginIndex(0);
303485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            fpos.setEndIndex(0);
303585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            calendars[j]->setTime(d, status);
303685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
303785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            // Even the different calendar type is specified,
303885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            // we should get the same result.
303985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            formatters[i]->format(*calendars[j], buf, fpos);
304085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            if (refStr != buf) {
304185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                errln((UnicodeString)"FAIL: Different format result with a different calendar for the same time -"
304285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Reference calendar type=" + calendars[i]->getType()
304385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Another calendar type=" + calendars[j]->getType()
304485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Expected result=" + refStr
304585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Actual result=" + buf);
3046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
304785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
3048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
304985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        calendars[i]->setTimeZone(*gmt);
305085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        calendars[i]->clear();
305185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        ppos.setErrorIndex(-1);
305285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        ppos.setIndex(0);
305385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
305485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // Normal case parse result - the given calendar matches the calendar
305585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // used by the formatter
305685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        formatters[i]->parse(refStr, *calendars[i], ppos);
305785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
305885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        for (int j = 0; calendars[j] != NULL; j++) {
305985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            if (j == i) {
306085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                continue;
306185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            }
306285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            calendars[j]->setTimeZone(*gmt);
306385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            calendars[j]->clear();
306485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            ppos.setErrorIndex(-1);
306585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            ppos.setIndex(0);
306685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
306785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            // Even the different calendar type is specified,
306885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            // we should get the same time and time zone.
306985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            formatters[i]->parse(refStr, *calendars[j], ppos);
307085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            if (calendars[i]->getTime(status) != calendars[j]->getTime(status)
307185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                || calendars[i]->getTimeZone() != calendars[j]->getTimeZone()) {
307285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                UnicodeString tzid;
307385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                errln((UnicodeString)"FAIL: Different parse result with a different calendar for the same string -"
307485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Reference calendar type=" + calendars[i]->getType()
307585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Another calendar type=" + calendars[j]->getType()
307685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Date string=" + refStr
307785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Expected time=" + calendars[i]->getTime(status)
307885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Expected time zone=" + calendars[i]->getTimeZone().getID(tzid)
307985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Actual time=" + calendars[j]->getTime(status)
308085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho                        + "\n Actual time zone=" + calendars[j]->getTimeZone().getID(tzid));
3081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
3082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
308385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        if (U_FAILURE(status)) {
308485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            errln((UnicodeString)"FAIL: " + u_errorName(status));
308585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            break;
308685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        }
308785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
308885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
308985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete tz;
309085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete gmt;
309185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for (int i = 0; calendars[i] != NULL; i++) {
309285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete calendars[i];
309385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
309485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    for (int i = 0; formatters[i] != NULL; i++) {
309585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete formatters[i];
3096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
3097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
3098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
3100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelativeError(void)
3101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
3102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status;
3103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale en("en");
310450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DateFormat *en_reltime_reldate =         DateFormat::createDateTimeInstance(DateFormat::kFullRelative,DateFormat::kFullRelative,en);
3106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(en_reltime_reldate == NULL) {
3107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln("PASS: rel date/rel time failed");
3108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
3109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: rel date/rel time created, should have failed.");
3110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete en_reltime_reldate;
3111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
3112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
3113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DateFormatTest::TestRelativeOther(void)
3115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
3116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Nothing in this test. When we get more data from CLDR, put in some tests of -2, +2, etc. ");
3117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
3118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
3119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
312085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::Test6338(void)
312185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho{
312285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
312385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
312485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    SimpleDateFormat *fmt1 = new SimpleDateFormat(UnicodeString("y-M-d"), Locale("ar"), status);
312550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "new SimpleDateFormat", TRUE)) return;
312685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
312785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt1 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
312885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str1;
312985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str1 = fmt1->format(dt1, str1);
313085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str1);
313185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
313285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt11 = fmt1->parse(str1, status);
313385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "fmt->parse");
313485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
313585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str11;
313685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str11 = fmt1->format(dt11, str11);
313785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str11);
313885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
313985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (str1 != str11) {
314085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Different dates str1:" + str1
314185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            + " str2:" + str11);
314285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
314385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt1;
314485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
314585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    /////////////////
314685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
314785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    status = U_ZERO_ERROR;
314885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    SimpleDateFormat *fmt2 = new SimpleDateFormat(UnicodeString("y M d"), Locale("ar"), status);
314985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "new SimpleDateFormat");
315085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
315185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt2 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
315285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str2;
315385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str2 = fmt2->format(dt2, str2);
315485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str2);
315585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
315685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt22 = fmt2->parse(str2, status);
315785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "fmt->parse");
315885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
315985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str22;
316085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str22 = fmt2->format(dt22, str22);
316185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str22);
316285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
316385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (str2 != str22) {
316485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Different dates str1:" + str2
316585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            + " str2:" + str22);
316685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
316785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt2;
316885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
316985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    /////////////////
317085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
317185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    status = U_ZERO_ERROR;
317285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    SimpleDateFormat *fmt3 = new SimpleDateFormat(UnicodeString("y-M-d"), Locale("en-us"), status);
317385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "new SimpleDateFormat");
317485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
317585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt3 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
317685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str3;
317785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str3 = fmt3->format(dt3, str3);
317885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str3);
317985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
318085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt33 = fmt3->parse(str3, status);
318185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "fmt->parse");
318285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
318385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str33;
318485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str33 = fmt3->format(dt33, str33);
318585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str33);
318685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
318785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (str3 != str33) {
318885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Different dates str1:" + str3
318985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            + " str2:" + str33);
319085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
319185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt3;
319285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
319385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    /////////////////
319485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
319585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    status = U_ZERO_ERROR;
319685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    SimpleDateFormat *fmt4 = new SimpleDateFormat(UnicodeString("y M  d"), Locale("en-us"), status);
319785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "new SimpleDateFormat");
319885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
319985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt4 = date(2008-1900, UCAL_JUNE, 10, 12, 00);
320085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str4;
320185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str4 = fmt4->format(dt4, str4);
320285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str4);
320385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
320485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt44 = fmt4->parse(str4, status);
320585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    failure(status, "fmt->parse");
320685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
320785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString str44;
320885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    str44 = fmt4->format(dt44, str44);
320985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    logln(str44);
321085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
321185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (str4 != str44) {
321285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln((UnicodeString)"FAIL: Different dates str1:" + str4
321385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho            + " str2:" + str44);
321485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
321585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt4;
321685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
321785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
321885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
321985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::Test6726(void)
322085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho{
322185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    // status
322285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho//    UErrorCode status = U_ZERO_ERROR;
322385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
322485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    // fmtf, fmtl, fmtm, fmts;
322585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString strf, strl, strm, strs;
322685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate dt = date(2008-1900, UCAL_JUNE, 10, 12, 00);
322785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
322885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    Locale loc("ja");
322985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat* fmtf = DateFormat::createDateTimeInstance(DateFormat::FULL, DateFormat::FULL, loc);
323085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat* fmtl = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::FULL, loc);
323185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat* fmtm = DateFormat::createDateTimeInstance(DateFormat::MEDIUM, DateFormat::FULL, loc);
323285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat* fmts = DateFormat::createDateTimeInstance(DateFormat::SHORT, DateFormat::FULL, loc);
323385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (fmtf == NULL || fmtl == NULL || fmtm == NULL || fmts == NULL) {
323485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("Unable to create DateFormat. got NULL.");
323585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        /* It may not be true that if one is NULL all is NULL.  Just to be safe. */
323685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete fmtf;
323785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete fmtl;
323885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete fmtm;
323985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        delete fmts;
324050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
324185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
324285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
324385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    strf = fmtf->format(dt, strf);
324485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    strl = fmtl->format(dt, strl);
324585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    strm = fmtm->format(dt, strm);
324685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    strs = fmts->format(dt, strs);
324785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
324827f654740f2a26ad62a5c155af9199af9e69b889claireho
324985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/* Locale data is not yet updated
325027f654740f2a26ad62a5c155af9199af9e69b889claireho    if (strf.charAt(13) == UChar(0x20)) {
325127f654740f2a26ad62a5c155af9199af9e69b889claireho        errln((UnicodeString)"FAIL: Improper formatted date: " + strf);
325285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
325327f654740f2a26ad62a5c155af9199af9e69b889claireho    if (strl.charAt(10) == UChar(0x20)) {
325427f654740f2a26ad62a5c155af9199af9e69b889claireho        errln((UnicodeString)"FAIL: Improper formatted date: " + strl);
325585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
325685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho*/
325727f654740f2a26ad62a5c155af9199af9e69b889claireho    logln("strm.charAt(10)=%04X wanted 0x20\n", strm.charAt(10));
325827f654740f2a26ad62a5c155af9199af9e69b889claireho    if (strm.charAt(10) != UChar(0x0020)) {
325927f654740f2a26ad62a5c155af9199af9e69b889claireho      errln((UnicodeString)"FAIL: Improper formatted date: " + strm );
326085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
326127f654740f2a26ad62a5c155af9199af9e69b889claireho    logln("strs.charAt(10)=%04X wanted 0x20\n", strs.charAt(8));
326227f654740f2a26ad62a5c155af9199af9e69b889claireho    if (strs.charAt(8)  != UChar(0x0020)) {
326327f654740f2a26ad62a5c155af9199af9e69b889claireho        errln((UnicodeString)"FAIL: Improper formatted date: " + strs);
326485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
326585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
326685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmtf;
326750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete fmtl;
326850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete fmtm;
326985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmts;
327085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
327185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    return;
327285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
327385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
327485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/**
327585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Test DateFormat's parsing of default GMT variants.  See ticket#6135
327685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */
327785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::TestGMTParsing() {
327885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    const char* DATA[] = {
327985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss Z",
328085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
328185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        // pattern, input, expected output (in quotes)
328285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss Z",       "10:20:30 GMT+03:00",   "10:20:30 +0300",
328385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss Z",       "10:20:30 UT-02:00",    "10:20:30 -0200",
328485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss Z",       "10:20:30 GMT",         "10:20:30 +0000",
328585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss vvvv",    "10:20:30 UT+10:00",    "10:20:30 +1000",
328685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH:mm:ss zzzz",    "10:20:30 UTC",         "10:20:30 +0000",   // standalone "UTC"
328785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "ZZZZ HH:mm:ss",    "UT 10:20:30",          "10:20:30 +0000",
328885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "V HH:mm:ss",       "UT+0130 10:20:30",     "10:20:30 +0130",
328985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "V HH:mm:ss",       "UTC+0130 10:20:30",    NULL,               // UTC+0130 is not a supported pattern
329085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        "HH mm Z ss",       "10 20 GMT-1100 30",    "10:20:30 -1100",
329185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    };
329285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    const int32_t DATA_len = sizeof(DATA)/sizeof(DATA[0]);
329385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    expectParse(DATA, DATA_len, Locale("en"));
329485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
329585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
329685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho// Test case for localized GMT format parsing
329785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho// with no delimitters in offset format (Chinese locale)
329885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid DateFormatTest::Test6880() {
329985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UErrorCode status = U_ZERO_ERROR;
330085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UDate d1, d2, dp1, dp2, dexp1, dexp2;
330185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString s1, s2;
330285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
330385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    TimeZone *tz = TimeZone::createTimeZone("Asia/Shanghai");
330485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    GregorianCalendar gcal(*tz, status);
330550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "construct GregorianCalendar", TRUE)) return;
330650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
330785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.clear();
330885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.set(1910, UCAL_JULY, 1, 12, 00);   // offset 8:05:52
330985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    d1 = gcal.getTime(status);
331085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
331185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.clear();
331285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.set(1950, UCAL_JULY, 1, 12, 00);   // offset 8:00
331385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    d2 = gcal.getTime(status);
331485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
331585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.clear();
331685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    gcal.set(1970, UCAL_JANUARY, 1, 12, 00);
331785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    dexp2 = gcal.getTime(status);
331885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    dexp1 = dexp2 - (5*60 + 52)*1000;   // subtract 5m52s
331985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
332085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(status)) {
332185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("FAIL: Gregorian calendar error");
332285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
332385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
332485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    DateFormat *fmt = DateFormat::createTimeInstance(DateFormat::kFull, Locale("zh"));
332585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (fmt == NULL) {
332685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln("Unable to create DateFormat. Got NULL.");
332785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        return;
332885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
332985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    fmt->adoptTimeZone(tz);
333085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
333185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    fmt->format(d1, s1);
333285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    fmt->format(d2, s2);
333385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
333485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    dp1 = fmt->parse(s1, status);
333585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    dp2 = fmt->parse(s2, status);
333685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
333785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (U_FAILURE(status)) {
333885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("FAIL: Parse failure");
333985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
334085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
334185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (dp1 != dexp1) {
334285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("FAIL: Failed to parse " + s1 + " parsed: " + dp1 + " expected: " + dexp1);
334385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
334485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (dp2 != dexp2) {
334585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("FAIL: Failed to parse " + s2 + " parsed: " + dp2 + " expected: " + dexp2);
334685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
334785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
334885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    delete fmt;
334985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
3350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
335127f654740f2a26ad62a5c155af9199af9e69b889clairehovoid DateFormatTest::TestISOEra() {
335227f654740f2a26ad62a5c155af9199af9e69b889claireho
335327f654740f2a26ad62a5c155af9199af9e69b889claireho    const char* data[] = {
335427f654740f2a26ad62a5c155af9199af9e69b889claireho    // input, output
335527f654740f2a26ad62a5c155af9199af9e69b889claireho    "BC 4004-10-23T07:00:00Z", "BC 4004-10-23T07:00:00Z",
335627f654740f2a26ad62a5c155af9199af9e69b889claireho    "AD 4004-10-23T07:00:00Z", "AD 4004-10-23T07:00:00Z",
335727f654740f2a26ad62a5c155af9199af9e69b889claireho    "-4004-10-23T07:00:00Z"  , "BC 4005-10-23T07:00:00Z",
335827f654740f2a26ad62a5c155af9199af9e69b889claireho    "4004-10-23T07:00:00Z"   , "AD 4004-10-23T07:00:00Z",
335927f654740f2a26ad62a5c155af9199af9e69b889claireho    };
336027f654740f2a26ad62a5c155af9199af9e69b889claireho
336127f654740f2a26ad62a5c155af9199af9e69b889claireho    int32_t numData = 8;
336227f654740f2a26ad62a5c155af9199af9e69b889claireho
336327f654740f2a26ad62a5c155af9199af9e69b889claireho    UErrorCode status = U_ZERO_ERROR;
336427f654740f2a26ad62a5c155af9199af9e69b889claireho
336527f654740f2a26ad62a5c155af9199af9e69b889claireho    // create formatter
336627f654740f2a26ad62a5c155af9199af9e69b889claireho    SimpleDateFormat *fmt1 = new SimpleDateFormat(UnicodeString("GGG yyyy-MM-dd'T'HH:mm:ss'Z"), status);
336727f654740f2a26ad62a5c155af9199af9e69b889claireho    failure(status, "new SimpleDateFormat", TRUE);
336827f654740f2a26ad62a5c155af9199af9e69b889claireho
336927f654740f2a26ad62a5c155af9199af9e69b889claireho    for(int i=0; i < numData; i+=2) {
337027f654740f2a26ad62a5c155af9199af9e69b889claireho        // create input string
337127f654740f2a26ad62a5c155af9199af9e69b889claireho        UnicodeString in = data[i];
337227f654740f2a26ad62a5c155af9199af9e69b889claireho
337327f654740f2a26ad62a5c155af9199af9e69b889claireho        // parse string to date
337427f654740f2a26ad62a5c155af9199af9e69b889claireho        UDate dt1 = fmt1->parse(in, status);
337527f654740f2a26ad62a5c155af9199af9e69b889claireho        failure(status, "fmt->parse", TRUE);
337627f654740f2a26ad62a5c155af9199af9e69b889claireho
337727f654740f2a26ad62a5c155af9199af9e69b889claireho        // format date back to string
337827f654740f2a26ad62a5c155af9199af9e69b889claireho        UnicodeString out;
337927f654740f2a26ad62a5c155af9199af9e69b889claireho        out = fmt1->format(dt1, out);
338027f654740f2a26ad62a5c155af9199af9e69b889claireho        logln(out);
338127f654740f2a26ad62a5c155af9199af9e69b889claireho
338227f654740f2a26ad62a5c155af9199af9e69b889claireho        // check that roundtrip worked as expected
338327f654740f2a26ad62a5c155af9199af9e69b889claireho        UnicodeString expected = data[i+1];
338427f654740f2a26ad62a5c155af9199af9e69b889claireho        if (out != expected) {
338527f654740f2a26ad62a5c155af9199af9e69b889claireho            dataerrln((UnicodeString)"FAIL: " + in + " -> " + out + " expected -> " + expected);
338627f654740f2a26ad62a5c155af9199af9e69b889claireho        }
338727f654740f2a26ad62a5c155af9199af9e69b889claireho    }
338827f654740f2a26ad62a5c155af9199af9e69b889claireho
338927f654740f2a26ad62a5c155af9199af9e69b889claireho    delete fmt1;
339027f654740f2a26ad62a5c155af9199af9e69b889claireho}
339127f654740f2a26ad62a5c155af9199af9e69b889clairehovoid DateFormatTest::TestFormalChineseDate() {
339227f654740f2a26ad62a5c155af9199af9e69b889claireho
339327f654740f2a26ad62a5c155af9199af9e69b889claireho    UErrorCode status = U_ZERO_ERROR;
339427f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString pattern ("y\\u5e74M\\u6708d\\u65e5", -1, US_INV );
339527f654740f2a26ad62a5c155af9199af9e69b889claireho    pattern = pattern.unescape();
339627f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString override ("y=hanidec;M=hans;d=hans", -1, US_INV );
339727f654740f2a26ad62a5c155af9199af9e69b889claireho
339827f654740f2a26ad62a5c155af9199af9e69b889claireho    // create formatter
339927f654740f2a26ad62a5c155af9199af9e69b889claireho    SimpleDateFormat *sdf = new SimpleDateFormat(pattern,override,Locale::getChina(),status);
340027f654740f2a26ad62a5c155af9199af9e69b889claireho    failure(status, "new SimpleDateFormat with override", TRUE);
340127f654740f2a26ad62a5c155af9199af9e69b889claireho
340227f654740f2a26ad62a5c155af9199af9e69b889claireho    UDate thedate = date(2009-1900, UCAL_JULY, 28);
340327f654740f2a26ad62a5c155af9199af9e69b889claireho    FieldPosition pos(0);
340427f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString result;
340527f654740f2a26ad62a5c155af9199af9e69b889claireho    sdf->format(thedate,result,pos);
340627f654740f2a26ad62a5c155af9199af9e69b889claireho
340727f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString expected = "\\u4e8c\\u3007\\u3007\\u4e5d\\u5e74\\u4e03\\u6708\\u4e8c\\u5341\\u516b\\u65e5";
340827f654740f2a26ad62a5c155af9199af9e69b889claireho    expected = expected.unescape();
340927f654740f2a26ad62a5c155af9199af9e69b889claireho    if (result != expected) {
341027f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln((UnicodeString)"FAIL: -> " + result + " expected -> " + expected);
341127f654740f2a26ad62a5c155af9199af9e69b889claireho    }
341227f654740f2a26ad62a5c155af9199af9e69b889claireho
341327f654740f2a26ad62a5c155af9199af9e69b889claireho    UDate parsedate = sdf->parse(expected,status);
341427f654740f2a26ad62a5c155af9199af9e69b889claireho    if ( parsedate != thedate ) {
341527f654740f2a26ad62a5c155af9199af9e69b889claireho        UnicodeString pat1 ("yyyy-MM-dd'T'HH:mm:ss'Z'", -1, US_INV );
341627f654740f2a26ad62a5c155af9199af9e69b889claireho        SimpleDateFormat *usf = new SimpleDateFormat(pat1,Locale::getEnglish(),status);
341727f654740f2a26ad62a5c155af9199af9e69b889claireho        UnicodeString parsedres,expres;
341827f654740f2a26ad62a5c155af9199af9e69b889claireho        usf->format(parsedate,parsedres,pos);
341927f654740f2a26ad62a5c155af9199af9e69b889claireho        usf->format(thedate,expres,pos);
342027f654740f2a26ad62a5c155af9199af9e69b889claireho        errln((UnicodeString)"FAIL: parsed -> " + parsedres + " expected -> " + expres);
342127f654740f2a26ad62a5c155af9199af9e69b889claireho        delete usf;
342227f654740f2a26ad62a5c155af9199af9e69b889claireho    }
342327f654740f2a26ad62a5c155af9199af9e69b889claireho    delete sdf;
342427f654740f2a26ad62a5c155af9199af9e69b889claireho}
342527f654740f2a26ad62a5c155af9199af9e69b889claireho
3426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */
3427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof
3429