summaryrefslogtreecommitdiff
path: root/android_icu4j/src/main/java/android/icu/util/SimpleHoliday.java
blob: e17269fd52ac8af17d29ea321e78fe54a5d43b7a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
/* GENERATED SOURCE. DO NOT MODIFY. */
/*
 *******************************************************************************
 * Copyright (C) 1996-2016, International Business Machines Corporation and    *
 * others. All Rights Reserved.                                                *
 *******************************************************************************
 */

package android.icu.util;

import java.util.Date;

/**
 * <b>Note:</b> The Holiday framework is a technology preview.
 * Despite its age, is still draft API, and clients should treat it as such.
 * 
 * A holiday whose date can be represented by a month, day, and optionally day of week
 * in the Gregorian calendar.
 *
 * @hide Only a subset of ICU is exposed in Android
 * @hide draft / provisional / internal are hidden on Android
 */
public class SimpleHoliday extends Holiday {
    /**
     * Construct an object representing a holiday
     *
     * @param month         The month in which this holiday occurs (0-based)
     * @param dayOfMonth    The date within the month (1-based).
     *
     * @param name  The name of this holiday.  This string is used as a key
     *              to look up the holiday's name a resource bundle.
     *              If the name is not found in the resource bundle,
     *              getDisplayName will return this string instead.
     *
     * @see Holiday#getDisplayName(java.util.Locale)
     * @hide draft / provisional / internal are hidden on Android
     */
    public SimpleHoliday(int month, int dayOfMonth, String name)
    {
        super(name, new SimpleDateRule(month, dayOfMonth));
    }

    /**
     * Construct an object representing a holiday
     *
     * @param month         The month in which this holiday occurs (0-based)
     * @param dayOfMonth    The date within the month (1-based).
     *
     * @param name  The name of this holiday.  This string is used as a key
     *              to look up the holiday's name a resource bundle.
     *              If the name is not found in the resource bundle,
     *              getDisplayName will return this string instead.
     *
     * @see Holiday#getDisplayName(java.util.Locale)
     * @hide draft / provisional / internal are hidden on Android
     */
    public SimpleHoliday(int month, int dayOfMonth, String name,
                            int startYear)
    {
        super(name, rangeRule(startYear, 0, new SimpleDateRule(month, dayOfMonth)));
    }

    /**
     * Construct an object representing a holiday
     *
     * @param month         The month in which this holiday occurs (0-based)
     * @param dayOfMonth    The date within the month (1-based).
     *
     * @param name  The name of this holiday.  This string is used as a key
     *              to look up the holiday's name a resource bundle.
     *              If the name is not found in the resource bundle,
     *              getDisplayName will return this string instead.
     *
     * @see Holiday#getDisplayName(java.util.Locale)
     * @hide draft / provisional / internal are hidden on Android
     */
    public SimpleHoliday(int month, int dayOfMonth, String name,
                            int startYear, int endYear)
    {
        super(name, rangeRule(startYear, endYear, new SimpleDateRule(month, dayOfMonth)));
    }

    /** // TODO: remove
     * Construct an object representing a holiday
     *
     * @param month The month in which this holiday occurs (0-based)
     *
     * @param dayOfMonth A date within the month (1-based).  The
     *      interpretation of this parameter depends on the value of
     *      <code>dayOfWeek</code>.
     *
     * @param dayOfWeek The day of the week on which this holiday occurs.
     *      The following values are legal: <ul>
     *      <li>dayOfWeek == 0 - use dayOfMonth only
     *      <li>dayOfWeek &lt; 0  - use last -dayOfWeek before or on dayOfMonth
     *      <li>dayOfWeek &gt; 0  - use first dayOfWeek after or on dayOfMonth
     *      </ul>
     *
     * @param name  The name of this holiday.  This string is used as a key
     *              to look up the holiday's name a resource bundle.
     *              If the name is not found in the resource bundle,
     *              getDisplayName will return this string instead.
     *
     * @see Holiday#getDisplayName(java.util.Locale)
     * @hide draft / provisional / internal are hidden on Android
     */
    public SimpleHoliday(int month, int dayOfMonth, int dayOfWeek, String name)
    {
        super(name, new SimpleDateRule(month, dayOfMonth,
                                        dayOfWeek > 0 ? dayOfWeek : - dayOfWeek,
                                        dayOfWeek > 0));
    }

