2 *******************************************************************************
3 * Copyright (C) 2012, International Business Machines Corporation and *
4 * others. All Rights Reserved. *
5 *******************************************************************************
7 package com.ibm.icu.dev.test.calendar;
10 import com.ibm.icu.util.Calendar;
11 import com.ibm.icu.util.ULocale;
13 public class PersianTest extends CalendarTest {
15 public static void main(String args[]) throws Exception {
16 new PersianTest().run(args);
20 * Test basic mapping to and from Gregorian.
22 public void TestMapping() {
24 // (Note: months are 1-based)
25 2011, 1, 11, 1389, 10, 21,
26 1986, 2, 25, 1364, 12, 6,
27 1934, 3, 14, 1312, 12, 23,
29 2090, 3, 19, 1468, 12, 29,
30 2007, 2, 22, 1385, 12, 3,
31 1969, 12, 31, 1348, 10, 10,
32 1945, 11, 12, 1324, 8, 21,
33 1925, 3, 31, 1304, 1, 11,
35 1996, 3, 19, 1374, 12, 29,
36 1996, 3, 20, 1375, 1, 1,
37 1997, 3, 20, 1375, 12, 30,
38 1997, 3, 21, 1376, 1, 1,
40 2008, 3, 19, 1386, 12, 29,
41 2008, 3, 20, 1387, 1, 1,
42 2004, 3, 19, 1382, 12, 29,
43 2004, 3, 20, 1383, 1, 1,
45 2006, 3, 20, 1384, 12, 29,
46 2006, 3, 21, 1385, 1, 1,
48 2005, 4, 20, 1384, 1, 31,
49 2005, 4, 21, 1384, 2, 1,
50 2005, 5, 21, 1384, 2, 31,
51 2005, 5, 22, 1384, 3, 1,
52 2005, 6, 21, 1384, 3, 31,
53 2005, 6, 22, 1384, 4, 1,
54 2005, 7, 22, 1384, 4, 31,
55 2005, 7, 23, 1384, 5, 1,
56 2005, 8, 22, 1384, 5, 31,
57 2005, 8, 23, 1384, 6, 1,
58 2005, 9, 22, 1384, 6, 31,
59 2005, 9, 23, 1384, 7, 1,
60 2005, 10, 22, 1384, 7, 30,
61 2005, 10, 23, 1384, 8, 1,
62 2005, 11, 21, 1384, 8, 30,
63 2005, 11, 22, 1384, 9, 1,
64 2005, 12, 21, 1384, 9, 30,
65 2005, 12, 22, 1384, 10, 1,
66 2006, 1, 20, 1384, 10, 30,
67 2006, 1, 21, 1384, 11, 1,
68 2006, 2, 19, 1384, 11, 30,
69 2006, 2, 20, 1384, 12, 1,
70 2006, 3, 20, 1384, 12, 29,
71 2006, 3, 21, 1385, 1, 1,
73 // The 2820-year cycle arithmetical algorithm would fail this one.
74 2025, 3, 21, 1404, 1, 1,
77 Calendar cal = Calendar.getInstance(new ULocale("fa_IR@calendar=persian"));
78 StringBuilder buf = new StringBuilder();
80 logln("Gregorian -> Persian");
82 Calendar grego = Calendar.getInstance();
84 for (int i = 0; i < DATA.length;) {
85 grego.set(DATA[i++], DATA[i++] - 1, DATA[i++]);
86 Date date = grego.getTime();
88 int y = cal.get(Calendar.YEAR);
89 int m = cal.get(Calendar.MONTH) + 1; // 0-based -> 1-based
90 int d = cal.get(Calendar.DAY_OF_MONTH);
91 int yE = DATA[i++]; // Expected y, m, d
92 int mE = DATA[i++]; // 1-based
95 buf.append(date + " -> ");
96 buf.append(y + "/" + m + "/" + d);
97 if (y == yE && m == mE && d == dE) {
98 logln("OK: " + buf.toString());
100 errln("Fail: " + buf.toString() + ", expected " + yE + "/" + mE + "/" + dE);
104 logln("Persian -> Gregorian");
105 for (int i = 0; i < DATA.length;) {
106 grego.set(DATA[i++], DATA[i++] - 1, DATA[i++]);
107 Date dexp = grego.getTime();
108 int cyear = DATA[i++];
109 int cmonth = DATA[i++];
110 int cdayofmonth = DATA[i++];
112 cal.set(Calendar.YEAR, cyear);
113 cal.set(Calendar.MONTH, cmonth - 1);
114 cal.set(Calendar.DAY_OF_MONTH, cdayofmonth);
115 Date date = cal.getTime();
117 buf.append(cyear + "/" + cmonth + "/" + cdayofmonth);
118 buf.append(" -> " + date);
119 if (date.equals(dexp)) {
120 logln("OK: " + buf.toString());
122 errln("Fail: " + buf.toString() + ", expected " + dexp);