• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* GENERATED SOURCE. DO NOT MODIFY. */
2 // © 2016 and later: Unicode, Inc. and others.
3 // License & terms of use: http://www.unicode.org/copyright.html#License
4 /*
5  *******************************************************************************
6  * Copyright (C) 1996-2010, International Business Machines Corporation and    *
7  * others. All Rights Reserved.                                                *
8  *******************************************************************************
9  */
10 
11 package ohos.global.icu.util;
12 
13 import java.util.Date;
14 import java.util.Locale;
15 
16 /**
17  * <code>TaiwanCalendar</code> is a subclass of <code>GregorianCalendar</code>
18  * that numbers years since 1912.
19  * <p>
20  * The Taiwan calendar is identical to the Gregorian calendar in all respects
21  * except for the year and era.  Years are numbered since 1912 AD (Gregorian).
22  * <p>
23  * The Taiwan Calendar has one era: <code>MINGUO</code>.
24  * <p>
25  * This class should not be subclassed.</p>
26  * <p>
27  * TaiwanCalendar usually should be instantiated using
28  * {@link ohos.global.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
29  * with the tag <code>"@calendar=roc"</code>.</p>
30  *
31  * @see ohos.global.icu.util.Calendar
32  * @see ohos.global.icu.util.GregorianCalendar
33  *
34  * @author Laura Werner
35  * @author Alan Liu
36  * @author Steven R. Loomis
37  */
38 public class TaiwanCalendar extends GregorianCalendar {
39     // jdk1.4.2 serialver
40     private static final long serialVersionUID = 2583005278132380631L;
41 
42     //-------------------------------------------------------------------------
43     // Constructors...
44     //-------------------------------------------------------------------------
45 
46     /**
47      * Constant for the Taiwan Era for years before Minguo 1.
48      * Brefore Minuo 1 is Gregorian 1911, Before Minguo 2 is Gregorian 1910
49      * and so on.
50      *
51      * @see ohos.global.icu.util.Calendar#ERA
52      */
53     public static final int BEFORE_MINGUO = 0;
54 
55     /**
56      * Constant for the Taiwan Era for Minguo.  Minguo 1 is 1912 in
57      * Gregorian calendar.
58      *
59      * @see ohos.global.icu.util.Calendar#ERA
60      */
61     public static final int MINGUO = 1;
62 
63     /**
64      * Constructs a <code>TaiwanCalendar</code> using the current time
65      * in the default time zone with the default locale.
66      */
TaiwanCalendar()67     public TaiwanCalendar() {
68         super();
69     }
70 
71     /**
72      * Constructs a <code>TaiwanCalendar</code> based on the current time
73      * in the given time zone with the default locale.
74      *
75      * @param zone the given time zone.
76      */
TaiwanCalendar(TimeZone zone)77     public TaiwanCalendar(TimeZone zone) {
78         super(zone);
79     }
80 
81     /**
82      * Constructs a <code>TaiwanCalendar</code> based on the current time
83      * in the default time zone with the given locale.
84      *
85      * @param aLocale the given locale.
86      */
TaiwanCalendar(Locale aLocale)87     public TaiwanCalendar(Locale aLocale) {
88         super(aLocale);
89     }
90 
91     /**
92      * Constructs a <code>TaiwanCalendar</code> based on the current time
93      * in the default time zone with the given locale.
94      *
95      * @param locale the given ulocale.
96      */
TaiwanCalendar(ULocale locale)97     public TaiwanCalendar(ULocale locale) {
98         super(locale);
99     }
100 
101     /**
102      * Constructs a <code>TaiwanCalendar</code> based on the current time
103      * in the given time zone with the given locale.
104      *
105      * @param zone the given time zone.
106      */
TaiwanCalendar(TimeZone zone, Locale aLocale)107     public TaiwanCalendar(TimeZone zone, Locale aLocale) {
108         super(zone, aLocale);
109     }
110 
111     /**
112      * Constructs a <code>TaiwanCalendar</code> based on the current time
113      * in the given time zone with the given locale.
114      *
115      * @param zone the given time zone.
116      * @param locale the given ulocale.
117      */
TaiwanCalendar(TimeZone zone, ULocale locale)118     public TaiwanCalendar(TimeZone zone, ULocale locale) {
119         super(zone, locale);
120     }
121 
122     /**
123      * Constructs a <code>TaiwanCalendar</code> with the given date set
124      * in the default time zone with the default locale.
125      *
126      * @param date      The date to which the new calendar is set.
127      */
TaiwanCalendar(Date date)128     public TaiwanCalendar(Date date) {
129         this();
130         setTime(date);
131     }
132 
133     /**
134      * Constructs a <code>TaiwanCalendar</code> with the given date set
135      * in the default time zone with the default locale.
136      *
137      * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
138      *
139      * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
140      *                  The value is 0-based. e.g., 0 for January.
141      *
142      * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
143      */
TaiwanCalendar(int year, int month, int date)144     public TaiwanCalendar(int year, int month, int date) {
145         super(year, month, date);
146     }
147 
148     /**
149      * Constructs a TaiwanCalendar with the given date
150      * and time set for the default time zone with the default locale.
151      *
152      * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
153      *
154      * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
155      *                  The value is 0-based. e.g., 0 for January.
156      * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
157      * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
158      * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
159      * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
160      */
TaiwanCalendar(int year, int month, int date, int hour, int minute, int second)161     public TaiwanCalendar(int year, int month, int date, int hour,
162                              int minute, int second)
163     {
164         super(year, month, date, hour, minute, second);
165     }
166 
167 
168     //-------------------------------------------------------------------------
169     // The only practical difference from a Gregorian calendar is that years
170     // are numbered since 1912, inclusive.  A couple of overrides will
171     // take care of that....
172     //-------------------------------------------------------------------------
173 
174     private static final int Taiwan_ERA_START = 1911; // 0=1911, 1=1912
175 
176     // Use 1970 as the default value of EXTENDED_YEAR
177     private static final int GREGORIAN_EPOCH = 1970;
178 
179 
180     /**
181      * {@inheritDoc}
182      */
handleGetExtendedYear()183     protected int handleGetExtendedYear() {
184         // EXTENDED_YEAR in TaiwanCalendar is a Gregorian year
185         // The default value of EXTENDED_YEAR is 1970 (Minguo 59)
186         int year = GREGORIAN_EPOCH;
187         if (newerField(EXTENDED_YEAR, YEAR) == EXTENDED_YEAR
188                 && newerField(EXTENDED_YEAR, ERA) == EXTENDED_YEAR) {
189             year = internalGet(EXTENDED_YEAR, GREGORIAN_EPOCH);
190         } else {
191             int era = internalGet(ERA, MINGUO);
192             if (era == MINGUO) {
193                 year = internalGet(YEAR, 1) + Taiwan_ERA_START;
194             } else {
195                 year = 1 - internalGet(YEAR, 1) + Taiwan_ERA_START;
196             }
197         }
198         return year;
199     }
200 
201     /**
202      * {@inheritDoc}
203      */
handleComputeFields(int julianDay)204     protected void handleComputeFields(int julianDay) {
205         super.handleComputeFields(julianDay);
206         int y = internalGet(EXTENDED_YEAR) - Taiwan_ERA_START;
207         if (y > 0) {
208             internalSet(ERA, MINGUO);
209             internalSet(YEAR, y);
210         } else {
211             internalSet(ERA, BEFORE_MINGUO);
212             internalSet(YEAR, 1- y);
213         }
214     }
215 
216     /**
217      * Override GregorianCalendar.  There is only one Taiwan ERA.  We
218      * should really handle YEAR, YEAR_WOY, and EXTENDED_YEAR here too to
219      * implement the 1..5000000 range, but it's not critical.
220      */
handleGetLimit(int field, int limitType)221     protected int handleGetLimit(int field, int limitType) {
222         if (field == ERA) {
223             if (limitType == MINIMUM || limitType == GREATEST_MINIMUM) {
224                 return BEFORE_MINGUO;
225             } else {
226                 return MINGUO;
227             }
228         }
229         return super.handleGetLimit(field, limitType);
230     }
231 
232     /**
233      * {@inheritDoc}
234      */
getType()235     public String getType() {
236         return "roc";
237     }
238 }
239