    /**
     * @hide draft / provisional / internal are hidden on Android
     */
    public SimpleHoliday(int month, int dayOfMonth, int dayOfWeek, String name,
                        int startYear)
    {
        super(name, rangeRule(startYear, 0, 
                              new SimpleDateRule(month, dayOfMonth,
                                                 dayOfWeek > 0 ? dayOfWeek : - dayOfWeek,
                                                 dayOfWeek > 0)));
    }


    /**
     * @hide draft / provisional / internal are hidden on Android
     */
    public SimpleHoliday(int month, int dayOfMonth, int dayOfWeek, String name,
                        int startYear, int endYear)
    {
        super(name, rangeRule(startYear, endYear, 
                              new SimpleDateRule(month, dayOfMonth,
                                                 dayOfWeek > 0 ? dayOfWeek : - dayOfWeek,
                                                 dayOfWeek > 0)));
    }

    private static DateRule rangeRule(int startYear, int endYear, DateRule rule)
    {
        if (startYear == 0 && endYear == 0) {
            return rule;
        }

        RangeDateRule rangeRule = new RangeDateRule();

        if (startYear != 0) {
            Calendar start = new GregorianCalendar(startYear, Calendar.JANUARY, 1);
            rangeRule.add(start.getTime(), rule);
        } else {
            rangeRule.add(rule);
        }
        if (endYear != 0) {
            Date end = new GregorianCalendar(endYear, Calendar.DECEMBER, 31).getTime();
            rangeRule.add(end, null);
        }

        return rangeRule;
    }

    /* Constants for holidays that are common throughout the Western
     * and Christian worlds.... */

    /**
     * New Year's Day - January 1st
     * @hide draft / provisional / internal are hidden on Android
     */
    public static final SimpleHoliday NEW_YEARS_DAY =
        new SimpleHoliday(Calendar.JANUARY,    1,  "New Year's Day");

    /**
     * Epiphany, January 6th
     * @hide draft / provisional / internal are hidden on Android
     */
    public static final SimpleHoliday EPIPHANY =
        new SimpleHoliday(Calendar.JANUARY,    6,  "Epiphany");

    /**
     * May Day, May 1st
     * @hide draft / provisional / internal are hidden on Android
     */
    public static final SimpleHoliday MAY_DAY =
        new SimpleHoliday(Calendar.MAY,        1,  "May Day");

    /**
     * Assumption, August 15th
     * @hide draft / provisional / internal are hidden on Android
     */
    public static final SimpleHoliday ASSUMPTION =
        new SimpleHoliday(Calendar.AUGUST,    15,  "Assumption");

    /**
     * All Saints' Day, November 1st
     * @hide draft / provisional / internal are hidden on Android
     */
    public static final SimpleHoliday ALL_SAINTS_DAY =
        new SimpleHoliday(Calendar.NOVEMBER,   1,  "All Saints' Day");

    /**
     * All Souls' Day, November 1st
     * @hide draft / provisional / internal are hidden on Android
     */
    public static final SimpleHoliday ALL_SOULS_DAY =
        new SimpleHoliday(Calendar.NOVEMBER,   2,  "All Souls' Day");

    /**
     * Immaculate Conception, December 8th
     * @hide draft / provisional / internal are hidden on Android
     */
    public static final SimpleHoliday IMMACULATE_CONCEPTION =
        new SimpleHoliday(Calendar.DECEMBER,   8,  "Immaculate Conception");

    /**
     * Christmas Eve, December 24th
     * @hide draft / provisional / internal are hidden on Android
     */
    public static final SimpleHoliday CHRISTMAS_EVE =
        new SimpleHoliday(Calendar.DECEMBER,  24,  "Christmas Eve");

    /**
     * Christmas, December 25th
     * @hide draft / provisional / internal are hidden on Android
     */
    public static final SimpleHoliday CHRISTMAS =
        new SimpleHoliday(Calendar.DECEMBER,  25,  "Christmas");

    /**
     * Boxing Day, December 26th
     * @hide draft / provisional / internal are hidden on Android
     */
    public static final SimpleHoliday BOXING_DAY =
        new SimpleHoliday(Calendar.DECEMBER,  26,  "Boxing Day");

    /**
     * Saint Stephen's Day, December 26th
     * @hide draft / provisional / internal are hidden on Android
     */
    public static final SimpleHoliday ST_STEPHENS_DAY =
        new SimpleHoliday(Calendar.DECEMBER,  26,  "St. Stephen's Day");

    /**
     * New Year's Eve, December 31st
     * @hide draft / provisional / internal are hidden on Android
     */
    public static final SimpleHoliday NEW_YEARS_EVE =
        new SimpleHoliday(Calendar.DECEMBER,  31,  "New Year's Eve");

}