• 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-2012, 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>BuddhistCalendar</code> is a subclass of <code>GregorianCalendar</code>
18  * that numbers years since the birth of the Buddha.  This is the civil calendar
19  * in some predominantly Buddhist countries such as Thailand, and it is used for
20  * religious purposes elsewhere.
21  * <p>
22  * The Buddhist calendar is identical to the Gregorian calendar in all respects
23  * except for the year and era.  Years are numbered since the birth of the
24  * Buddha in 543 BC (Gregorian), so that 1 AD (Gregorian) is equivalent to 544
25  * BE (Buddhist Era) and 1998 AD is 2541 BE.
26  * <p>
27  * The Buddhist Calendar has only one allowable era: <code>BE</code>.  If the
28  * calendar is not in lenient mode (see <code>setLenient</code>), dates before
29  * 1/1/1 BE are rejected with an <code>IllegalArgumentException</code>.
30  * <p>
31  * This class should not be subclassed.</p>
32  * <p>
33  * BuddhistCalendar usually should be instantiated using
34  * {@link ohos.global.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
35  * with the tag <code>"@calendar=buddhist"</code>.</p>
36  *
37  * @see ohos.global.icu.util.Calendar
38  * @see ohos.global.icu.util.GregorianCalendar
39  *
40  * @author Laura Werner
41  * @author Alan Liu
42  */
43 public class BuddhistCalendar extends GregorianCalendar {
44     // jdk1.4.2 serialver
45     private static final long serialVersionUID = 2583005278132380631L;
46 
47     //-------------------------------------------------------------------------
48     // Constructors...
49     //-------------------------------------------------------------------------
50 
51     /**
52      * Constant for the Buddhist Era.  This is the only allowable <code>ERA</code>
53      * value for the Buddhist calendar.
54      *
55      * @see ohos.global.icu.util.Calendar#ERA
56      */
57     public static final int BE = 0;
58 
59     /**
60      * Constructs a <code>BuddhistCalendar</code> using the current time
61      * in the default time zone with the default locale.
62      */
BuddhistCalendar()63     public BuddhistCalendar() {
64         super();
65     }
66 
67     /**
68      * Constructs a <code>BuddhistCalendar</code> based on the current time
69      * in the given time zone with the default locale.
70      *
71      * @param zone the given time zone.
72      */
BuddhistCalendar(TimeZone zone)73     public BuddhistCalendar(TimeZone zone) {
74         super(zone);
75     }
76 
77     /**
78      * Constructs a <code>BuddhistCalendar</code> based on the current time
79      * in the default time zone with the given locale.
80      *
81      * @param aLocale the given locale.
82      */
BuddhistCalendar(Locale aLocale)83     public BuddhistCalendar(Locale aLocale) {
84         super(aLocale);
85     }
86 
87     /**
88      * Constructs a <code>BuddhistCalendar</code> based on the current time
89      * in the default time zone with the given locale.
90      *
91      * @param locale the given ulocale.
92      */
BuddhistCalendar(ULocale locale)93     public BuddhistCalendar(ULocale locale) {
94         super(locale);
95     }
96 
97     /**
98      * Constructs a <code>BuddhistCalendar</code> based on the current time
99      * in the given time zone with the given locale.
100      *
101      * @param zone the given time zone.
102      *
103      * @param aLocale the given locale.
104      */
BuddhistCalendar(TimeZone zone, Locale aLocale)105     public BuddhistCalendar(TimeZone zone, Locale aLocale) {
106         super(zone, aLocale);
107     }
108 
109     /**
110      * Constructs a <code>BuddhistCalendar</code> based on the current time
111      * in the given time zone with the given locale.
112      *
113      * @param zone the given time zone.
114      *
115      * @param locale the given ulocale.
116      */
BuddhistCalendar(TimeZone zone, ULocale locale)117     public BuddhistCalendar(TimeZone zone, ULocale locale) {
118         super(zone, locale);
119     }
120 
121     /**
122      * Constructs a <code>BuddhistCalendar</code> with the given date set
123      * in the default time zone with the default locale.
124      *
125      * @param date      The date to which the new calendar is set.
126      */
BuddhistCalendar(Date date)127     public BuddhistCalendar(Date date) {
128         this();
129         setTime(date);
130     }
131 
132     /**
133      * Constructs a <code>BuddhistCalendar</code> with the given date set
134      * in the default time zone with the default locale.
135      *
136      * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
137      *
138      * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
139      *                  The value is 0-based. e.g., 0 for January.
140      *
141      * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
142      */
BuddhistCalendar(int year, int month, int date)143     public BuddhistCalendar(int year, int month, int date) {
144         super(year, month, date);
145     }
146 
147     /**
148      * Constructs a BuddhistCalendar with the given date
149      * and time set for the default time zone with the default locale.
150      *
151      * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
152      *
153      * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
154      *                  The value is 0-based. e.g., 0 for January.
155      *
156      * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
157      *
158      * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
159      *
160      * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
161      *
162      * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
163      */
BuddhistCalendar(int year, int month, int date, int hour, int minute, int second)164     public BuddhistCalendar(int year, int month, int date, int hour,
165                              int minute, int second)
166     {
167         super(year, month, date, hour, minute, second);
168     }
169 
170 
171     //-------------------------------------------------------------------------
172     // The only practical difference from a Gregorian calendar is that years
173     // are numbered since the birth of the Buddha.  A couple of overrides will
174     // take care of that....
175     //-------------------------------------------------------------------------
176 
177     // Starts in -543 AD, ie 544 BC
178     private static final int BUDDHIST_ERA_START = -543;
179 
180     // Use 1970 as the default value of EXTENDED_YEAR
181     private static final int GREGORIAN_EPOCH = 1970;
182 
183     /**
184      */
handleGetExtendedYear()185     protected int handleGetExtendedYear() {
186         // EXTENDED_YEAR in BuddhistCalendar is a Gregorian year
187         // The default value of EXTENDED_YEAR is 1970 (Buddhist 2513)
188         int year;
189         if (newerField(EXTENDED_YEAR, YEAR) == EXTENDED_YEAR) {
190             year = internalGet(EXTENDED_YEAR, GREGORIAN_EPOCH);
191         } else {
192             year = internalGet(YEAR, GREGORIAN_EPOCH - BUDDHIST_ERA_START)
193                     + BUDDHIST_ERA_START;
194         }
195         return year;
196     }
197 
198     // Return JD of start of given month/year
199     /**
200      */
handleComputeMonthStart(int eyear, int month, boolean useMonth)201     protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) {
202         return super.handleComputeMonthStart(eyear, month, useMonth);
203     }
204 
205     /**
206      */
handleComputeFields(int julianDay)207     protected void handleComputeFields(int julianDay) {
208         super.handleComputeFields(julianDay);
209         int y = internalGet(EXTENDED_YEAR) - BUDDHIST_ERA_START;
210         internalSet(ERA, 0);
211         internalSet(YEAR, y);
212     }
213 
214     /**
215      * Override GregorianCalendar.  There is only one Buddhist ERA.  We
216      * should really handle YEAR, YEAR_WOY, and EXTENDED_YEAR here too to
217      * implement the 1..5000000 range, but it's not critical.
218      */
handleGetLimit(int field, int limitType)219     protected int handleGetLimit(int field, int limitType) {
220         if (field == ERA) {
221             return BE;
222         }
223         return super.handleGetLimit(field, limitType);
224     }
225 
226     /**
227      * {@inheritDoc}
228      */
getType()229     public String getType() {
230         return "buddhist";
231     }
232 }
233