int32_t JapaneseCalendar::getDefaultDayInMonth(int32_t eyear, int32_t month) { int32_t era = internalGetEra(); int32_t day = 1; if(eyear == kEraInfo[era].year) { if(month == (kEraInfo[era].month-1)) { return kEraInfo[era].day; } } return day; }
int32_t JapaneseCalendar::handleGetExtendedYear() { int32_t year; if (newerField(UCAL_EXTENDED_YEAR, UCAL_YEAR) == UCAL_EXTENDED_YEAR && newerField(UCAL_EXTENDED_YEAR, UCAL_ERA) == UCAL_EXTENDED_YEAR) { year = internalGet(UCAL_EXTENDED_YEAR, 1); } else { // Subtract one because year starts at 1 year = internalGet(UCAL_YEAR) + kEraInfo[internalGetEra()].year - 1; } return year; }
int32_t JapaneseCalendar::handleGetExtendedYear() { // EXTENDED_YEAR in JapaneseCalendar is a Gregorian year // The default value of EXTENDED_YEAR is 1970 (Showa 45) int32_t year; if (newerField(UCAL_EXTENDED_YEAR, UCAL_YEAR) == UCAL_EXTENDED_YEAR && newerField(UCAL_EXTENDED_YEAR, UCAL_ERA) == UCAL_EXTENDED_YEAR) { year = internalGet(UCAL_EXTENDED_YEAR, kGregorianEpoch); } else { // Subtract one because year starts at 1 year = internalGet(UCAL_YEAR) + kEraInfo[internalGetEra()].year - 1; } return year; }
int32_t JapaneseCalendar::getDefaultDayInMonth(int32_t month) { UErrorCode status = U_ZERO_ERROR; int32_t era = internalGetEra(); computeFields(status); // slow int32_t year = getGregorianYear(); int32_t day = GregorianCalendar::getDefaultDayInMonth(month); if(year == kEraInfo[era].year) { if(month == (kEraInfo[era].month-1)) { return kEraInfo[era].day; } } return day; }
int32_t JapaneseCalendar::getDefaultMonthInYear(int32_t eyear) { int32_t era = internalGetEra(); // TODO do we assume we can trust 'era'? What if it is denormalized? int32_t month = 0; // Find out if we are at the edge of an era if(eyear == kEraInfo[era].year) { // Yes, we're in the first year of this era. return kEraInfo[era].month-1; } return month; }
int32_t JapaneseCalendar::getDefaultMonthInYear() { UErrorCode status = U_ZERO_ERROR; int32_t era = internalGetEra(); computeFields(status); // slow int32_t year = getGregorianYear(); // TODO do we assume we can trust 'era'? What if it is denormalized? int32_t month = GregorianCalendar::getDefaultMonthInYear(); // Find out if we are at the edge of an era if(year == kEraInfo[era].year) { // Yes, we're in the first year of this era. return kEraInfo[era].month-1; } return month; }
void BuddhistCalendar::add(UCalendarDateFields field, int32_t amount, UErrorCode& status) { if (U_FAILURE(status)) return; if (amount == 0) return; // Do nothing! if(field == UCAL_YEAR /* || field == UCAL_YEAR_WOY */) { int32_t year = internalGet(field); int32_t era = internalGetEra(); year += amount; set(field,year); pinDayOfMonth(); } else { GregorianCalendar::add(field,amount,status); } }