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) 2012-2014, International Business Machines Corporation and    *
7 * others. All Rights Reserved.                                                *
8 *******************************************************************************
9 */
10package android.icu.util;
11
12import java.util.Date;
13
14import android.icu.util.ULocale.Category;
15
16/**
17 * <code>DangiCalendar</code> is a concrete subclass of {@link Calendar}
18 * that implements a traditional Korean calendar.
19 *
20 * @deprecated This API is ICU internal only.
21 * @hide Only a subset of ICU is exposed in Android
22 * @hide draft / provisional / internal are hidden on Android
23 */
24@Deprecated
25public class DangiCalendar extends ChineseCalendar {
26
27    private static final long serialVersionUID = 8156297445349501985L;
28
29    /**
30     * The start year of the Korean traditional calendar (Dan-gi) is the inaugural
31     * year of Dan-gun (BC 2333).
32     */
33    private static final int DANGI_EPOCH_YEAR = -2332;
34
35    /**
36     * The time zone used for performing astronomical computations for
37     * Dangi calendar. In Korea various timezones have been used historically
38     * (cf. http://www.math.snu.ac.kr/~kye/others/lunar.html):
39     *
40     *            - 1908/04/01: GMT+8
41     * 1908/04/01 - 1911/12/31: GMT+8.5
42     * 1912/01/01 - 1954/03/20: GMT+9
43     * 1954/03/21 - 1961/08/09: GMT+8.5
44     * 1961/08/10 -           : GMT+9
45     *
46     * Note that, in 1908-1911, the government did not apply the timezone change
47     * but used GMT+8. In addition, 1954-1961's timezone change does not affect
48     * the lunar date calculation. Therefore, the following simpler rule works:
49     *
50     * -1911: GMT+8
51     * 1912-: GMT+9
52     *
53     * Unfortunately, our astronomer's approximation doesn't agree with the
54     * references (http://www.math.snu.ac.kr/~kye/others/lunar.html and
55     * http://astro.kasi.re.kr/Life/ConvertSolarLunarForm.aspx?MenuID=115)
56     * in 1897/7/30. So the following ad hoc fix is used here:
57     *
58     *     -1896: GMT+8
59     *      1897: GMT+7
60     * 1898-1911: GMT+8
61     * 1912-    : GMT+9
62     */
63    private static final TimeZone KOREA_ZONE;
64
65    static {
66        InitialTimeZoneRule initialTimeZone = new InitialTimeZoneRule("GMT+8", 8 * ONE_HOUR, 0);
67        long[] millis1897 = { (1897 - 1970) * 365L * ONE_DAY }; // some days of error is not a problem here
68        long[] millis1898 = { (1898 - 1970) * 365L * ONE_DAY }; // some days of error is not a problem here
69        long[] millis1912 = { (1912 - 1970) * 365L * ONE_DAY }; // this doesn't create an issue for 1911/12/20
70        TimeZoneRule rule1897 = new TimeArrayTimeZoneRule("Korean 1897", 7 * ONE_HOUR, 0, millis1897,
71                DateTimeRule.STANDARD_TIME);
72        TimeZoneRule rule1898to1911 = new TimeArrayTimeZoneRule("Korean 1898-1911", 8 * ONE_HOUR, 0, millis1898,
73                DateTimeRule.STANDARD_TIME);
74        TimeZoneRule ruleFrom1912 = new TimeArrayTimeZoneRule("Korean 1912-", 9 * ONE_HOUR, 0, millis1912,
75                DateTimeRule.STANDARD_TIME);
76
77        RuleBasedTimeZone tz = new RuleBasedTimeZone("KOREA_ZONE", initialTimeZone);
78        tz.addTransitionRule(rule1897);
79        tz.addTransitionRule(rule1898to1911);
80        tz.addTransitionRule(ruleFrom1912);
81        tz.freeze();
82        KOREA_ZONE = tz;
83    };
84
85    /**
86     * Construct a <code>DangiCalendar</code> with the default time zone and locale.
87     *
88     * @deprecated This API is ICU internal only.
89     * @hide draft / provisional / internal are hidden on Android
90     */
91    @Deprecated
92    public DangiCalendar() {
93        this(TimeZone.getDefault(), ULocale.getDefault(Category.FORMAT));
94    }
95
96    /**
97     * Construct a <code>DangiCalendar</code> with the give date set in the default time zone
98     * with the default locale.
99     * @param date The date to which the new calendar is set.
100     *
101     * @deprecated This API is ICU internal only.
102     * @hide draft / provisional / internal are hidden on Android
103     */
104    @Deprecated
105    public DangiCalendar(Date date) {
106        this(TimeZone.getDefault(), ULocale.getDefault(Category.FORMAT));
107        setTime(date);
108    }
109
110    /**
111     * Construct a <code>DangiCalendar</code>  based on the current time
112     * with the given time zone with the given locale.
113     * @param zone the given time zone
114     * @param locale the given locale
115     *
116     * @deprecated This API is ICU internal only.
117     * @hide draft / provisional / internal are hidden on Android
118     */
119    @Deprecated
120    public DangiCalendar(TimeZone zone, ULocale locale) {
121        super(zone, locale, DANGI_EPOCH_YEAR, KOREA_ZONE);
122    }
123
124    /**
125     * {@inheritDoc}
126     *
127     * @deprecated This API is ICU internal only.
128     * @hide draft / provisional / internal are hidden on Android
129     */
130    @Deprecated
131    public String getType() {
132        return "dangi";
133    }
134}
135