Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Side by Side Diff: source/i18n/islamcal.cpp

Issue 845603002: Update ICU to 54.1 step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@master
Patch Set: remove unusued directories Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/i18n/indiancal.cpp ('k') | source/i18n/locdspnm.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 ****************************************************************************** 2 ******************************************************************************
3 * Copyright (C) 2003-2013, International Business Machines Corporation 3 * Copyright (C) 2003-2014, International Business Machines Corporation
4 * and others. All Rights Reserved. 4 * and others. All Rights Reserved.
5 ****************************************************************************** 5 ******************************************************************************
6 * 6 *
7 * File ISLAMCAL.H 7 * File ISLAMCAL.H
8 * 8 *
9 * Modification History: 9 * Modification History:
10 * 10 *
11 * Date Name Description 11 * Date Name Description
12 * 10/14/2003 srl ported from java IslamicCalendar 12 * 10/14/2003 srl ported from java IslamicCalendar
13 ***************************************************************************** 13 *****************************************************************************
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 } 70 }
71 U_CDECL_END 71 U_CDECL_END
72 72
73 U_NAMESPACE_BEGIN 73 U_NAMESPACE_BEGIN
74 74
75 // Implementation of the IslamicCalendar class 75 // Implementation of the IslamicCalendar class
76 76
77 /** 77 /**
78 * Friday EPOC 78 * Friday EPOC
79 */ 79 */
80 static const int32_t CIVIL_EPOC = 1948440; 80 static const int32_t CIVIL_EPOC = 1948440; // CE 622 July 16 Friday (Julian cale ndar) / CE 622 July 19 (Gregorian calendar)
81 81
82 /** 82 /**
83 * Thursday EPOC 83 * Thursday EPOC
84 */ 84 */
85 static const int32_t ASTRONOMICAL_EPOC = 1948439; 85 static const int32_t ASTRONOMICAL_EPOC = 1948439; // CE 622 July 15 Thursday (Ju lian calendar)
86 86
87 87
88 static const int32_t UMALQURA_YEAR_START = 1318; 88 static const int32_t UMALQURA_YEAR_START = 1300;
89 static const int32_t UMALQURA_YEAR_END = 1480; 89 static const int32_t UMALQURA_YEAR_END = 1600;
90 90
91 static const int UMALQURA_MONTHLENGTH[] = { 91 static const int UMALQURA_MONTHLENGTH[] = {
92 //* 1318 -1322 */ "0101 0111 0100", "1001 0111 0110", "0100 1011 0111", "001 0 0101 0111", "0101 0010 1011", 92 //* 1300 -1302 */ "1010 1010 1010", "1101 0101 0100", "1110 1100 1001",
93 0x0574, 0x0975, 0x06A7, 0x0257, 0x052B, 93 0x0AAA, 0x0D54, 0x0EC9,
94 //* 1323 -1327 */ "0110 1001 0101", "0110 1100 1010", "1010 1101 0101", "010 1 0101 1011", "0010 0101 1101", 94 //* 1303 -1307 */ "0110 1101 0100", "0110 1110 1010", "0011 0110 1100", "101 0 1010 1101", "0101 0101 0101",
95 0x0695, 0x06CA, 0x0AD5, 0x055B, 0x025B, 95 0x06D4, 0x06EA, 0x036C, 0x0AAD, 0x0555,
96 //* 1328 -1332 */ "1001 0010 1101", "1100 1001 0101", "1101 0100 1010", "111 0 1010 0101", "0110 1101 0010", 96 //* 1308 -1312 */ "0110 1010 1001", "0111 1001 0010", "1011 1010 1001", "010 1 1101 0100", "1010 1101 1010",
97 0x092D, 0x0C95, 0x0D4A, 0x0E5B, 0x025B, 97 0x06A9, 0x0792, 0x0BA9, 0x05D4, 0x0ADA,
98 //* 1333 -1337 */ "1010 1101 0101", "0101 0101 1010", "1010 1010 1011", "010 0 0100 1011", "0110 1010 0101", 98 //* 1313 -1317 */ "0101 0101 1100", "1101 0010 1101", "0110 1001 0101", "011 1 0100 1010", "1011 0101 0100",
99 0x0AD5, 0x055A, 0x0AAB, 0x044B, 0x06A5, 99 0x055C, 0x0D2D, 0x0695, 0x074A, 0x0B54,
100 //* 1338 -1342 */ "0111 0101 0010", "1011 1010 1001", "0011 0111 0100", "101 0 1011 0110", "0101 0101 0110", 100 //* 1318 -1322 */ "1011 0110 1010", "0101 1010 1101", "0100 1010 1110", "101 0 0100 1111", "0101 0001 0111",
101 0x0752, 0x0BA9, 0x0374, 0x0AB6, 0x0556, 101 0x0B6A, 0x05AD, 0x04AE, 0x0A4F, 0x0517,
102 //* 1343 -1347 */ "1010 1010 1010", "1101 0101 0010", "1101 1010 1001", "010 1 1101 0100", "1010 1110 1010", 102 //* 1323 -1327 */ "0110 1000 1011", "0110 1010 0101", "1010 1101 0101", "001 0 1101 0110", "1001 0101 1011",
103 0x0AAA, 0x0D52, 0x0DA9, 0x05D4, 0x0AEA, 103 0x068B, 0x06A5, 0x0AD5, 0x02D6, 0x095B,
104 //* 1348 -1352 */ "0100 1101 1101", "0010 0110 1110", "1001 0010 1110", "101 0 1010 0110", "1101 0101 0100", 104 //* 1328 -1332 */ "0100 1001 1101", "1010 0100 1101", "1101 0010 0110", "110 1 1001 0101", "0101 1010 1100",
105 0x04DD, 0x026E, 0x092E, 0x0AA6, 0x0D54, 105 0x049D, 0x0A4D, 0x0D26, 0x0D95, 0x05AC,
106 //* 1353 -1357 */ "0101 1010 1010", "0101 1011 0101", "0010 1011 0100", "100 1 0011 0111", "0100 1001 1011", 106 //* 1333 -1337 */ "1001 1011 0110", "0010 1011 1010", "1010 0101 1011", "010 1 0010 1011", "1010 1001 0101",
107 0x05AA, 0x05B5, 0x02B4, 0x0937, 0x049B, 107 0x09B6, 0x02BA, 0x0A5B, 0x052B, 0x0A95,
108 //* 1358 -1362 */ "1010 0100 1011", "1011 0010 0101", "1011 0101 0100", "101 1 0110 1010", "0101 0110 1101", 108 //* 1338 -1342 */ "0110 1100 1010", "1010 1110 1001", "0010 1111 0100", "100 1 0111 0110", "0010 1011 0110",
109 0x0A4B, 0x0B25, 0x0B54, 0x0B6A, 0x056D, 109 0x06CA, 0x0AE9, 0x02F4, 0x0976, 0x02B6,
110 //* 1363 -1367 */ "0100 1010 1101", "1010 0101 0101", "1101 0010 0101", "111 0 1001 0010", "1110 1100 1001", 110 //* 1343 -1347 */ "1001 0101 0110", "1010 1100 1010", "1011 1010 0100", "101 1 1101 0010", "0101 1101 1001",
111 0x04AD, 0x0A55, 0x0D25, 0x0E92, 0x0EC9, 111 0x0956, 0x0ACA, 0x0BA4, 0x0BD2, 0x05D9,
112 //* 1368 -1372 */ "0110 1101 0100", "1010 1110 1010", "0101 0110 1011", "010 0 1010 1011", "0110 1000 0101", 112 //* 1348 -1352 */ "0010 1101 1100", "1001 0110 1101", "0101 0100 1101", "101 0 1010 0101", "1011 0101 0010",
113 0x06D4, 0x0ADA, 0x056B, 0x04AB, 0x0685, 113 0x02DC, 0x096D, 0x054D, 0x0AA5, 0x0B52,
114 //* 1373 -1377 */ "1011 0100 1001", "1011 1010 0100", "1011 1011 0010", "010 1 1011 0101", "0010 1011 1010", 114 //* 1353 -1357 */ "1011 1010 0101", "0101 1011 0100", "1001 1011 0110", "010 1 0101 0111", "0010 1001 0111",
115 0x0B49, 0x0BA4, 0x0BB2, 0x05B5, 0x02BA, 115 0x0BA5, 0x05B4, 0x09B6, 0x0557, 0x0297,
116 //* 1378 -1382 */ "1001 0101 1011", "0100 1010 1011", "0101 0101 0101", "011 0 1011 0010", "0110 1101 1001", 116 //* 1358 -1362 */ "0101 0100 1011", "0110 1010 0011", "0111 0101 0010", "101 1 0110 0101", "0101 0110 1010",
117 0x095B, 0x04AB, 0x0555, 0x06B2, 0x06D9, 117 0x054B, 0x06A3, 0x0752, 0x0B65, 0x056A,
118 //* 1383 -1387 */ "0010 1110 1100", "1001 0110 1110", "0100 1010 1110", "101 0 0101 0110", "1101 0010 1010", 118 //* 1363 -1367 */ "1010 1010 1011", "0101 0010 1011", "1100 1001 0101", "110 1 0100 1010", "1101 1010 0101",
119 0x02EC, 0x096E, 0x04AE, 0x0A56, 0x0D2A, 119 0x0AAB, 0x052B, 0x0C95, 0x0D4A, 0x0DA5,
120 //* 1388 -1392 */ "1101 0101 0101", "0101 1010 1010", "1010 1011 0101", "010 0 1011 1011", "0000 0101 1011", 120 //* 1368 -1372 */ "0101 1100 1010", "1010 1101 0110", "1001 0101 0111", "010 0 1010 1011", "1001 0100 1011",
121 0x0D55, 0x05AA, 0x0AB5, 0x04BB, 0x005B, 121 0x05CA, 0x0AD6, 0x0957, 0x04AB, 0x094B,
122 //* 1393 -1397 */ "1001 0010 1011", "1010 1001 0101", "0011 0100 1010", "101 1 1010 0101", "0101 1010 1010", 122 //* 1373 -1377 */ "1010 1010 0101", "1011 0101 0010", "1011 0110 1010", "010 1 0111 0101", "0010 0111 0110",
123 0x092B, 0x0A95, 0x034A, 0x0BA5, 0x05AA, 123 0x0AA5, 0x0B52, 0x0B6A, 0x0575, 0x0276,
124 //* 1398 -1402 */ "1010 1011 0101", "0101 0101 0110", "1010 1001 0110", "110 1 0100 1010", "1110 1010 0101", 124 //* 1378 -1382 */ "1000 1011 0111", "0100 0101 1011", "0101 0101 0101", "010 1 1010 1001", "0101 1011 0100",
125 0x0AB5, 0x0556, 0x0A96, 0x0B4A, 0x0EA5, 125 0x08B7, 0x045B, 0x0555, 0x05A9, 0x05B4,
126 //* 1403 -1407 */ "0111 0101 0010", "0110 1110 1001", "0011 0110 1010", "101 0 1010 1101", "0101 0101 0101", 126 //* 1383 -1387 */ "1001 1101 1010", "0100 1101 1101", "0010 0110 1110", "100 1 0011 0110", "1010 1010 1010",
127 0x0752, 0x06E9, 0x036A, 0x0AAD, 0x0555, 127 0x09DA, 0x04DD, 0x026E, 0x0936, 0x0AAA,
128 //* 1408 -1412 */ "1010 1010 0101", "1011 0101 0010", "1011 1010 1001", "010 1 1011 0100", "1001 1011 1010", 128 //* 1388 -1392 */ "1101 0101 0100", "1101 1011 0010", "0101 1101 0101", "001 0 1101 1010", "1001 0101 1011",
129 0x0AA5, 0x0B52, 0x0BA9, 0x05B4, 0x09BA, 129 0x0D54, 0x0DB2, 0x05D5, 0x02DA, 0x095B,
130 //* 1413 -1417 */ "0100 1101 1011", "0010 0101 1101", "0101 0010 1101", "101 0 1010 0101", "1010 1101 0100", 130 //* 1393 -1397 */ "0100 1010 1011", "1010 0101 0101", "1011 0100 1001", "101 1 0110 0100", "1011 0111 0001",
131 0x04DB, 0x025D, 0x052D, 0x0AA5, 0x0AD4, 131 0x04AB, 0x0A55, 0x0B49, 0x0B64, 0x0B71,
132 //* 1418 -1422 */ "1010 1110 1010", "0101 0110 1101", "0100 1011 1101", "001 0 0011 1101", "1001 0001 1101", 132 //* 1398 -1402 */ "0101 1011 0100", "1010 1011 0101", "1010 0101 0101", "110 1 0010 0101", "1110 1001 0010",
133 0x0AEA, 0x056D, 0x04BD, 0x023D, 0x091D, 133 0x05B4, 0x0AB5, 0x0A55, 0x0D25, 0x0E92,
134 //* 1403 -1407 */ "1110 1100 1001", "0110 1101 0100", "1010 1110 1001", "100 1 0110 1011", "0100 1010 1011",
135 0x0EC9, 0x06D4, 0x0AE9, 0x096B, 0x04AB,
136 //* 1408 -1412 */ "1010 1001 0011", "1101 0100 1001", "1101 1010 0100", "110 1 1011 0010", "1010 1011 1001",
137 0x0A93, 0x0D49, 0x0DA4, 0x0DB2, 0x0AB9,
138 //* 1413 -1417 */ "0100 1011 1010", "1010 0101 1011", "0101 0010 1011", "101 0 1001 0101", "1011 0010 1010",
139 0x04BA, 0x0A5B, 0x052B, 0x0A95, 0x0B2A,
140 //* 1418 -1422 */ "1011 0101 0101", "0101 0101 1100", "0100 1011 1101", "001 0 0011 1101", "1001 0001 1101",
141 0x0B55, 0x055C, 0x04BD, 0x023D, 0x091D,
134 //* 1423 -1427 */ "1010 1001 0101", "1011 0100 1010", "1011 0101 1010", "010 1 0110 1101", "0010 1011 0110", 142 //* 1423 -1427 */ "1010 1001 0101", "1011 0100 1010", "1011 0101 1010", "010 1 0110 1101", "0010 1011 0110",
135 0x0A95, 0x0B4A, 0x0B5A, 0x056D, 0x02B6, 143 0x0A95, 0x0B4A, 0x0B5A, 0x056D, 0x02B6,
136 //* 1428 -1432 */ "1001 0011 1011", "0100 1001 1011", "0110 0101 0101", "011 0 1010 1001", "0111 0101 0100", 144 //* 1428 -1432 */ "1001 0011 1011", "0100 1001 1011", "0110 0101 0101", "011 0 1010 1001", "0111 0101 0100",
137 0x093B, 0x049B, 0x0655, 0x06A9, 0x0754, 145 0x093B, 0x049B, 0x0655, 0x06A9, 0x0754,
138 //* 1433 -1437 */ "1011 0110 1010", "0101 0110 1100", "1010 1010 1101", "010 1 0101 0101", "1011 0010 1001", 146 //* 1433 -1437 */ "1011 0110 1010", "0101 0110 1100", "1010 1010 1101", "010 1 0101 0101", "1011 0010 1001",
139 0x0B6A, 0x056C, 0x0AAD, 0x0555, 0x0B29, 147 0x0B6A, 0x056C, 0x0AAD, 0x0555, 0x0B29,
140 //* 1438 -1442 */ "1011 1001 0010", "1011 1010 1001", "0101 1101 0100", "101 0 1101 1010", "0101 0101 1010", 148 //* 1438 -1442 */ "1011 1001 0010", "1011 1010 1001", "0101 1101 0100", "101 0 1101 1010", "0101 0101 1010",
141 0x0B92, 0x0BA9, 0x05D4, 0x0ADA, 0x055A, 149 0x0B92, 0x0BA9, 0x05D4, 0x0ADA, 0x055A,
142 //* 1443 -1447 */ "1010 1010 1011", "0101 1001 0101", "0111 0100 1001", "011 1 0110 0100", "1011 1010 1010", 150 //* 1443 -1447 */ "1010 1010 1011", "0101 1001 0101", "0111 0100 1001", "011 1 0110 0100", "1011 1010 1010",
143 0x0AAB, 0x0595, 0x0749, 0x0764, 0x0BAA, 151 0x0AAB, 0x0595, 0x0749, 0x0764, 0x0BAA,
144 //* 1448 -1452 */ "0101 1011 0101", "0010 1011 0110", "1010 0101 0110", "111 0 0100 1101", "1011 0010 0101", 152 //* 1448 -1452 */ "0101 1011 0101", "0010 1011 0110", "1010 0101 0110", "111 0 0100 1101", "1011 0010 0101",
145 0x05B5, 0x02B6, 0x0A56, 0x0E4D, 0x0B25, 153 0x05B5, 0x02B6, 0x0A56, 0x0E4D, 0x0B25,
146 //* 1453 -1457 */ "1011 0101 0010", "1011 0110 1010", "0101 1010 1101", "001 0 1010 1110", "1001 0010 1111", 154 //* 1453 -1457 */ "1011 0101 0010", "1011 0110 1010", "0101 1010 1101", "001 0 1010 1110", "1001 0010 1111",
147 0x0B52, 0x0B6A, 0x05AD, 0x02AE, 0x092F, 155 0x0B52, 0x0B6A, 0x05AD, 0x02AE, 0x092F,
148 //* 1458 -1462 */ "0100 1001 0111", "0110 0100 1011", "0110 1010 0101", "011 0 1010 1100", "1010 1101 0110", 156 //* 1458 -1462 */ "0100 1001 0111", "0110 0100 1011", "0110 1010 0101", "011 0 1010 1100", "1010 1101 0110",
149 0x0497, 0x064B, 0x06A5, 0x06AC, 0x0AD6, 157 0x0497, 0x064B, 0x06A5, 0x06AC, 0x0AD6,
150 //* 1463 -1467 */ "0101 0101 1101", "0100 1001 1101", "1010 0100 1101", "110 1 0001 0110", "1101 1001 0101", 158 //* 1463 -1467 */ "0101 0101 1101", "0100 1001 1101", "1010 0100 1101", "110 1 0001 0110", "1101 1001 0101",
151 0x055D, 0x049D, 0x0A4D, 0x0D16, 0x0D95, 159 0x055D, 0x049D, 0x0A4D, 0x0D16, 0x0D95,
152 //* 1468 -1472 */ "0101 1010 1010", "0101 1011 0101", "0010 1001 1010", "100 1 0101 1011", "0100 1010 1100", 160 //* 1468 -1472 */ "0101 1010 1010", "0101 1011 0101", "0010 1101 1010", "100 1 0101 1011", "0100 1010 1101",
153 0x05AA, 0x05B5, 0x029A, 0x095B, 0x04AC, 161 0x05AA, 0x05B5, 0x02DA, 0x095B, 0x04AD,
154 //* 1473 -1477 */ "0101 1001 0101", "0110 1100 1010", "0110 1110 0100", "101 0 1110 1010", "0100 1111 0101", 162 //* 1473 -1477 */ "0101 1001 0101", "0110 1100 1010", "0110 1110 0100", "101 0 1110 1010", "0100 1111 0101",
155 0x0595, 0x06CA, 0x06E4, 0x0AEA, 0x04F5, 163 0x0595, 0x06CA, 0x06E4, 0x0AEA, 0x04F5,
156 //* 1478 -1480 */ "0010 1011 0110", "1001 0101 0110", "1010 1010 1010" 164 //* 1478 -1482 */ "0010 1011 0110", "1001 0101 0110", "1010 1010 1010", "101 1 0101 0100", "1011 1101 0010",
157 0x02B6, 0x0956, 0x0AAA 165 0x02B6, 0x0956, 0x0AAA, 0x0B54, 0x0BD2,
166 //* 1483 -1487 */ "0101 1101 1001", "0010 1110 1010", "1001 0110 1101", "010 0 1010 1101", "1010 1001 0101",
167 0x05D9, 0x02EA, 0x096D, 0x04AD, 0x0A95,
168 //* 1488 -1492 */ "1011 0100 1010", "1011 1010 0101", "0101 1011 0010", "100 1 1011 0101", "0100 1101 0110",
169 0x0B4A, 0x0BA5, 0x05B2, 0x09B5, 0x04D6,
170 //* 1493 -1497 */ "1010 1001 0111", "0101 0100 0111", "0110 1001 0011", "011 1 0100 1001", "1011 0101 0101",
171 0x0A97, 0x0547, 0x0693, 0x0749, 0x0B55,
172 //* 1498 -1508 */ "0101 0110 1010", "1010 0110 1011", "0101 0010 1011", "101 0 1000 1011", "1101 0100 0110", "1101 1010 0011", "0101 1100 1010", "1010 1101 0 110", "0100 1101 1011", "0010 0110 1011", "1001 0100 1011",
173 0x056A, 0x0A6B, 0x052B, 0x0A8B, 0x0D46, 0x0DA3, 0x05CA, 0x0AD6 , 0x04DB, 0x026B, 0x094B,
174 //* 1509 -1519 */ "1010 1010 0101", "1011 0101 0010", "1011 0110 1001", "010 1 0111 0101", "0001 0111 0110", "1000 1011 0111", "0010 0101 1011", "0101 0010 1 011", "0101 0110 0101", "0101 1011 0100", "1001 1101 1010",
175 0x0AA5, 0x0B52, 0x0B69, 0x0575, 0x0176, 0x08B7, 0x025B, 0x052B , 0x0565, 0x05B4, 0x09DA,
176 //* 1520 -1530 */ "0100 1110 1101", "0001 0110 1101", "1000 1011 0110", "101 0 1010 0110", "1101 0101 0010", "1101 1010 1001", "0101 1101 0100", "1010 1101 1 010", "1001 0101 1011", "0100 1010 1011", "0110 0101 0011",
177 0x04ED, 0x016D, 0x08B6, 0x0AA6, 0x0D52, 0x0DA9, 0x05D4, 0x0ADA , 0x095B, 0x04AB, 0x0653,
178 //* 1531 -1541 */ "0111 0010 1001", "0111 0110 0010", "1011 1010 1001", "010 1 1011 0010", "1010 1011 0101", "0101 0101 0101", "1011 0010 0101", "1101 1001 0 010", "1110 1100 1001", "0110 1101 0010", "1010 1110 1001",
179 0x0729, 0x0762, 0x0BA9, 0x05B2, 0x0AB5, 0x0555, 0x0B25, 0x0D92 , 0x0EC9, 0x06D2, 0x0AE9,
180 //* 1542 -1552 */ "0101 0110 1011", "0100 1010 1011", "1010 0101 0101", "110 1 0010 1001", "1101 0101 0100", "1101 1010 1010", "1001 1011 0101", "0100 1011 1 010", "1010 0011 1011", "0100 1001 1011", "1010 0100 1101",
181 0x056B, 0x04AB, 0x0A55, 0x0D29, 0x0D54, 0x0DAA, 0x09B5, 0x04BA , 0x0A3B, 0x049B, 0x0A4D,
182 //* 1553 -1563 */ "1010 1010 1010", "1010 1101 0101", "0010 1101 1010", "100 1 0101 1101", "0100 0101 1110", "1010 0010 1110", "1100 1001 1010", "1101 0101 0 101", "0110 1011 0010", "0110 1011 1001", "0100 1011 1010",
183 0x0AAA, 0x0AD5, 0x02DA, 0x095D, 0x045E, 0x0A2E, 0x0C9A, 0x0D55 , 0x06B2, 0x06B9, 0x04BA,
184 //* 1564 -1574 */ "1010 0101 1101", "0101 0010 1101", "1010 1001 0101", "101 1 0101 0010", "1011 1010 1000", "1011 1011 0100", "0101 1011 1001", "0010 1101 1 010", "1001 0101 1010", "1011 0100 1010", "1101 1010 0100",
185 0x0A5D, 0x052D, 0x0A95, 0x0B52, 0x0BA8, 0x0BB4, 0x05B9, 0x02DA , 0x095A, 0x0B4A, 0x0DA4,
186 //* 1575 -1585 */ "1110 1101 0001", "0110 1110 1000", "1011 0110 1010", "010 1 0110 1101", "0101 0011 0101", "0110 1001 0101", "1101 0100 1010", "1101 1010 1 000", "1101 1101 0100", "0110 1101 1010", "0101 0101 1011",
187 0x0ED1, 0x06E8, 0x0B6A, 0x056D, 0x0535, 0x0695, 0x0D4A, 0x0DA8 , 0x0DD4, 0x06DA, 0x055B,
188 //* 1586 -1596 */ "0010 1001 1101", "0110 0010 1011", "1011 0001 0101", "101 1 0100 1010", "1011 1001 0101", "0101 1010 1010", "1010 1010 1110", "1001 0010 1 110", "1100 1000 1111", "0101 0010 0111", "0110 1001 0101",
189 0x029D, 0x062B, 0x0B15, 0x0B4A, 0x0B95, 0x05AA, 0x0AAE, 0x092E , 0x0C8F, 0x0527, 0x0695,
190 //* 1597 -1600 */ "0110 1010 1010", "1010 1101 0110", "0101 0101 1101", "001 0 1001 1101", };
191 0x06AA, 0x0AD6, 0x055D, 0x029D
158 }; 192 };
159 193
160 int32_t getUmalqura_MonthLength(int32_t y, int32_t m) { 194 int32_t getUmalqura_MonthLength(int32_t y, int32_t m) {
161 int32_t mask = (int32_t) (0x01 << (11 - m)); // set mask for bit correspo nding to month 195 int32_t mask = (int32_t) (0x01 << (11 - m)); // set mask for bit correspo nding to month
162 if((UMALQURA_MONTHLENGTH[y] & mask) == 0 ) 196 if((UMALQURA_MONTHLENGTH[y] & mask) == 0 )
163 return 29; 197 return 29;
164 else 198 else
165 return 30; 199 return 30;
166 200
167 } 201 }
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 { 325 {
292 return (14 + 11 * year) % 30 < 11; 326 return (14 + 11 * year) % 30 < 11;
293 } 327 }
294 328
295 /** 329 /**
296 * Return the day # on which the given year starts. Days are counted 330 * Return the day # on which the given year starts. Days are counted
297 * from the Hijri epoch, origin 0. 331 * from the Hijri epoch, origin 0.
298 */ 332 */
299 int32_t IslamicCalendar::yearStart(int32_t year) const{ 333 int32_t IslamicCalendar::yearStart(int32_t year) const{
300 if (cType == CIVIL || cType == TBLA || 334 if (cType == CIVIL || cType == TBLA ||
301 (cType == UMALQURA && year < UMALQURA_YEAR_START)) 335 (cType == UMALQURA && (year < UMALQURA_YEAR_START || year > UMALQURA_YEA R_END)))
302 { 336 {
303 return (year-1)*354 + ClockMath::floorDivide((3+11*year),30); 337 return (year-1)*354 + ClockMath::floorDivide((3+11*year),30);
304 } else if(cType==ASTRONOMICAL){ 338 } else if(cType==ASTRONOMICAL){
305 return trueMonthStart(12*(year-1)); 339 return trueMonthStart(12*(year-1));
306 } else { 340 } else {
307 int32_t ys = yearStart(UMALQURA_YEAR_START-1); 341 int32_t ys = yearStart(UMALQURA_YEAR_START-1);
308 ys+= handleGetYearLength(UMALQURA_YEAR_START-1); 342 ys+= handleGetYearLength(UMALQURA_YEAR_START-1);
309 for(int i=UMALQURA_YEAR_START; i< year; i++){ 343 for(int i=UMALQURA_YEAR_START; i< year; i++){
310 ys+= handleGetYearLength(i); 344 ys+= handleGetYearLength(i);
311 } 345 }
312 return ys; 346 return ys;
313 } 347 }
314 } 348 }
315 349
316 /** 350 /**
317 * Return the day # on which the given month starts. Days are counted 351 * Return the day # on which the given month starts. Days are counted
318 * from the Hijri epoch, origin 0. 352 * from the Hijri epoch, origin 0.
319 * 353 *
320 * @param year The hijri year 354 * @param year The hijri year
321 * @param year The hijri month, 0-based 355 * @param year The hijri month, 0-based (assumed to be in range 0..11)
322 */ 356 */
323 int32_t IslamicCalendar::monthStart(int32_t year, int32_t month) const { 357 int32_t IslamicCalendar::monthStart(int32_t year, int32_t month) const {
324 if (cType == CIVIL || cType == TBLA) { 358 if (cType == CIVIL || cType == TBLA) {
359 // This does not handle months out of the range 0..11
325 return (int32_t)uprv_ceil(29.5*month) 360 return (int32_t)uprv_ceil(29.5*month)
326 + (year-1)*354 + (int32_t)ClockMath::floorDivide((3+11*year),30); 361 + (year-1)*354 + (int32_t)ClockMath::floorDivide((3+11*year),30);
327 } else if(cType==ASTRONOMICAL){ 362 } else if(cType==ASTRONOMICAL){
328 return trueMonthStart(12*(year-1) + month); 363 return trueMonthStart(12*(year-1) + month);
329 } else { 364 } else {
330 int32_t ms = yearStart(year); 365 int32_t ms = yearStart(year);
331 for(int i=0; i< month; i++){ 366 for(int i=0; i< month; i++){
332 ms+= handleGetMonthLength(year, i); 367 ms+= handleGetMonthLength(year, i);
333 } 368 }
334 return ms; 369 return ms;
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 */ 495 */
461 int32_t IslamicCalendar::handleGetYearLength(int32_t extendedYear) const { 496 int32_t IslamicCalendar::handleGetYearLength(int32_t extendedYear) const {
462 if (cType == CIVIL || cType == TBLA || 497 if (cType == CIVIL || cType == TBLA ||
463 (cType == UMALQURA && (extendedYear<UMALQURA_YEAR_START || extendedYear> UMALQURA_YEAR_END)) ) { 498 (cType == UMALQURA && (extendedYear<UMALQURA_YEAR_START || extendedYear> UMALQURA_YEAR_END)) ) {
464 return 354 + (civilLeapYear(extendedYear) ? 1 : 0); 499 return 354 + (civilLeapYear(extendedYear) ? 1 : 0);
465 } else if(cType == ASTRONOMICAL){ 500 } else if(cType == ASTRONOMICAL){
466 int32_t month = 12*(extendedYear-1); 501 int32_t month = 12*(extendedYear-1);
467 return (trueMonthStart(month + 12) - trueMonthStart(month)); 502 return (trueMonthStart(month + 12) - trueMonthStart(month));
468 } else { 503 } else {
469 int len = 0; 504 int len = 0;
470 for(int i=0; i<12; i++) 505 for(int i=0; i<12; i++) {
471 len += handleGetMonthLength(extendedYear, i); 506 len += handleGetMonthLength(extendedYear, i);
507 }
472 return len; 508 return len;
473 } 509 }
474 } 510 }
475 511
476 //------------------------------------------------------------------------- 512 //-------------------------------------------------------------------------
477 // Functions for converting from field values to milliseconds.... 513 // Functions for converting from field values to milliseconds....
478 //------------------------------------------------------------------------- 514 //-------------------------------------------------------------------------
479 515
480 // Return JD of start of given month/year 516 // Return JD of start of given month/year
517 // Calendar says:
518 // Get the Julian day of the day BEFORE the start of this year.
519 // If useMonth is true, get the day before the start of the month.
520 // Hence the -1
481 /** 521 /**
482 * @draft ICU 2.4 522 * @draft ICU 2.4
483 */ 523 */
484 int32_t IslamicCalendar::handleComputeMonthStart(int32_t eyear, int32_t month, U Bool /* useMonth */) const { 524 int32_t IslamicCalendar::handleComputeMonthStart(int32_t eyear, int32_t month, U Bool /* useMonth */) const {
485 return monthStart(eyear, month) + 1948439; 525 // This may be called by Calendar::handleComputeJulianDay with months out of the range
526 // 0..11. Need to handle that here since monthStart requires months in the r ange 0.11.
527 if (month > 11) {
528 eyear += (month / 12);
529 month %= 12;
530 } else if (month < 0) {
531 month++;
532 eyear += (month / 12) - 1;
533 month = (month % 12) + 11;
534 }
535 return monthStart(eyear, month) + ((cType == TBLA)? ASTRONOMICAL_EPOC: CIVIL _EPOC) - 1;
486 } 536 }
487 537
488 //------------------------------------------------------------------------- 538 //-------------------------------------------------------------------------
489 // Functions for converting from milliseconds to field values 539 // Functions for converting from milliseconds to field values
490 //------------------------------------------------------------------------- 540 //-------------------------------------------------------------------------
491 541
492 /** 542 /**
493 * @draft ICU 2.4 543 * @draft ICU 2.4
494 */ 544 */
495 int32_t IslamicCalendar::handleGetExtendedYear() { 545 int32_t IslamicCalendar::handleGetExtendedYear() {
(...skipping 17 matching lines...) Expand all
513 * <li>DAY_OF_YEAR 563 * <li>DAY_OF_YEAR
514 * <li>EXTENDED_YEAR</ul> 564 * <li>EXTENDED_YEAR</ul>
515 * 565 *
516 * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this 566 * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this
517 * method is called. The getGregorianXxx() methods return Gregorian 567 * method is called. The getGregorianXxx() methods return Gregorian
518 * calendar equivalents for the given Julian day. 568 * calendar equivalents for the given Julian day.
519 * @draft ICU 2.4 569 * @draft ICU 2.4
520 */ 570 */
521 void IslamicCalendar::handleComputeFields(int32_t julianDay, UErrorCode &status) { 571 void IslamicCalendar::handleComputeFields(int32_t julianDay, UErrorCode &status) {
522 int32_t year, month, dayOfMonth, dayOfYear; 572 int32_t year, month, dayOfMonth, dayOfYear;
523 UDate startDate; 573 int32_t startDate;
524 int32_t days = julianDay - CIVIL_EPOC; 574 int32_t days = julianDay - CIVIL_EPOC;
525 575
526 if (cType == CIVIL || cType == TBLA) { 576 if (cType == CIVIL || cType == TBLA) {
527 if(cType == TBLA) 577 if(cType == TBLA) {
528 days = julianDay - ASTRONOMICAL_EPOC; 578 days = julianDay - ASTRONOMICAL_EPOC;
579 }
529 // Use the civil calendar approximation, which is just arithmetic 580 // Use the civil calendar approximation, which is just arithmetic
530 year = (int)ClockMath::floorDivide( (double)(30 * days + 10646) , 10631 .0 ); 581 year = (int)ClockMath::floorDivide( (double)(30 * days + 10646) , 10631 .0 );
531 month = (int32_t)uprv_ceil((days - 29 - yearStart(year)) / 29.5 ); 582 month = (int32_t)uprv_ceil((days - 29 - yearStart(year)) / 29.5 );
532 month = month<11?month:11; 583 month = month<11?month:11;
533 startDate = monthStart(year, month); 584 startDate = monthStart(year, month);
534 } else if(cType == ASTRONOMICAL){ 585 } else if(cType == ASTRONOMICAL){
535 // Guess at the number of elapsed full months since the epoch 586 // Guess at the number of elapsed full months since the epoch
536 int32_t months = (int32_t)uprv_floor((double)days / CalendarAstronomer:: SYNODIC_MONTH); 587 int32_t months = (int32_t)uprv_floor((double)days / CalendarAstronomer:: SYNODIC_MONTH);
537 588
538 startDate = uprv_floor(months * CalendarAstronomer::SYNODIC_MONTH); 589 startDate = (int32_t)uprv_floor(months * CalendarAstronomer::SYNODIC_MON TH);
539 590
540 double age = moonAge(internalGetTime(), status); 591 double age = moonAge(internalGetTime(), status);
541 if (U_FAILURE(status)) { 592 if (U_FAILURE(status)) {
542 status = U_MEMORY_ALLOCATION_ERROR; 593 status = U_MEMORY_ALLOCATION_ERROR;
543 return; 594 return;
544 } 595 }
545 if ( days - startDate >= 25 && age > 0) { 596 if ( days - startDate >= 25 && age > 0) {
546 // If we're near the end of the month, assume next month and search backwards 597 // If we're near the end of the month, assume next month and search backwards
547 months++; 598 months++;
548 } 599 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 month = m; 639 month = m;
589 } 640 }
590 } else { // invalid 'civil' 641 } else { // invalid 'civil'
591 U_ASSERT(false); // should not get here, out of range 642 U_ASSERT(false); // should not get here, out of range
592 year=month=0; 643 year=month=0;
593 } 644 }
594 645
595 dayOfMonth = (days - monthStart(year, month)) + 1; 646 dayOfMonth = (days - monthStart(year, month)) + 1;
596 647
597 // Now figure out the day of the year. 648 // Now figure out the day of the year.
598 dayOfYear = (days - monthStart(year, 0) + 1); 649 dayOfYear = (days - monthStart(year, 0)) + 1;
599 650
600 651
601 internalSet(UCAL_ERA, 0); 652 internalSet(UCAL_ERA, 0);
602 internalSet(UCAL_YEAR, year); 653 internalSet(UCAL_YEAR, year);
603 internalSet(UCAL_EXTENDED_YEAR, year); 654 internalSet(UCAL_EXTENDED_YEAR, year);
604 internalSet(UCAL_MONTH, month); 655 internalSet(UCAL_MONTH, month);
605 internalSet(UCAL_DAY_OF_MONTH, dayOfMonth); 656 internalSet(UCAL_DAY_OF_MONTH, dayOfMonth);
606 internalSet(UCAL_DAY_OF_YEAR, dayOfYear); 657 internalSet(UCAL_DAY_OF_YEAR, dayOfYear);
607 } 658 }
608 659
609 UBool 660 UBool
610 IslamicCalendar::inDaylightTime(UErrorCode& status) const 661 IslamicCalendar::inDaylightTime(UErrorCode& status) const
611 { 662 {
612 // copied from GregorianCalendar 663 // copied from GregorianCalendar
613 if (U_FAILURE(status) || (&(getTimeZone()) == NULL && !getTimeZone().useDayl ightTime())) 664 if (U_FAILURE(status) || !getTimeZone().useDaylightTime())
614 return FALSE; 665 return FALSE;
615 666
616 // Force an update of the state of the Calendar. 667 // Force an update of the state of the Calendar.
617 ((IslamicCalendar*)this)->complete(status); // cast away const 668 ((IslamicCalendar*)this)->complete(status); // cast away const
618 669
619 return (UBool)(U_SUCCESS(status) ? (internalGet(UCAL_DST_OFFSET) != 0) : FAL SE); 670 return (UBool)(U_SUCCESS(status) ? (internalGet(UCAL_DST_OFFSET) != 0) : FAL SE);
620 } 671 }
621 672
622 /** 673 /**
623 * The system maintains a static default century start date and Year. They are 674 * The system maintains a static default century start date and Year. They are
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 } 720 }
670 721
671 722
672 723
673 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IslamicCalendar) 724 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IslamicCalendar)
674 725
675 U_NAMESPACE_END 726 U_NAMESPACE_END
676 727
677 #endif 728 #endif
678 729
OLDNEW
« no previous file with comments | « source/i18n/indiancal.cpp ('k') | source/i18n/locdspnm.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698