17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2012, International Business Machines Corporation and * 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved. * 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.calendar; 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Date; 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.Calendar; 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ULocale; 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class PersianTest extends CalendarTest { 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void main(String args[]) throws Exception { 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new PersianTest().run(args); 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test basic mapping to and from Gregorian. 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestMapping() { 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final int[] DATA = { 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // (Note: months are 1-based) 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2011, 1, 11, 1389, 10, 21, 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1986, 2, 25, 1364, 12, 6, 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1934, 3, 14, 1312, 12, 23, 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2090, 3, 19, 1468, 12, 29, 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2007, 2, 22, 1385, 12, 3, 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1969, 12, 31, 1348, 10, 10, 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1945, 11, 12, 1324, 8, 21, 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1925, 3, 31, 1304, 1, 11, 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1996, 3, 19, 1374, 12, 29, 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1996, 3, 20, 1375, 1, 1, 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1997, 3, 20, 1375, 12, 30, 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1997, 3, 21, 1376, 1, 1, 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2008, 3, 19, 1386, 12, 29, 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2008, 3, 20, 1387, 1, 1, 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2004, 3, 19, 1382, 12, 29, 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2004, 3, 20, 1383, 1, 1, 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2006, 3, 20, 1384, 12, 29, 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2006, 3, 21, 1385, 1, 1, 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 4, 20, 1384, 1, 31, 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 4, 21, 1384, 2, 1, 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 5, 21, 1384, 2, 31, 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 5, 22, 1384, 3, 1, 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 6, 21, 1384, 3, 31, 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 6, 22, 1384, 4, 1, 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 7, 22, 1384, 4, 31, 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 7, 23, 1384, 5, 1, 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 8, 22, 1384, 5, 31, 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 8, 23, 1384, 6, 1, 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 9, 22, 1384, 6, 31, 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 9, 23, 1384, 7, 1, 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 10, 22, 1384, 7, 30, 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 10, 23, 1384, 8, 1, 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 11, 21, 1384, 8, 30, 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 11, 22, 1384, 9, 1, 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 12, 21, 1384, 9, 30, 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2005, 12, 22, 1384, 10, 1, 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2006, 1, 20, 1384, 10, 30, 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2006, 1, 21, 1384, 11, 1, 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2006, 2, 19, 1384, 11, 30, 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2006, 2, 20, 1384, 12, 1, 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2006, 3, 20, 1384, 12, 29, 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2006, 3, 21, 1385, 1, 1, 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // The 2820-year cycle arithmetical algorithm would fail this one. 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2025, 3, 21, 1404, 1, 1, 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Calendar cal = Calendar.getInstance(new ULocale("fa_IR@calendar=persian")); 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringBuilder buf = new StringBuilder(); 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Gregorian -> Persian"); 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Calendar grego = Calendar.getInstance(); 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert grego.clear(); 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < DATA.length;) { 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert grego.set(DATA[i++], DATA[i++] - 1, DATA[i++]); 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date date = grego.getTime(); 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.setTime(date); 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int y = cal.get(Calendar.YEAR); 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int m = cal.get(Calendar.MONTH) + 1; // 0-based -> 1-based 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int d = cal.get(Calendar.DAY_OF_MONTH); 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int yE = DATA[i++]; // Expected y, m, d 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int mE = DATA[i++]; // 1-based 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int dE = DATA[i++]; 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.setLength(0); 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(date + " -> "); 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(y + "/" + m + "/" + d); 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (y == yE && m == mE && d == dE) { 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("OK: " + buf.toString()); 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Fail: " + buf.toString() + ", expected " + yE + "/" + mE + "/" + dE); 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Persian -> Gregorian"); 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < DATA.length;) { 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert grego.set(DATA[i++], DATA[i++] - 1, DATA[i++]); 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date dexp = grego.getTime(); 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int cyear = DATA[i++]; 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int cmonth = DATA[i++]; 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int cdayofmonth = DATA[i++]; 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.clear(); 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.set(Calendar.YEAR, cyear); 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.set(Calendar.MONTH, cmonth - 1); 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cal.set(Calendar.DAY_OF_MONTH, cdayofmonth); 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Date date = cal.getTime(); 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.setLength(0); 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(cyear + "/" + cmonth + "/" + cdayofmonth); 1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(" -> " + date); 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (date.equals(dexp)) { 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("OK: " + buf.toString()); 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Fail: " + buf.toString() + ", expected " + dexp); 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 127