2 *******************************************************************************
\r
3 * Copyright (C) 2001-2010, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
9 * New added, 2001-10-17 [Jing/GCL]
\r
12 package com.ibm.icu.dev.test.format;
\r
14 import java.text.ParseException;
\r
15 import java.text.ParsePosition;
\r
16 import java.util.Date;
\r
17 import java.util.Locale;
\r
19 import com.ibm.icu.text.DateFormat;
\r
20 import com.ibm.icu.text.DateFormatSymbols;
\r
21 import com.ibm.icu.text.SimpleDateFormat;
\r
22 import com.ibm.icu.util.Calendar;
\r
23 import com.ibm.icu.util.TimeZone;
\r
25 public class DateFormatRegressionTestJ extends com.ibm.icu.dev.test.TestFmwk {
\r
27 private static final String TIME_STRING = "2000/11/17 08:01:00";
\r
28 private static final long UTC_LONG = 974476860000L;
\r
29 private static SimpleDateFormat sdf_;
\r
31 protected void init()throws Exception{
\r
32 sdf_ = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
\r
35 public static void main(String[] args) throws Exception {
\r
36 new DateFormatRegressionTestJ().run(args);
\r
39 //Return value of getAmPmStrings
\r
40 public void Test4103926() {
\r
42 String exp_Ampms[]={"AM","PM"};
\r
43 Locale.setDefault(Locale.US);
\r
45 DateFormatSymbols dfs = new DateFormatSymbols();
\r
46 act_Ampms = dfs.getAmPmStrings();
\r
47 if(act_Ampms.length != exp_Ampms.length) {
\r
48 errln("The result is not expected!");
\r
50 for(int i =0; i<act_Ampms.length; i++) {
\r
51 if(!act_Ampms[i].equals(exp_Ampms[i]))
\r
52 errln("The result is not expected!");
\r
57 //Missing digit in millisecone format in SimpleDateFormat
\r
58 public void Test4148168() {
\r
59 Date d = new Date(1002705212906l);
\r
60 String[] ISOPattern = {
\r
61 "''yyyy-MM-dd-hh.mm.ss.S''", "''yyyy-MM-dd-hh.mm.ss.SS''",
\r
62 "''yyyy-MM-dd-hh.mm.ss.SSS''", "''yyyy-MM-dd-hh.mm.ss.SSSS''",
\r
63 "''yyyy-MM-dd-hh.mm.ss.SSSSS''", "''yyyy-MM-dd-hh.mm.ss.SSSSSS''",
\r
64 "''yyyy-MM-dd-hh.mm.ss.SSSSSSS''", "''yyyy-MM-dd-hh.mm.ss.SSS000''"};
\r
65 SimpleDateFormat aSimpleDF = (SimpleDateFormat)DateFormat.getDateTimeInstance();
\r
67 for(int i = 0; i<ISOPattern.length; i++) {
\r
68 aSimpleDF.applyPattern( ISOPattern[i] );
\r
69 logln( "Pattern = " + aSimpleDF.toPattern());
\r
70 logln( "Format = " + aSimpleDF.format(d));
\r
74 //DateFormat getDateTimeInstance(int, int), invalid styles no exception
\r
75 public void Test4213086() {
\r
76 Date someDate = new Date();
\r
79 DateFormat df2 = DateFormat.getDateTimeInstance(2, -2);
\r
80 d = df2.format(someDate);
\r
81 errln("we should catch an exception here");
\r
82 } catch(Exception e){
\r
83 logln("dateStyle = 2" + "\t timeStyle = -2");
\r
84 logln("Exception caught!");
\r
88 DateFormat df3 = DateFormat.getDateTimeInstance(4, 2);
\r
89 d = df3.format(someDate);
\r
90 errln("we should catch an exception here");
\r
91 } catch(Exception e){
\r
92 logln("dateStyle = 4" + "\t timeStyle = 2");
\r
93 logln("Exception caught!");
\r
94 logln("********************************************");
\r
98 DateFormat df4 = DateFormat.getDateTimeInstance(-12, -12);
\r
99 d = df4.format(someDate);
\r
100 errln("we should catch an exception here");
\r
101 } catch(Exception e){
\r
102 logln("dateStyle = -12" + "\t timeStyle = -12");
\r
103 logln("Exception caught!");
\r
104 logln("********************************************");
\r
108 DateFormat df5 = DateFormat.getDateTimeInstance(2, 123);
\r
109 d = df5.format(someDate);
\r
110 errln("we should catch an exception here");
\r
111 } catch(Exception e){
\r
112 logln("dateStyle = 2" + "\t timeStyle = 123");
\r
113 logln("Exception caught!");
\r
114 logln("********************************************");
\r
116 //read the value in d to get rid of the warning
\r
118 logln("The value of d: " + d);
\r
122 //DateFormat.format works wrongly?
\r
123 public void Test4250359() {
\r
124 Locale.setDefault(Locale.US);
\r
125 Calendar cal = Calendar.getInstance();
\r
127 cal.set(101 + 1900, 9, 9, 17, 53);
\r
128 Date d = cal.getTime();
\r
129 DateFormat tf = DateFormat.getTimeInstance(DateFormat.SHORT);
\r
130 String act_result = tf.format(d);
\r
131 String exp_result = "5:53 PM";
\r
133 if(!act_result.equals(exp_result)){
\r
134 errln("The result is not expected");
\r
138 //pattern "s.S, parse '1ms'"
\r
139 public void Test4253490() {
\r
140 Date d = new Date(1002705212231l);
\r
142 String[] ISOPattern = {
\r
143 "''yyyy-MM-dd-hh.mm.ss.S''",
\r
144 "''yyyy-MM-dd-hh.mm.ss.SS''",
\r
145 "''yyyy-MM-dd-hh.mm.ss.SSS''",
\r
146 "''yyyy-MM-dd-hh.mm.ss.SSSS''",
\r
147 "''yyyy-MM-dd-hh.mm.ss.SSSSS''",
\r
148 "''yyyy-MM-dd-hh.mm.ss.SSSSSS''",
\r
149 "''yyyy-MM-dd-hh.mm.ss.SSSSSSS''"};
\r
151 SimpleDateFormat aSimpleDF = (SimpleDateFormat) DateFormat.getDateTimeInstance();
\r
152 for (int i = 0; i < ISOPattern.length; i++) {
\r
153 aSimpleDF.applyPattern(ISOPattern[i]);
\r
154 logln("Pattern = " + aSimpleDF.toPattern());
\r
155 logln("Format = " + aSimpleDF.format(d));
\r
159 //about regression test
\r
160 public void Test4266432() {
\r
161 Locale.setDefault(Locale.JAPAN);
\r
162 Locale loc = Locale.getDefault();
\r
163 String dateFormat = "MM/dd/yy HH:mm:ss zzz";
\r
164 SimpleDateFormat fmt = new SimpleDateFormat(dateFormat);
\r
166 ParsePosition p0 = new ParsePosition(0);
\r
167 logln("Under " + loc +" locale");
\r
168 Date d = fmt.parse("01/22/92 04:52:00 GMT", p0);
\r
169 logln(d.toString());
\r
172 //SimpleDateFormat inconsistent for number of digits for years
\r
173 public void Test4358730() {
\r
174 SimpleDateFormat sdf = new SimpleDateFormat();
\r
175 Calendar cal = Calendar.getInstance();
\r
177 cal.set(2001,11,10);
\r
178 Date today = cal.getTime();
\r
180 sdf.applyPattern("MM d y");
\r
181 logln(sdf.format(today));
\r
182 sdf.applyPattern("MM d yy");
\r
183 logln(sdf.format(today));
\r
185 sdf.applyPattern("MM d yyy");
\r
186 logln(sdf.format(today));
\r
188 sdf.applyPattern("MM d yyyy");
\r
189 logln(sdf.format(today));
\r
191 sdf.applyPattern("MM d yyyyy");
\r
192 logln(sdf.format(today));
\r
195 //Parse invalid string
\r
196 public void Test4375399() {
\r
197 final String pattern = new String("yyyy.MM.dd G 'at' hh:mm:ss z");
\r
198 SimpleDateFormat sdf = new SimpleDateFormat(pattern, Locale.JAPAN);
\r
200 Date currentTime = sdf.parse("vggf 20 01.0 9.29 ap. J.-C. at 05:26:33 GMT+08:00",
\r
201 new ParsePosition(0));
\r
202 if(currentTime ==null)
\r
203 logln("parse right");
\r
204 } catch(Exception e){
\r
209 public void Test4407042() {
\r
210 DateParseThread d1 = new DateParseThread();
\r
211 DateFormatThread d2 = new DateFormatThread();
\r
216 Thread.sleep(1000);
\r
217 } catch (Exception e) {}
\r
220 public void Test4468663() {
\r
221 Date d =new Date(-93716671115767l);
\r
222 String origin_d = d.toString();
\r
224 final String pattern = new String("EEEE, MMMM d, yyyy");
\r
225 SimpleDateFormat sdf = new SimpleDateFormat(pattern);
\r
227 if (sdf.getTimeZone().useDaylightTime()) {
\r
228 logln("original date: " + origin_d.toString());
\r
229 str = sdf.format(d);
\r
230 logln(" after format----->" + str);
\r
232 d = sdf.parse(str, new ParsePosition(0));
\r
233 logln(" after parse----->" + d.toString());
\r
235 str = sdf.format(d);
\r
236 logln(" after format----->" + str);
\r
238 d = sdf.parse(str, new ParsePosition(0));
\r
239 logln(" after parse----->" + d.toString());
\r
241 str = sdf.format(d);
\r
242 logln(" after format----->" + str);
\r
246 //Class used by Test4407042
\r
247 class DateParseThread extends Thread {
\r
248 public void run() {
\r
249 SimpleDateFormat sdf = (SimpleDateFormat) sdf_.clone();
\r
250 TimeZone defaultTZ = TimeZone.getDefault();
\r
251 TimeZone PST = TimeZone.getTimeZone("PST");
\r
252 int defaultOffset = defaultTZ.getRawOffset();
\r
253 int PSTOffset = PST.getRawOffset();
\r
254 int offset = defaultOffset - PSTOffset;
\r
255 long ms = UTC_LONG - offset;
\r
258 while (i < 10000) {
\r
259 Date date = sdf.parse(TIME_STRING);
\r
260 long t = date.getTime();
\r
263 throw new ParseException("Parse Error: " + i + " (" + sdf.format(date)
\r
264 + ") " + t + " != " + ms, 0);
\r
267 } catch (Exception e) {
\r
268 errln("parse error: " + e.getMessage());
\r
273 //Class used by Test4407042
\r
274 class DateFormatThread extends Thread {
\r
275 public void run() {
\r
276 SimpleDateFormat sdf = (SimpleDateFormat) sdf_.clone();
\r
277 TimeZone tz = TimeZone.getTimeZone("PST");
\r
278 sdf.setTimeZone(tz);
\r
280 while (i < 10000) {
\r
282 String s = sdf.format(new Date(UTC_LONG));
\r
283 if (!s.equals(TIME_STRING)) {
\r
284 errln("Format Error: " + i + " " + s + " != "
\r