17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2002-2010, International Business Machines Corporation and * 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved. * 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.calendar; 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.ParseException; 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.ParsePosition; 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Date; 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.LocaleUtility; 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.DateFormat; 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.SimpleDateFormat; 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.Calendar; 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.JapaneseCalendar; 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.TimeZone; 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ULocale; 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/** 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests for the <code>JapaneseCalendar</code> class. 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class JapaneseTest extends CalendarTest { 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void main(String args[]) throws Exception { 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new JapaneseTest().run(args); 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCoverage() { 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // new JapaneseCalendar(TimeZone) 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert JapaneseCalendar cal = new JapaneseCalendar(TimeZone.getDefault()); 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(cal == null){ 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("could not create JapaneseCalendar with TimeZone"); 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // new JapaneseCalendar(ULocale) 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert JapaneseCalendar cal = new JapaneseCalendar(ULocale.getDefault()); 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(cal == null){ 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("could not create JapaneseCalendar with ULocale"); 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // new JapaneseCalendar(TimeZone, ULocale) 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert JapaneseCalendar cal = new JapaneseCalendar(TimeZone.getDefault(), ULocale.getDefault()); 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(cal == null){ 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("could not create JapaneseCalendar with TimeZone ULocale"); 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // new JapaneseCalendar(Locale) 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert JapaneseCalendar cal = new JapaneseCalendar(Locale.getDefault()); 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(cal == null){ 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("could not create JapaneseCalendar with Locale"); 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // new JapaneseCalendar(TimeZone, Locale) 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert JapaneseCalendar cal = new JapaneseCalendar(TimeZone.getDefault(), Locale.getDefault()); 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(cal == null){ 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("could not create JapaneseCalendar with TimeZone Locale"); 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // new JapaneseCalendar(Date) 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert JapaneseCalendar cal = new JapaneseCalendar(new Date()); 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(cal == null){ 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("could not create JapaneseCalendar with Date"); 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // new JapaneseCalendar(int year, int month, int date) 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert JapaneseCalendar cal = new JapaneseCalendar(1868, Calendar.JANUARY, 1); 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(cal == null){ 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("could not create JapaneseCalendar with year,month,date"); 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // new JapaneseCalendar(int era, int year, int month, int date) 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert JapaneseCalendar cal = new JapaneseCalendar(JapaneseCalendar.MEIJI, 43, Calendar.JANUARY, 1); 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(cal == null){ 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("could not create JapaneseCalendar with era,year,month,date"); 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // new JapaneseCalendar(int year, int month, int date, int hour, int minute, int second) 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert JapaneseCalendar cal = new JapaneseCalendar(1868, Calendar.JANUARY, 1, 1, 1, 1); 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(cal == null){ 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("could not create JapaneseCalendar with year,month,date,hour,min,second"); 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // limits 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert JapaneseCalendar cal = new JapaneseCalendar(); 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DateFormat fmt = cal.getDateTimeFormat(DateFormat.FULL, DateFormat.FULL, Locale.ENGLISH); 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.set(Calendar.ERA, JapaneseCalendar.MEIJI); 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("date: " + cal.getTime()); 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("min era: " + cal.getMinimum(Calendar.ERA)); 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("min year: " + cal.getMinimum(Calendar.YEAR)); 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.set(Calendar.YEAR, cal.getActualMaximum(Calendar.YEAR)); 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("date: " + fmt.format(cal.getTime())); 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.add(Calendar.YEAR, 1); 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("date: " + fmt.format(cal.getTime())); 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // data 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert JapaneseCalendar cal = new JapaneseCalendar(1868, Calendar.JANUARY, 1); 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date time = cal.getTime(); 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] calendarLocales = { 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "en", "ja_JP" 1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] formatLocales = { 1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "en", "ja" 1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < calendarLocales.length; ++i) { 1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String calLocName = calendarLocales[i]; 1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale calLocale = LocaleUtility.getLocaleFromName(calLocName); 1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal = new JapaneseCalendar(calLocale); 1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int j = 0; j < formatLocales.length; ++j) { 1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String locName = formatLocales[j]; 1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale formatLocale = LocaleUtility.getLocaleFromName(locName); 1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DateFormat format = DateFormat.getDateTimeInstance(cal, DateFormat.FULL, DateFormat.FULL, formatLocale); 1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(calLocName + "/" + locName + " --> " + format.format(time)); 1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void Test3860() 1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale loc = new ULocale("ja_JP@calendar=japanese"); 1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Calendar cal = new JapaneseCalendar(loc); 1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DateFormat enjformat = cal.getDateTimeFormat(0,0,new ULocale("en_JP@calendar=japanese")); 1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DateFormat format = cal.getDateTimeFormat(0,0,loc); 1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ((SimpleDateFormat)format).applyPattern("y.M.d"); // Note: just 'y' doesn't work here. 1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ParsePosition pos = new ParsePosition(0); 1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date aDate = format.parse("1.1.9", pos); // after the start of heisei accession. Jan 1, 1H wouldn't work because it is actually showa 64 1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String inEn = enjformat.format(aDate); 1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.clear(); 1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.setTime(aDate); 1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int gotYear = cal.get(Calendar.YEAR); 1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int gotEra = cal.get(Calendar.ERA); 1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int expectYear = 1; 1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int expectEra = JapaneseCalendar.CURRENT_ERA; 1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if((gotYear != expectYear) || (gotEra != expectEra)) { 1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Expected year " + expectYear + ", era " + expectEra +", but got year " + gotYear + " and era " + gotEra + ", == " + inEn); 1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Got year " + gotYear + " and era " + gotEra + ", == " + inEn); 1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Test parse with missing era (should default to current era, heisei) 1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Test parse with incomplete information 1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Testing parse w/ just year..."); 1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Calendar cal2 = new JapaneseCalendar(loc); 1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SimpleDateFormat fmt = new SimpleDateFormat("y", loc); 1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SimpleDateFormat fmt2 = new SimpleDateFormat("HH:mm:ss.S MMMM d, yyyy G", new ULocale("en_US@calendar=gregorian")); 1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal2.clear(); 1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String samplestr = "1"; 1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Test Year: " + samplestr); 1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert aDate = fmt.parse(samplestr); 1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (ParseException pe) { 1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error parsing " + samplestr); 1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ParsePosition pp = new ParsePosition(0); 1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.parse(samplestr, cal2, pp); 1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("cal2 after 1 parse:"); 1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str = fmt2.format(aDate); 1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("as Gregorian Calendar: " + str); 1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal2.setTime(aDate); 1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert gotYear = cal2.get(Calendar.YEAR); 1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert gotEra = cal2.get(Calendar.ERA); 1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectYear = 1; 1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectEra = JapaneseCalendar.CURRENT_ERA; 1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if((gotYear != 1) || (gotEra != expectEra)) { 1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("parse "+ samplestr + " of 'y' as Japanese Calendar, expected year " + expectYear + 1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " and era " + expectEra + ", but got year " + gotYear + " and era " + gotEra + " (Gregorian:" + str +")"); 1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(" year: " + gotYear + ", era: " + gotEra); 2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void Test5345parse() { 2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Test parse with incomplete information 2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DateFormat fmt2= DateFormat.getDateInstance(); //DateFormat.LONG, Locale.US); 2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert JapaneseCalendar c = new JapaneseCalendar(TimeZone.getDefault(), new ULocale("en_US")); 2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SimpleDateFormat fmt = (SimpleDateFormat)c.getDateTimeFormat(1,1,new ULocale("en_US@calendar=japanese")); 2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fmt.applyPattern("G y"); 2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("fmt's locale = " + fmt.getLocale(ULocale.ACTUAL_LOCALE)); 2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //SimpleDateFormat fmt = new SimpleDateFormat("G y", new Locale("en_US@calendar=japanese")); 2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert long aDateLong = -3197117222000L; // 1868-09-08 00:00 Pacific Time (GMT-07:52:58) 2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (TimeZone.getDefaultTimeZoneType() == TimeZone.TIMEZONE_JDK) { 2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Java time zone implementation does not support LMTs 2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert aDateLong = -3197116800000L; // 1868-09-08 00:00 Pacific Time (GMT-08:00) 2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date aDate = new Date(aDateLong); 2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("aDate: " + aDate.toString() +", from " + aDateLong); 2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str; 2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert str = fmt2.format(aDate); 2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Test Date: " + str); 2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert str = fmt.format(aDate); 2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("as Japanese Calendar: " + str); 2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String expected = "Meiji 1"; 2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(!str.equals(expected)) { 2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: Expected " + expected + " but got " + str); 2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date otherDate; 2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert otherDate = fmt.parse(expected); 2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(!otherDate.equals(aDate)) { 2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str3; 2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // ParsePosition pp; 2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date dd = fmt.parse(expected); 2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert str3 = fmt.format(otherDate); 2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert long oLong = otherDate.getTime(); 2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert long aLong = otherDate.getTime(); 2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: Parse incorrect of " + expected + ": wanted " + aDate + " ("+aLong+"), but got " + " " + 2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert otherDate + " ("+oLong+") = " + str3 + " not " + dd.toString() ); 2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Parsed OK: " + expected); 2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(java.text.ParseException pe) { 2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: ParseException: " + pe.toString()); 2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pe.printStackTrace(); 2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private void checkExpected(Calendar c, int expected[] ) { 2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final String[] FIELD_NAME = { 2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "ERA", "YEAR", "MONTH", "WEEK_OF_YEAR", "WEEK_OF_MONTH", 2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "DAY_OF_MONTH", "DAY_OF_YEAR", "DAY_OF_WEEK", 2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "DAY_OF_WEEK_IN_MONTH", "AM_PM", "HOUR", "HOUR_OF_DAY", 2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "MINUTE", "SECOND", "MILLISECOND", "ZONE_OFFSET", 2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "DST_OFFSET", "YEAR_WOY", "DOW_LOCAL", "EXTENDED_YEAR", 2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "JULIAN_DAY", "MILLISECONDS_IN_DAY", 2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i= 0;i<expected.length;i += 2) { 2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int fieldNum = expected[i+0]; 2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int expectedVal = expected[i+1]; 2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int actualVal = c.get(fieldNum); 2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(expectedVal == actualVal) { 2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(FIELD_NAME[fieldNum]+": "+ actualVal); 2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: "+FIELD_NAME[fieldNum]+": expected "+ expectedVal + " got " + actualVal); 2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void Test5345calendar() { 2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("** testIncompleteCalendar()"); 2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Test calendar with incomplete information 2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert JapaneseCalendar c = new JapaneseCalendar(TimeZone.getDefault()); 2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("test clear"); 2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.clear(); 2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Showa 45 = Gregorian 1970 2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int expected0[] = { Calendar.ERA, 234, 2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Calendar.YEAR, 45 }; 2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkExpected(c, expected0); 2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("test setting era"); 2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.clear(); 2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.set(Calendar.ERA, JapaneseCalendar.MEIJI); 2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int expectedA[] = { Calendar.ERA, JapaneseCalendar.MEIJI }; 2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkExpected(c, expectedA); 2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("test setting era and year and month and date"); 2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.clear(); 2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.set(Calendar.ERA, JapaneseCalendar.MEIJI); 2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.set(Calendar.YEAR, 1); 3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.set(Calendar.MONTH, Calendar.JANUARY); 3017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.set(Calendar.DATE, 1); 3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int expectedC[] = { Calendar.ERA, JapaneseCalendar.MEIJI -1}; 3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkExpected(c, expectedC); 3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("test setting year and month and date THEN era"); 3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.clear(); 3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.set(Calendar.YEAR, 1); 3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.set(Calendar.MONTH, Calendar.JANUARY); 3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.set(Calendar.DATE, 1); 3137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.set(Calendar.ERA, JapaneseCalendar.MEIJI); 3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkExpected(c, expectedC); 3177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("test setting era and year"); 3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.clear(); 3217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.set(Calendar.YEAR, 1); 3227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.set(Calendar.ERA, JapaneseCalendar.MEIJI); 3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int expectedB[] = { Calendar.ERA, JapaneseCalendar.MEIJI, 3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Calendar.YEAR, 1 }; 3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkExpected(c, expectedB); 3287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestJapaneseYear3282() { 3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Calendar c = Calendar.getInstance(ULocale.ENGLISH); 3347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.set(2003,Calendar.SEPTEMBER,25); 3357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert JapaneseCalendar jcal = new JapaneseCalendar(); 3367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //jcal.setTime(new Date(1187906308151L)); alternate value 3377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert jcal.setTime(c.getTime()); 3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Now is: " + jcal.getTime()); 3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.setTime(jcal.getTime()); 3407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int nowYear = c.get(Calendar.YEAR); 3417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Now year: "+nowYear); 3427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SimpleDateFormat jdf = (SimpleDateFormat) SimpleDateFormat.getDateInstance(jcal, 3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert SimpleDateFormat.DEFAULT, Locale.getDefault()); 3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert jdf.applyPattern("G yy/MM/dd"); 3457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String text = jdf.format(jcal.getTime()); 3467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Now is: " + text + " (in Japan)"); 3477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 3487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date date = jdf.parse(text); 3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("But is this not the date?: " + date); 3507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c.setTime(date); 3517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int thenYear = c.get(Calendar.YEAR); 3527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Then year: "+thenYear); 3537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(thenYear != nowYear) { 3547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Nowyear "+nowYear +" is not thenyear "+thenYear); 3557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 3567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Nowyear "+nowYear +" == thenyear "+thenYear); 3577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (java.text.ParseException ex) { 3597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ex.printStackTrace(); 3607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 3647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test limits of the Japanese calendar 3657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 3667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestLimits() { 3677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Calendar cal = Calendar.getInstance(); 3687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.set(1988, Calendar.DECEMBER, 1); 3697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert JapaneseCalendar jcal = new JapaneseCalendar(); 3707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doLimitsTest(jcal, null, cal.getTime()); 3717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTheoreticalLimitsTest(jcal, true); 3727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 3747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 375