void EthiopicCalendar::handleComputeFields(int32_t julianDay, UErrorCode &/*status*/) { int32_t eyear, month, day, era, year; jdToCE(julianDay, getJDEpochOffset(), eyear, month, day); if (isAmeteAlemEra()) { era = AMETE_ALEM; year = eyear + AMETE_MIHRET_DELTA; } else { if (eyear > 0) { era = AMETE_MIHRET; year = eyear; } else { era = AMETE_ALEM; year = eyear + AMETE_MIHRET_DELTA; } } internalSet(UCAL_EXTENDED_YEAR, eyear); internalSet(UCAL_ERA, era); internalSet(UCAL_YEAR, year); internalSet(UCAL_MONTH, month); internalSet(UCAL_DATE, day); internalSet(UCAL_DAY_OF_YEAR, (30 * month) + day); }
const char * EthiopicCalendar::getType() const { if (isAmeteAlemEra()) { return "ethiopic-amete-alem"; } return "ethiopic"; }
int32_t EthiopicCalendar::handleGetLimit(UCalendarDateFields field, ELimitType limitType) const { if (isAmeteAlemEra() && field == UCAL_ERA) { return 0; // Only one era in this mode, era is always 0 } return CECalendar::handleGetLimit(field, limitType); }
int32_t EthiopicCalendar::defaultCenturyStartYear() const { initializeSystemDefaultCentury(); if (isAmeteAlemEra()) { return fgSystemDefaultCenturyStartYear + AMETE_MIHRET_DELTA; } return fgSystemDefaultCenturyStartYear; }
int32_t EthiopicCalendar::defaultCenturyStartYear() const { // lazy-evaluate systemDefaultCenturyStartYear umtx_initOnce(gSystemDefaultCenturyInit, &initializeSystemDefaultCentury); if (isAmeteAlemEra()) { return gSystemDefaultCenturyStartYear + AMETE_MIHRET_DELTA; } return gSystemDefaultCenturyStartYear; }
int32_t EthiopicCalendar::handleGetExtendedYear() { // Ethiopic calendar uses EXTENDED_YEAR aligned to // Amelete Hihret year always. int32_t eyear; if (newerField(UCAL_EXTENDED_YEAR, UCAL_YEAR) == UCAL_EXTENDED_YEAR) { eyear = internalGet(UCAL_EXTENDED_YEAR, 1); // Default to year 1 } else if (isAmeteAlemEra()) { eyear = internalGet(UCAL_YEAR, 1 + AMETE_MIHRET_DELTA) - AMETE_MIHRET_DELTA; // Default to year 1 of Amelete Mihret } else { // The year defaults to the epoch start, the era to AMETE_MIHRET int32_t era = internalGet(UCAL_ERA, AMETE_MIHRET); if (era == AMETE_MIHRET) { eyear = internalGet(UCAL_YEAR, 1); // Default to year 1 } else { eyear = internalGet(UCAL_YEAR, 1) - AMETE_MIHRET_DELTA; } } return eyear; }