All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ibm.icu.util.EthiopicCalendar Maven / Gradle / Ivy

Go to download

International Component for Unicode for Java (ICU4J) is a mature, widely used Java library providing Unicode and Globalization support

There is a newer version: 76.1
Show newest version
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
 *******************************************************************************
 * Copyright (C) 2005-2016, International Business Machines Corporation and
 * others. All Rights Reserved.
 *******************************************************************************
 */

package com.ibm.icu.util;

import java.util.Date;
import java.util.Locale;

import com.ibm.icu.impl.CalendarUtil;
import com.ibm.icu.util.ULocale.Category;

/**
 * Implement the Ethiopic calendar system.
 * 

* EthiopicCalendar usually should be instantiated using * {@link com.ibm.icu.util.Calendar#getInstance(ULocale)} passing in a ULocale * with the tag "@calendar=ethiopic".

* * @see com.ibm.icu.util.Calendar * @stable ICU 3.4 */ public final class EthiopicCalendar extends CECalendar { //jdk1.4.2 serialver private static final long serialVersionUID = -2438495771339315608L; /** * Constant for መስከረም, the 1st month of the Ethiopic year. * @stable ICU 3.4 */ public static final int MESKEREM = 0; /** * Constant for ጥቅምት, the 2nd month of the Ethiopic year. * @stable ICU 3.4 */ public static final int TEKEMT = 1; /** * Constant for ኅዳር, the 3rd month of the Ethiopic year. * @stable ICU 3.4 */ public static final int HEDAR = 2; /** * Constant for ታኅሣሥ, the 4th month of the Ethiopic year. * @stable ICU 3.4 */ public static final int TAHSAS = 3; /** * Constant for ጥር, the 5th month of the Ethiopic year. * @stable ICU 3.4 */ public static final int TER = 4; /** * Constant for የካቲት, the 6th month of the Ethiopic year. * @stable ICU 3.4 */ public static final int YEKATIT = 5; /** * Constant for መጋቢት, the 7th month of the Ethiopic year. * @stable ICU 3.4 */ public static final int MEGABIT = 6; /** * Constant for ሚያዝያ, the 8th month of the Ethiopic year. * @stable ICU 3.4 */ public static final int MIAZIA = 7; /** * Constant for ግንቦት, the 9th month of the Ethiopic year. * @stable ICU 3.4 */ public static final int GENBOT = 8; /** * Constant for ሰኔ, the 10th month of the Ethiopic year. * @stable ICU 3.4 */ public static final int SENE = 9; /** * Constant for ሐምሌ, the 11th month of the Ethiopic year. * @stable ICU 3.4 */ public static final int HAMLE = 10; /** * Constant for ነሐሴ, the 12th month of the Ethiopic year. * @stable ICU 3.4 */ public static final int NEHASSE = 11; /** * Constant for ጳጉሜን, the 13th month of the Ethiopic year. * @stable ICU 3.4 */ public static final int PAGUMEN = 12; // Up until the end of the 19th century the prevailant convention was to // reference the Ethiopic Calendar from the creation of the world, // \u12d3\u1218\u1270\u1361\u12d3\u1208\u121d // (Amete Alem 5500 BC). As Ethiopia modernized the reference epoch from // the birth of Christ (\u12d3\u1218\u1270\u1361\u121d\u1215\u1228\u1275) // began to displace the creation of the // world reference point. However, years before the birth of Christ are // still referenced in the creation of the world system. // Thus -100 \u12d3/\u121d // would be rendered as 5400 \u12d3/\u12d3. // // The creation of the world in Ethiopic cannon was // Meskerem 1, -5500 \u12d3/\u121d 00:00:00 // applying the birth of Christ reference and Ethiopian time conventions. This is // 6 hours less than the Julian epoch reference point (noon). In Gregorian // the date and time was July 18th -5493 BC 06:00 AM. // Julian Days relative to the // \u12d3\u1218\u1270\u1361\u121d\u1215\u1228\u1275 epoch // Note: we no longer use this constant //private static final int JD_EPOCH_OFFSET_AMETE_ALEM = -285019; // Julian Days relative to the // \u12d3\u1218\u1270\u1361\u12d3\u1208\u121d epoch private static final int JD_EPOCH_OFFSET_AMETE_MIHRET = 1723856; // The delta between Amete Alem 1 and Amete Mihret 1 // AA 5501 = AM 1 private static final int AMETE_MIHRET_DELTA = 5500; // Eras private static final int AMETE_ALEM = 0; private static final int AMETE_MIHRET = 1; // Era mode. When eraType is AMETE_ALEM_ERA, // Amete Mihret won't be used for the ERA field. private static final int AMETE_MIHRET_ERA = 0; private static final int AMETE_ALEM_ERA = 1; private int eraType = AMETE_MIHRET_ERA; /** * Constructs a default EthiopicCalendar using the current time * in the default time zone with the default locale. * @stable ICU 3.4 */ public EthiopicCalendar() { this(TimeZone.getDefault(), ULocale.getDefault(Category.FORMAT)); } /** * Constructs a EthiopicCalendar based on the current time * in the given time zone with the default locale. * * @param zone The time zone for the new calendar. * @stable ICU 3.4 */ public EthiopicCalendar(TimeZone zone) { this(zone, ULocale.getDefault(Category.FORMAT)); } /** * Constructs a EthiopicCalendar based on the current time * in the default time zone with the given locale. * * @param aLocale The locale for the new calendar. * @stable ICU 3.4 */ public EthiopicCalendar(Locale aLocale) { this(TimeZone.forLocaleOrDefault(aLocale), aLocale); } /** * Constructs a EthiopicCalendar based on the current time * in the default time zone with the given locale. * * @param locale The icu locale for the new calendar. * @stable ICU 3.4 */ public EthiopicCalendar(ULocale locale) { this(TimeZone.forULocaleOrDefault(locale), locale); } /** * Constructs a EthiopicCalendar based on the current time * in the given time zone with the given locale. * * @param zone The time zone for the new calendar. * @param aLocale The locale for the new calendar. * @stable ICU 3.4 */ public EthiopicCalendar(TimeZone zone, Locale aLocale) { this(zone, ULocale.forLocale(aLocale)); } /** * Constructs a EthiopicCalendar based on the current time * in the given time zone with the given locale. * * @param zone The time zone for the new calendar. * @param locale The icu locale for the new calendar. * @stable ICU 3.4 */ public EthiopicCalendar(TimeZone zone, ULocale locale) { super(zone, locale); setCalcTypeForLocale(locale); } /** * Constructs a EthiopicCalendar with the given date set * in the default time zone with the default locale. * * @param year The value used to set the calendar's {@link #YEAR YEAR} time field. * @param month The value used to set the calendar's {@link #MONTH MONTH} time field. * The value is 0-based. e.g., 0 for Meskerem. * @param date The value used to set the calendar's {@link #DATE DATE} time field. * @stable ICU 3.4 */ public EthiopicCalendar(int year, int month, int date) { super(year, month, date); } /** * Constructs a EthiopicCalendar with the given date set * in the default time zone with the default locale. * * @param date The date to which the new calendar is set. * @stable ICU 3.4 */ public EthiopicCalendar(Date date) { super(date); } /** * Constructs a EthiopicCalendar with the given date * and time set for the default time zone with the default locale. * * @param year The value used to set the calendar's {@link #YEAR YEAR} time field. * @param month The value used to set the calendar's {@link #MONTH MONTH} time field. * The value is 0-based. e.g., 0 for Meskerem. * @param date The value used to set the calendar's {@link #DATE DATE} time field. * @param hour The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field. * @param minute The value used to set the calendar's {@link #MINUTE MINUTE} time field. * @param second The value used to set the calendar's {@link #SECOND SECOND} time field. * @stable ICU 3.4 */ public EthiopicCalendar(int year, int month, int date, int hour, int minute, int second) { super(year, month, date, hour, minute, second); } /** * {@inheritDoc} * @stable ICU 3.8 */ @Override public String getType() { if (isAmeteAlemEra()) { return "ethiopic-amete-alem"; } return "ethiopic"; } /** * Set Alem or Mihret era. * * @param onOff Set Amete Alem era if true, otherwise set Amete Mihret era. * @stable ICU 3.4 */ public void setAmeteAlemEra(boolean onOff) { eraType = onOff ? AMETE_ALEM_ERA : AMETE_MIHRET_ERA; } /** * Return true if this calendar is set to the Amete Alem era. * * @return true if set to the Amete Alem era. * @stable ICU 3.4 */ public boolean isAmeteAlemEra() { return (eraType == AMETE_ALEM_ERA); } /** * {@inheritDoc} * @internal * @deprecated This API is ICU internal only. */ @Override @Deprecated protected int handleGetExtendedYear() { // Ethiopic calendar uses EXTENDED_YEAR aligned to // Amelete Mihret year always. int eyear; if (newerField(EXTENDED_YEAR, YEAR) == EXTENDED_YEAR) { eyear = internalGet(EXTENDED_YEAR, 1); // Default to year 1 } else if (isAmeteAlemEra()){ eyear = internalGet(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 int era = internalGet(ERA, AMETE_MIHRET); if (era == AMETE_MIHRET) { eyear = internalGet(YEAR, 1); // Default to year 1 } else { eyear = internalGet(YEAR, 1) - AMETE_MIHRET_DELTA; } } return eyear; } /** * {@inheritDoc} * @internal * @deprecated This API is ICU internal only. */ @Override @Deprecated protected void handleComputeFields(int julianDay) { int era, year; int[] fields = new int[3]; jdToCE(julianDay, getJDEpochOffset(), fields); // fields[0] eyear // fields[1] month // fields[2] day if (isAmeteAlemEra()) { era = AMETE_ALEM; year = fields[0] + AMETE_MIHRET_DELTA; } else { if (fields[0] > 0) { era = AMETE_MIHRET; year = fields[0]; } else { era = AMETE_ALEM; year = fields[0] + AMETE_MIHRET_DELTA; } } internalSet(EXTENDED_YEAR, fields[0]); internalSet(ERA, era); internalSet(YEAR, year); internalSet(MONTH, fields[1]); internalSet(ORDINAL_MONTH, fields[1]); internalSet(DAY_OF_MONTH, fields[2]); internalSet(DAY_OF_YEAR, (30 * fields[1]) + fields[2]); } /** * {@inheritDoc} * @internal * @deprecated This API is ICU internal only. */ @Override @Deprecated protected int handleGetLimit(int field, int limitType) { if (isAmeteAlemEra() && field == ERA) { return 0; // Only one era in this mode, era is always 0 } return super.handleGetLimit(field, limitType); } /** * {@inheritDoc} * @internal * @deprecated This API is ICU internal only. */ @Override @Deprecated protected int getJDEpochOffset() { return JD_EPOCH_OFFSET_AMETE_MIHRET; } /** * Convert an Ethiopic year, month, and day to a Julian day. * * @param year the year * @param month the month * @param date the day * * @draft ICU 3.4 (retain) */ // The equivalent operation can be done by public Calendar API. // This API was accidentally marked as @draft, but we have no good // reason to keep this. For now, we leave it as is, but may be // removed in future. 2008-03-21 yoshito public static int EthiopicToJD(long year, int month, int date) { return ceToJD(year, month, date, JD_EPOCH_OFFSET_AMETE_MIHRET); } /** * set type based on locale */ private void setCalcTypeForLocale(ULocale locale) { String localeCalType = CalendarUtil.getCalendarType(locale); if("ethiopic-amete-alem".equals(localeCalType)) { setAmeteAlemEra(true); } else { setAmeteAlemEra(false); // default - Amete Mihret } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy