18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test
26 * @bug 4833268 6253991 8008577
27 * @summary Test formatting and parsing with non-Gregorian calendars
28 * @run main/othervm -Djava.locale.providers=COMPAT,SPI NonGregorianFormatTest
29 */
30
31 import java.util.*;
32 import java.text.*;
33 import static java.util.Calendar.*;
34
35 public class NonGregorianFormatTest {
36 static int errors;
37
38 static final Object[][] JAPANESE_EN = {
39 { "GGGG yyyy MMMM d", "Showa 1 December 31", new Date(1926-1900, DECEMBER, 31) },
40 { "GGGG yyyy MMMM d", "Showa 64 January 6", new Date(1989-1900, JANUARY, 6) },
41 { "GGGG yyyy MMMM d", "Heisei 1 August 9", new Date(1989-1900, AUGUST, 9) },
42 { "GGGG yyyy MMMM d", "Heisei 17 June 10", new Date(2005-1900, JUNE, 10) },
43 { "Gy.MM.dd", "S1.12.31", new Date(1926-1900, DECEMBER, 31) },
44 { "Gy.MM.dd", "S64.01.06", new Date(1989-1900, JANUARY, 6) },
45 { "Gyy.MM.dd", "H01.08.09", new Date(1989-1900, AUGUST, 9) },
46 { "Gy.M.d", "H1.8.9", new Date(1989-1900, AUGUST, 9) },
47 { "Gy.MM.dd", "H17.06.10", new Date(2005-1900, JUNE, 10) },
48 };
49
50 // Invalid dates for parse exception tests
51 static final Object[][] EXCEPTION_JAPANESE_EN = {
52 { "GGGG yyyy MMMM d", "Showa 1 December 10" },
53 { "GGGG yyyy MMMM d", "Showa 64 January 16" },
54 { "GGGG yyyy MMMM d", "Heisei 1 January 1" },
55 { "Gy.MM.dd", "S1.12.10" },
56 { "Gy.MM.dd", "S64.01.16" },
57 { "Gyy.MM.dd", "H01.01.01" },
58 };
59
60 static final Object[][] BUDDHIST_EN = {
61 { "GGGG yyyy MMMM d", "B.E. 2469 December 31", new Date(1926-1900, DECEMBER, 31) },
62 { "GGGG yyyy MMMM d", "B.E. 2532 January 6", new Date(1989-1900, JANUARY, 6) },
63 { "GGGG yyyy MMMM d", "B.E. 2532 August 8", new Date(1989-1900, AUGUST, 8) },
64 { "GGGG yyyy MMMM d", "B.E. 2548 June 10", new Date(2005-1900, JUNE, 10) },
65 { "Gyyyy/MM/dd", "B.E.2469/12/31", new Date(1926-1900, DECEMBER, 31) },
66 { "Gyyyy/MM/dd", "B.E.2532/01/06", new Date(1989-1900, JANUARY, 6) },
67 { "Gyyyy/MM/dd", "B.E.2532/08/09", new Date(1989-1900, AUGUST, 9) },
68 { "Gyyyy/MM/dd", "B.E.2548/06/10", new Date(2005-1900, JUNE, 10) },
69 };
70
71 static final String FULL_DATE_FORMAT_JA = "GGGGyyyy'\u5e74'M'\u6708'd'\u65e5'";
72
73 static final Object[][] JAPANESE_JA = {
74 { FULL_DATE_FORMAT_JA, "\u662d\u548c\u5143\u5e7412\u670831\u65e5", new Date(1926-1900, DECEMBER, 31) },
75 { FULL_DATE_FORMAT_JA, "\u662d\u548c64\u5e741\u67086\u65e5", new Date(1989-1900, JANUARY, 6) },
76 { FULL_DATE_FORMAT_JA, "\u5e73\u6210\u5143\u5e748\u67089\u65e5", new Date(1989-1900, AUGUST, 9) },
77 { FULL_DATE_FORMAT_JA, "\u5e73\u621017\u5e746\u670810\u65e5", new Date(2005-1900, JUNE, 10) },
78 { "Gyy.MM.dd", "S01.12.31", new Date(1926-1900, DECEMBER, 31) },
79 { "Gyy.MM.dd", "S64.01.06", new Date(1989-1900, JANUARY, 6) },
80 { "Gyy.MM.dd", "H01.08.09", new Date(1989-1900, AUGUST, 9) },
81 { "Gy.M.d", "H1.8.9", new Date(1989-1900, AUGUST, 9) },
82 { "Gyy.MM.dd", "H17.06.10", new Date(2005-1900, JUNE, 10) },
83 };
84
85 // Invalid dates for parse exception tests
86 static final Object[][] EXCEPTION_JAPANESE_JA = {
87 { FULL_DATE_FORMAT_JA, "\u662d\u548c\u5143\u5e7412\u670810\u65e5" },
88 { FULL_DATE_FORMAT_JA, "\u662d\u548c64\u5e741\u670816\u65e5" },
89 { FULL_DATE_FORMAT_JA, "\u5e73\u6210\u5143\u5e741\u67081\u65e5" },
90 { "Gyy.MM.dd", "S01.12.10" },
91 { "Gyy.MM.dd", "S64.01.16" },
92 { "Gyy.MM.dd", "H01.01.01" },
93 };
94
95 static final Object[][] BUDDHIST_JA = {
96 { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62469\u5e7412\u670831\u65e5", new Date(1926-1900, DECEMBER, 31) },
97 { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62532\u5e741\u67086\u65e5", new Date(1989-1900, JANUARY, 6) },
98 { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62532\u5e748\u67089\u65e5", new Date(1989-1900, AUGUST, 9) },
99 { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62548\u5e746\u670810\u65e5", new Date(2005-1900, JUNE, 10) },
100 { "Gyyyy/MM/dd", "B.E.2469/12/31", new Date(1926-1900, DECEMBER, 31) },
101 { "Gyyyy/MM/dd", "B.E.2532/01/06", new Date(1989-1900, JANUARY, 6) },
102 { "Gyyyy/MM/dd", "B.E.2532/08/09", new Date(1989-1900, AUGUST, 9) },
103 { "Gyyyy/MM/dd", "B.E.2548/06/10", new Date(2005-1900, JUNE, 10) },
104 };
105
106 public static void main(String[] args) throws ParseException {
107 Locale defaultLocale = Locale.getDefault();
108 Locale[] locales = { Locale.ENGLISH, Locale.JAPAN };
109 try {
110 for (Locale locale : locales) {
111 test(locale);
112 }
113 } finally {
114 Locale.setDefault(defaultLocale);
119 }
120
121 private static void test(Locale locale) {
122 Locale.setDefault(locale);
123
124 // Tests with the Japanese imperial calendar
125 Locale calendarLocale = new Locale("ja", "JP", "JP");
126 testRoundTrip(calendarLocale);
127 testRoundTripSimple(calendarLocale,
128 locale == Locale.ENGLISH ? JAPANESE_EN : JAPANESE_JA);
129 testParseExceptions(calendarLocale,
130 locale == Locale.ENGLISH ? EXCEPTION_JAPANESE_EN : EXCEPTION_JAPANESE_JA);
131
132 // Tests with the Thai Buddhist calendar
133 calendarLocale = new Locale("th", "TH");
134 testRoundTrip(calendarLocale);
135 testRoundTripSimple(calendarLocale,
136 locale == Locale.ENGLISH ? BUDDHIST_EN : BUDDHIST_JA);
137 }
138
139 private static void testRoundTrip(Locale calendarLocale) {
140 DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL,
141 DateFormat.FULL,
142 calendarLocale);
143
144 long t = System.currentTimeMillis();
145 t = (t / 1000) * 1000; // discard milliseconds
146 testRoundTrip(df, new Date(t));
147
148 // H1.8.9
149 testRoundTrip(df, new Date(1989-1900, AUGUST, 9));
150
151 // H17.6.13
152 testRoundTrip(df, new Date(2005-1900, JUNE, 13));
153 }
154
155 private static void testRoundTrip(DateFormat df, Date orig) {
156 try {
157 String s = df.format(orig);
158 Date parsed = df.parse(s);
|
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test
26 * @bug 4833268 6253991 8008577
27 * @summary Test formatting and parsing with non-Gregorian calendars
28 * @run main/othervm -Djava.locale.providers=COMPAT,SPI NonGregorianFormatTest
29 */
30
31 import java.util.*;
32 import java.text.*;
33 import static java.util.Calendar.*;
34
35 public class NonGregorianFormatTest {
36 static int errors;
37
38 @SuppressWarnings("deprecation")
39 static final Object[][] JAPANESE_EN = {
40 { "GGGG yyyy MMMM d", "Showa 1 December 31", new Date(1926-1900, DECEMBER, 31) },
41 { "GGGG yyyy MMMM d", "Showa 64 January 6", new Date(1989-1900, JANUARY, 6) },
42 { "GGGG yyyy MMMM d", "Heisei 1 August 9", new Date(1989-1900, AUGUST, 9) },
43 { "GGGG yyyy MMMM d", "Heisei 17 June 10", new Date(2005-1900, JUNE, 10) },
44 { "Gy.MM.dd", "S1.12.31", new Date(1926-1900, DECEMBER, 31) },
45 { "Gy.MM.dd", "S64.01.06", new Date(1989-1900, JANUARY, 6) },
46 { "Gyy.MM.dd", "H01.08.09", new Date(1989-1900, AUGUST, 9) },
47 { "Gy.M.d", "H1.8.9", new Date(1989-1900, AUGUST, 9) },
48 { "Gy.MM.dd", "H17.06.10", new Date(2005-1900, JUNE, 10) },
49 };
50
51 // Invalid dates for parse exception tests
52 static final Object[][] EXCEPTION_JAPANESE_EN = {
53 { "GGGG yyyy MMMM d", "Showa 1 December 10" },
54 { "GGGG yyyy MMMM d", "Showa 64 January 16" },
55 { "GGGG yyyy MMMM d", "Heisei 1 January 1" },
56 { "Gy.MM.dd", "S1.12.10" },
57 { "Gy.MM.dd", "S64.01.16" },
58 { "Gyy.MM.dd", "H01.01.01" },
59 };
60
61 @SuppressWarnings("deprecation")
62 static final Object[][] BUDDHIST_EN = {
63 { "GGGG yyyy MMMM d", "B.E. 2469 December 31", new Date(1926-1900, DECEMBER, 31) },
64 { "GGGG yyyy MMMM d", "B.E. 2532 January 6", new Date(1989-1900, JANUARY, 6) },
65 { "GGGG yyyy MMMM d", "B.E. 2532 August 8", new Date(1989-1900, AUGUST, 8) },
66 { "GGGG yyyy MMMM d", "B.E. 2548 June 10", new Date(2005-1900, JUNE, 10) },
67 { "Gyyyy/MM/dd", "B.E.2469/12/31", new Date(1926-1900, DECEMBER, 31) },
68 { "Gyyyy/MM/dd", "B.E.2532/01/06", new Date(1989-1900, JANUARY, 6) },
69 { "Gyyyy/MM/dd", "B.E.2532/08/09", new Date(1989-1900, AUGUST, 9) },
70 { "Gyyyy/MM/dd", "B.E.2548/06/10", new Date(2005-1900, JUNE, 10) },
71 };
72
73 static final String FULL_DATE_FORMAT_JA = "GGGGyyyy'\u5e74'M'\u6708'd'\u65e5'";
74
75 @SuppressWarnings("deprecation")
76 static final Object[][] JAPANESE_JA = {
77 { FULL_DATE_FORMAT_JA, "\u662d\u548c\u5143\u5e7412\u670831\u65e5", new Date(1926-1900, DECEMBER, 31) },
78 { FULL_DATE_FORMAT_JA, "\u662d\u548c64\u5e741\u67086\u65e5", new Date(1989-1900, JANUARY, 6) },
79 { FULL_DATE_FORMAT_JA, "\u5e73\u6210\u5143\u5e748\u67089\u65e5", new Date(1989-1900, AUGUST, 9) },
80 { FULL_DATE_FORMAT_JA, "\u5e73\u621017\u5e746\u670810\u65e5", new Date(2005-1900, JUNE, 10) },
81 { "Gyy.MM.dd", "S01.12.31", new Date(1926-1900, DECEMBER, 31) },
82 { "Gyy.MM.dd", "S64.01.06", new Date(1989-1900, JANUARY, 6) },
83 { "Gyy.MM.dd", "H01.08.09", new Date(1989-1900, AUGUST, 9) },
84 { "Gy.M.d", "H1.8.9", new Date(1989-1900, AUGUST, 9) },
85 { "Gyy.MM.dd", "H17.06.10", new Date(2005-1900, JUNE, 10) },
86 };
87
88 // Invalid dates for parse exception tests
89 static final Object[][] EXCEPTION_JAPANESE_JA = {
90 { FULL_DATE_FORMAT_JA, "\u662d\u548c\u5143\u5e7412\u670810\u65e5" },
91 { FULL_DATE_FORMAT_JA, "\u662d\u548c64\u5e741\u670816\u65e5" },
92 { FULL_DATE_FORMAT_JA, "\u5e73\u6210\u5143\u5e741\u67081\u65e5" },
93 { "Gyy.MM.dd", "S01.12.10" },
94 { "Gyy.MM.dd", "S64.01.16" },
95 { "Gyy.MM.dd", "H01.01.01" },
96 };
97
98 @SuppressWarnings("deprecation")
99 static final Object[][] BUDDHIST_JA = {
100 { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62469\u5e7412\u670831\u65e5", new Date(1926-1900, DECEMBER, 31) },
101 { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62532\u5e741\u67086\u65e5", new Date(1989-1900, JANUARY, 6) },
102 { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62532\u5e748\u67089\u65e5", new Date(1989-1900, AUGUST, 9) },
103 { FULL_DATE_FORMAT_JA, "\u4ecf\u66a62548\u5e746\u670810\u65e5", new Date(2005-1900, JUNE, 10) },
104 { "Gyyyy/MM/dd", "B.E.2469/12/31", new Date(1926-1900, DECEMBER, 31) },
105 { "Gyyyy/MM/dd", "B.E.2532/01/06", new Date(1989-1900, JANUARY, 6) },
106 { "Gyyyy/MM/dd", "B.E.2532/08/09", new Date(1989-1900, AUGUST, 9) },
107 { "Gyyyy/MM/dd", "B.E.2548/06/10", new Date(2005-1900, JUNE, 10) },
108 };
109
110 public static void main(String[] args) throws ParseException {
111 Locale defaultLocale = Locale.getDefault();
112 Locale[] locales = { Locale.ENGLISH, Locale.JAPAN };
113 try {
114 for (Locale locale : locales) {
115 test(locale);
116 }
117 } finally {
118 Locale.setDefault(defaultLocale);
123 }
124
125 private static void test(Locale locale) {
126 Locale.setDefault(locale);
127
128 // Tests with the Japanese imperial calendar
129 Locale calendarLocale = new Locale("ja", "JP", "JP");
130 testRoundTrip(calendarLocale);
131 testRoundTripSimple(calendarLocale,
132 locale == Locale.ENGLISH ? JAPANESE_EN : JAPANESE_JA);
133 testParseExceptions(calendarLocale,
134 locale == Locale.ENGLISH ? EXCEPTION_JAPANESE_EN : EXCEPTION_JAPANESE_JA);
135
136 // Tests with the Thai Buddhist calendar
137 calendarLocale = new Locale("th", "TH");
138 testRoundTrip(calendarLocale);
139 testRoundTripSimple(calendarLocale,
140 locale == Locale.ENGLISH ? BUDDHIST_EN : BUDDHIST_JA);
141 }
142
143 @SuppressWarnings("deprecation")
144 private static void testRoundTrip(Locale calendarLocale) {
145 DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL,
146 DateFormat.FULL,
147 calendarLocale);
148
149 long t = System.currentTimeMillis();
150 t = (t / 1000) * 1000; // discard milliseconds
151 testRoundTrip(df, new Date(t));
152
153 // H1.8.9
154 testRoundTrip(df, new Date(1989-1900, AUGUST, 9));
155
156 // H17.6.13
157 testRoundTrip(df, new Date(2005-1900, JUNE, 13));
158 }
159
160 private static void testRoundTrip(DateFormat df, Date orig) {
161 try {
162 String s = df.format(orig);
163 Date parsed = df.parse(s);
|