16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 2003-2009,2012, International Business Machines Corporation and * 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* others. All Rights Reserved. * 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File JAPANCAL.CPP 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History: 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 05/16/2003 srl copied from buddhcal.cpp 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "japancal.h" 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/gregocal.h" 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "umutex.h" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "uassert.h" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//#define U_DEBUG_JCAL 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef U_DEBUG_JCAL 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdio.h> 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUOBJECT_DEFINE_RTTI_IMPLEMENTATION(JapaneseCalendar) 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Gregorian date of each emperor's ascension 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Years are AD, months are 1-based. 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const struct { 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int16_t year; 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int8_t month; 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int8_t day; 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} kEraInfo[] = { 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Year Month Day 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 645, 6, 19 }, // Taika 0 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 650, 2, 15 }, // Hakuchi 1 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 672, 1, 1 }, // Hakuho 2 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 686, 7, 20 }, // Shucho 3 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 701, 3, 21 }, // Taiho 4 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 704, 5, 10 }, // Keiun 5 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 708, 1, 11 }, // Wado 6 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 715, 9, 2 }, // Reiki 7 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 717, 11, 17 }, // Yoro 8 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 724, 2, 4 }, // Jinki 9 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 729, 8, 5 }, // Tempyo 10 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 749, 4, 14 }, // Tempyo-kampo 11 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 749, 7, 2 }, // Tempyo-shoho 12 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 757, 8, 18 }, // Tempyo-hoji 13 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 765, 1, 7 }, // Tempho-jingo 14 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 767, 8, 16 }, // Jingo-keiun 15 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 770, 10, 1 }, // Hoki 16 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 781, 1, 1 }, // Ten-o 17 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 782, 8, 19 }, // Enryaku 18 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 806, 5, 18 }, // Daido 19 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 810, 9, 19 }, // Konin 20 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 824, 1, 5 }, // Tencho 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 834, 1, 3 }, // Showa 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 848, 6, 13 }, // Kajo 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 851, 4, 28 }, // Ninju 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 854, 11, 30 }, // Saiko 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 857, 2, 21 }, // Tennan 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 859, 4, 15 }, // Jogan 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 877, 4, 16 }, // Genkei 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 885, 2, 21 }, // Ninna 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 889, 4, 27 }, // Kampyo 30 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 898, 4, 26 }, // Shotai 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 901, 7, 15 }, // Engi 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 923, 4, 11 }, // Encho 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 931, 4, 26 }, // Shohei 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 938, 5, 22 }, // Tengyo 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 947, 4, 22 }, // Tenryaku 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 957, 10, 27 }, // Tentoku 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 961, 2, 16 }, // Owa 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 964, 7, 10 }, // Koho 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 968, 8, 13 }, // Anna 40 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 970, 3, 25 }, // Tenroku 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 973, 12, 20 }, // Ten-en 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 976, 7, 13 }, // Jogen 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 978, 11, 29 }, // Tengen 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 983, 4, 15 }, // Eikan 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 985, 4, 27 }, // Kanna 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 987, 4, 5 }, // Ei-en 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 989, 8, 8 }, // Eiso 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 990, 11, 7 }, // Shoryaku 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 995, 2, 22 }, // Chotoku 50 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 999, 1, 13 }, // Choho 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1004, 7, 20 }, // Kanko 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1012, 12, 25 }, // Chowa 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1017, 4, 23 }, // Kannin 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1021, 2, 2 }, // Jian 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1024, 7, 13 }, // Manju 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1028, 7, 25 }, // Chogen 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1037, 4, 21 }, // Choryaku 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1040, 11, 10 }, // Chokyu 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1044, 11, 24 }, // Kantoku 60 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1046, 4, 14 }, // Eisho 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1053, 1, 11 }, // Tengi 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1058, 8, 29 }, // Kohei 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1065, 8, 2 }, // Jiryaku 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1069, 4, 13 }, // Enkyu 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1074, 8, 23 }, // Shoho 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1077, 11, 17 }, // Shoryaku 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1081, 2, 10 }, // Eiho 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1084, 2, 7 }, // Otoku 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1087, 4, 7 }, // Kanji 70 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1094, 12, 15 }, // Kaho 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1096, 12, 17 }, // Eicho 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1097, 11, 21 }, // Shotoku 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1099, 8, 28 }, // Kowa 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1104, 2, 10 }, // Choji 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1106, 4, 9 }, // Kasho 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1108, 8, 3 }, // Tennin 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1110, 7, 13 }, // Ten-ei 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1113, 7, 13 }, // Eikyu 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1118, 4, 3 }, // Gen-ei 80 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1120, 4, 10 }, // Hoan 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1124, 4, 3 }, // Tenji 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1126, 1, 22 }, // Daiji 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1131, 1, 29 }, // Tensho 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1132, 8, 11 }, // Chosho 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1135, 4, 27 }, // Hoen 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1141, 7, 10 }, // Eiji 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1142, 4, 28 }, // Koji 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1144, 2, 23 }, // Tenyo 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1145, 7, 22 }, // Kyuan 90 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1151, 1, 26 }, // Ninpei 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1154, 10, 28 }, // Kyuju 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1156, 4, 27 }, // Hogen 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1159, 4, 20 }, // Heiji 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1160, 1, 10 }, // Eiryaku 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1161, 9, 4 }, // Oho 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1163, 3, 29 }, // Chokan 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1165, 6, 5 }, // Eiman 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1166, 8, 27 }, // Nin-an 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1169, 4, 8 }, // Kao 100 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1171, 4, 21 }, // Shoan 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1175, 7, 28 }, // Angen 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1177, 8, 4 }, // Jisho 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1181, 7, 14 }, // Yowa 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1182, 5, 27 }, // Juei 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1184, 4, 16 }, // Genryuku 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1185, 8, 14 }, // Bunji 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1190, 4, 11 }, // Kenkyu 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1199, 4, 27 }, // Shoji 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1201, 2, 13 }, // Kennin 110 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1204, 2, 20 }, // Genkyu 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1206, 4, 27 }, // Ken-ei 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1207, 10, 25 }, // Shogen 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1211, 3, 9 }, // Kenryaku 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1213, 12, 6 }, // Kenpo 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1219, 4, 12 }, // Shokyu 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1222, 4, 13 }, // Joo 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1224, 11, 20 }, // Gennin 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1225, 4, 20 }, // Karoku 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1227, 12, 10 }, // Antei 120 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1229, 3, 5 }, // Kanki 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1232, 4, 2 }, // Joei 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1233, 4, 15 }, // Tempuku 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1234, 11, 5 }, // Bunryaku 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1235, 9, 19 }, // Katei 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1238, 11, 23 }, // Ryakunin 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1239, 2, 7 }, // En-o 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1240, 7, 16 }, // Ninji 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1243, 2, 26 }, // Kangen 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1247, 2, 28 }, // Hoji 130 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1249, 3, 18 }, // Kencho 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1256, 10, 5 }, // Kogen 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1257, 3, 14 }, // Shoka 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1259, 3, 26 }, // Shogen 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1260, 4, 13 }, // Bun-o 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1261, 2, 20 }, // Kocho 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1264, 2, 28 }, // Bun-ei 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1275, 4, 25 }, // Kenji 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1278, 2, 29 }, // Koan 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1288, 4, 28 }, // Shoo 140 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1293, 8, 55 }, // Einin 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1299, 4, 25 }, // Shoan 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1302, 11, 21 }, // Kengen 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1303, 8, 5 }, // Kagen 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1306, 12, 14 }, // Tokuji 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1308, 10, 9 }, // Enkei 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1311, 4, 28 }, // Ocho 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1312, 3, 20 }, // Showa 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1317, 2, 3 }, // Bunpo 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1319, 4, 28 }, // Geno 150 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1321, 2, 23 }, // Genkyo 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1324, 12, 9 }, // Shochu 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1326, 4, 26 }, // Kareki 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1329, 8, 29 }, // Gentoku 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1331, 8, 9 }, // Genko 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1334, 1, 29 }, // Kemmu 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1336, 2, 29 }, // Engen 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1340, 4, 28 }, // Kokoku 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1346, 12, 8 }, // Shohei 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1370, 7, 24 }, // Kentoku 160 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1372, 4, 1 }, // Bunch\u0169 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1375, 5, 27 }, // Tenju 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1379, 3, 22 }, // Koryaku 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1381, 2, 10 }, // Kowa 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1384, 4, 28 }, // Gench\u0169 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1384, 2, 27 }, // Meitoku 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1387, 8, 23 }, // Kakei 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1389, 2, 9 }, // Koo 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1390, 3, 26 }, // Meitoku 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1394, 7, 5 }, // Oei 170 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1428, 4, 27 }, // Shocho 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1429, 9, 5 }, // Eikyo 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1441, 2, 17 }, // Kakitsu 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1444, 2, 5 }, // Bun-an 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1449, 7, 28 }, // Hotoku 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1452, 7, 25 }, // Kyotoku 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1455, 7, 25 }, // Kosho 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1457, 9, 28 }, // Choroku 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1460, 12, 21 }, // Kansho 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1466, 2, 28 }, // Bunsho 180 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1467, 3, 3 }, // Onin 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1469, 4, 28 }, // Bunmei 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1487, 7, 29 }, // Chokyo 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1489, 8, 21 }, // Entoku 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1492, 7, 19 }, // Meio 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1501, 2, 29 }, // Bunki 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1504, 2, 30 }, // Eisho 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1521, 8, 23 }, // Taiei 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1528, 8, 20 }, // Kyoroku 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1532, 7, 29 }, // Tenmon 190 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1555, 10, 23 }, // Koji 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1558, 2, 28 }, // Eiroku 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1570, 4, 23 }, // Genki 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1573, 7, 28 }, // Tensho 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1592, 12, 8 }, // Bunroku 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1596, 10, 27 }, // Keicho 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1615, 7, 13 }, // Genwa 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1624, 2, 30 }, // Kan-ei 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1644, 12, 16 }, // Shoho 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1648, 2, 15 }, // Keian 200 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1652, 9, 18 }, // Shoo 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1655, 4, 13 }, // Meiryaku 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1658, 7, 23 }, // Manji 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1661, 4, 25 }, // Kanbun 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1673, 9, 21 }, // Enpo 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1681, 9, 29 }, // Tenwa 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1684, 2, 21 }, // Jokyo 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1688, 9, 30 }, // Genroku 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1704, 3, 13 }, // Hoei 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1711, 4, 25 }, // Shotoku 210 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1716, 6, 22 }, // Kyoho 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1736, 4, 28 }, // Genbun 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1741, 2, 27 }, // Kanpo 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1744, 2, 21 }, // Enkyo 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1748, 7, 12 }, // Kan-en 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1751, 10, 27 }, // Horyaku 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1764, 6, 2 }, // Meiwa 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1772, 11, 16 }, // An-ei 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1781, 4, 2 }, // Tenmei 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1789, 1, 25 }, // Kansei 220 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1801, 2, 5 }, // Kyowa 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1804, 2, 11 }, // Bunka 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1818, 4, 22 }, // Bunsei 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1830, 12, 10 }, // Tenpo 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1844, 12, 2 }, // Koka 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1848, 2, 28 }, // Kaei 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1854, 11, 27 }, // Ansei 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1860, 3, 18 }, // Man-en 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1861, 2, 19 }, // Bunkyu 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1864, 2, 20 }, // Genji 230 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1865, 4, 7 }, // Keio 231 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1868, 9, 8 }, // Meiji 232 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1912, 7, 30 }, // Taisho 233 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1926, 12, 25 }, // Showa 234 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1989, 1, 8 } // Heisei 235 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define kEraCount (sizeof(kEraInfo)/sizeof(kEraInfo[0])) 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The current era, for reference. 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const int32_t kCurrentEra = (kEraCount-1); // int32_t to match the calendar field type 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const int32_t kGregorianEpoch = 1970; // used as the default value of EXTENDED_YEAR 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Some platforms don't like to export constants, like old Palm OS and some z/OS configurations. */ 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orguint32_t JapaneseCalendar::getCurrentEra() { 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return kCurrentEra; 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgJapaneseCalendar::JapaneseCalendar(const Locale& aLocale, UErrorCode& success) 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org: GregorianCalendar(aLocale, success) 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org setTimeInMillis(getNow(), success); // Call this again now that the vtable is set up properly. 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgJapaneseCalendar::~JapaneseCalendar() 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgJapaneseCalendar::JapaneseCalendar(const JapaneseCalendar& source) 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org: GregorianCalendar(source) 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgJapaneseCalendar& JapaneseCalendar::operator= ( const JapaneseCalendar& right) 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar::operator=(right); 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return *this; 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgCalendar* JapaneseCalendar::clone(void) const 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return new JapaneseCalendar(*this); 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst char *JapaneseCalendar::getType() const 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return "japanese"; 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t JapaneseCalendar::getDefaultMonthInYear(int32_t eyear) 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t era = internalGetEra(); 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // TODO do we assume we can trust 'era'? What if it is denormalized? 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t month = 0; 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Find out if we are at the edge of an era 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(eyear == kEraInfo[era].year) { 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Yes, we're in the first year of this era. 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return kEraInfo[era].month-1; 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return month; 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t JapaneseCalendar::getDefaultDayInMonth(int32_t eyear, int32_t month) 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t era = internalGetEra(); 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t day = 1; 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(eyear == kEraInfo[era].year) { 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(month == (kEraInfo[era].month-1)) { 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return kEraInfo[era].day; 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return day; 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t JapaneseCalendar::internalGetEra() const 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return internalGet(UCAL_ERA, kCurrentEra); 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t JapaneseCalendar::handleGetExtendedYear() 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // EXTENDED_YEAR in JapaneseCalendar is a Gregorian year 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // The default value of EXTENDED_YEAR is 1970 (Showa 45) 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t year; 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (newerField(UCAL_EXTENDED_YEAR, UCAL_YEAR) == UCAL_EXTENDED_YEAR && 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org newerField(UCAL_EXTENDED_YEAR, UCAL_ERA) == UCAL_EXTENDED_YEAR) { 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org year = internalGet(UCAL_EXTENDED_YEAR, kGregorianEpoch); 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Subtract one because year starts at 1 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org year = internalGet(UCAL_YEAR) + kEraInfo[internalGetEra()].year - 1; 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return year; 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid JapaneseCalendar::handleComputeFields(int32_t julianDay, UErrorCode& status) 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //Calendar::timeToFields(theTime, quick, status); 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GregorianCalendar::handleComputeFields(julianDay, status); 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t year = internalGet(UCAL_EXTENDED_YEAR); // Gregorian year 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t low = 0; 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Short circuit for recent years. Most modern computations will 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // occur in the current era and won't require the binary search. 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Note that if the year is == the current era year, then we use 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // the binary search to handle the month/dom comparison. 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef U_DEBUG_JCAL 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "== %d \n", year); 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (year > kEraInfo[kCurrentEra].year) { 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org low = kCurrentEra; 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef U_DEBUG_JCAL 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, " low=%d (special)\n", low); 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Binary search 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t high = kEraCount; 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef U_DEBUG_JCAL 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, " high=%d\n", high); 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (low < high - 1) { 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i = (low + high) / 2; 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t diff = year - kEraInfo[i].year; 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef U_DEBUG_JCAL 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, " d=%d low=%d, high=%d. Considering %d:M%d D%d Y%d. { we are ?:M%d D%d Y%d }\n", 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org diff,low, high, i, kEraInfo[i].month-1, kEraInfo[i].day, kEraInfo[i].year, internalGet(UCAL_MONTH), internalGet(UCAL_DATE),year); 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // If years are the same, then compare the months, and if those 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // are the same, compare days of month. In the ERAS array 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // months are 1-based for easier maintenance. 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (diff == 0) { 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org diff = internalGet(UCAL_MONTH) - (kEraInfo[i].month - 1); 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef U_DEBUG_JCAL 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "diff now %d (M) = %d - %d - 1\n", diff, internalGet(UCAL_MONTH), kEraInfo[i].month); 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (diff == 0) { 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org diff = internalGet(UCAL_DATE) - kEraInfo[i].day; 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef U_DEBUG_JCAL 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "diff now %d (D)\n", diff); 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (diff >= 0) { 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org low = i; 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org high = i; 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef U_DEBUG_JCAL 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, ". low=%d, high=%d, i=%d, diff=%d.. %d\n", low, high, i, diff, year); 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef U_DEBUG_JCAL 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, " low[era]=%d,.. %d\n", low, year); 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Now we've found the last era that starts before this date, so 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // adjust the year to count from the start of that era. Note that 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // all dates before the first era will fall into the first era by 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // the algorithm. 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org internalSet(UCAL_ERA, low); 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org internalSet(UCAL_YEAR, year - kEraInfo[low].year + 1); 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef U_DEBUG_JCAL 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, " Set ERA=%d, year=%d\n", low, year-kEraInfo[low].year+1); 4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgDisable pivoting 4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool JapaneseCalendar::haveDefaultCentury() const 4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUDate JapaneseCalendar::defaultCenturyStart() const 4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0;// WRONG 4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t JapaneseCalendar::defaultCenturyStartYear() const 4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t JapaneseCalendar::handleGetLimit(UCalendarDateFields field, ELimitType limitType) const 4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch(field) { 4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UCAL_ERA: 4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (limitType == UCAL_LIMIT_MINIMUM || limitType == UCAL_LIMIT_GREATEST_MINIMUM) { 4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return kCurrentEra; 4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UCAL_YEAR: 4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch (limitType) { 4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UCAL_LIMIT_MINIMUM: 4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UCAL_LIMIT_GREATEST_MINIMUM: 4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 1; 4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UCAL_LIMIT_LEAST_MAXIMUM: 4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 1; 4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UCAL_LIMIT_COUNT: //added to avoid warning 4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case UCAL_LIMIT_MAXIMUM: 4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return GregorianCalendar::handleGetLimit(UCAL_YEAR, UCAL_LIMIT_MAXIMUM) - kEraInfo[kCurrentEra].year; 4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: 4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 1; // Error condition, invalid limitType 4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: 5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return GregorianCalendar::handleGetLimit(field,limitType); 5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint32_t JapaneseCalendar::getActualMaximum(UCalendarDateFields field, UErrorCode& status) const { 5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (field == UCAL_YEAR) { 5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t era = get(UCAL_ERA, status); 5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; // error case... any value 5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (era == kCurrentEra) { 5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // TODO: Investigate what value should be used here - revisit after 4.0. 5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return handleGetLimit(UCAL_YEAR, UCAL_LIMIT_MAXIMUM); 5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t nextEraYear = kEraInfo[era + 1].year; 5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t nextEraMonth = kEraInfo[era + 1].month; 5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t nextEraDate = kEraInfo[era + 1].day; 5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t maxYear = nextEraYear - kEraInfo[era].year + 1; // 1-base 5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (nextEraMonth == 1 && nextEraDate == 1) { 5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Subtract 1, because the next era starts at Jan 1 5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org maxYear--; 5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return maxYear; 5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return GregorianCalendar::getActualMaximum(field, status); 5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 532