1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.util; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectInputStream; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectOutputStream; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectStreamField; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.Serializable; 252e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughesimport java.text.DateFormatSymbols; 26162b0775772fa66b7eb634760a8159a60c1ddceaElliott Hughesimport libcore.icu.ICU; 27162b0775772fa66b7eb634760a8159a60c1ddceaElliott Hughesimport libcore.icu.LocaleData; 2833aa6eb602478e7f51ac16f30c88db3566022886Elliott Hughes 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Calendar} is an abstract base class for converting between a 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Date} object and a set of integer fields such as 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code YEAR}, {@code MONTH}, {@code DAY}, 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code HOUR}, and so on. (A {@code Date} object represents a 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specific instant in time with millisecond precision. See {@link Date} for 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * information about the {@code Date} class.) 36f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Subclasses of {@code Calendar} interpret a {@code Date} 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * according to the rules of a specific calendar system. 40f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Like other locale-sensitive classes, {@code Calendar} provides a class 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method, {@code getInstance}, for getting a default instance of 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this class for general use. {@code Calendar}'s {@code getInstance} method 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * returns a calendar whose locale is based on system settings and whose time fields 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * have been initialized with the current date and time: <blockquote> 47f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre>Calendar rightNow = Calendar.getInstance()</pre> 49f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote> 51f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A {@code Calendar} object can produce all the time field values needed 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to implement the date-time formatting for a particular language and calendar 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * style (for example, Japanese-Gregorian, Japanese-Traditional). 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Calendar} defines the range of values returned by certain 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * fields, as well as their meaning. For example, the first month of the year 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * has value {@code MONTH} == {@code JANUARY} for all calendars. 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Other values are defined by the concrete subclass, such as {@code ERA} 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and {@code YEAR}. See individual field documentation and subclass 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * documentation for details. 62f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * When a {@code Calendar} is <em>lenient</em>, it accepts a wider 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * range of field values than it produces. For example, a lenient 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code GregorianCalendar} interprets {@code MONTH} == 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code JANUARY}, {@code DAY_OF_MONTH} == 32 as February 1. A 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * non-lenient {@code GregorianCalendar} throws an exception when given 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * out-of-range field settings. When calendars recompute field values for return 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * by {@code get()}, they normalize them. For example, a 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code GregorianCalendar} always produces {@code DAY_OF_MONTH} 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * values between 1 and the length of the month. 73f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Calendar} defines a locale-specific seven day week using two 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * parameters: the first day of the week and the minimal days in first week 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (from 1 to 7). These numbers are taken from the locale resource data when a 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Calendar} is constructed. They may also be specified explicitly 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * through the API. 80f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * When setting or getting the {@code WEEK_OF_MONTH} or 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code WEEK_OF_YEAR} fields, {@code Calendar} must determine 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first week of the month or year as a reference point. The first week of a 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * month or year is defined as the earliest seven day period beginning on 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code getFirstDayOfWeek()} and containing at least 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code getMinimalDaysInFirstWeek()} days of that month or year. Weeks 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * numbered ..., -1, 0 precede the first week; weeks numbered 2, 3,... follow 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * it. Note that the normalized numbering returned by {@code get()} may 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * be different. For example, a specific {@code Calendar} subclass may 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * designate the week before week 1 of a year as week <em>n</em> of the 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * previous year. 93f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * When computing a {@code Date} from time fields, two special 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * circumstances may arise: there may be insufficient information to compute the 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Date} (such as only year and month but no day in the month), or 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * there may be inconsistent information (such as "Tuesday, July 15, 1996" -- 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * July 15, 1996 is actually a Monday). 100f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <strong>Insufficient information.</strong> The calendar will use default 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * information to specify the missing fields. This may vary by calendar; for the 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gregorian calendar, the default for a field is the same as that of the start 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the epoch: i.e., YEAR = 1970, MONTH = JANUARY, DATE = 1, etc. 106f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <strong>Inconsistent information.</strong> If fields conflict, the calendar 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * will give preference to fields set more recently. For example, when 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * determining the day, the calendar will look for one of the following 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * combinations of fields. The most recent combination, as determined by the 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * most recently set single field, will be used. 113f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote> 115f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * MONTH + DAY_OF_MONTH 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * MONTH + WEEK_OF_MONTH + DAY_OF_WEEK 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DAY_OF_YEAR 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DAY_OF_WEEK + WEEK_OF_YEAR</pre> 122f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote> 124f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * For the time of day: 126f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote> 128f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * HOUR_OF_DAY 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * AM_PM + HOUR</pre> 132f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote> 134f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <strong>Note:</strong> There are certain possible ambiguities in 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * interpretation of certain singular times, which are resolved in the following 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ways: 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ol> 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li> 24:00:00 "belongs" to the following day. That is, 23:59 on Dec 31, 1969 141f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * < 24:00 on Jan 1, 1970 < 24:01:00 on Jan 1, 1970 form a sequence of 142f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * three consecutive minutes in time. 143f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li> Although historically not precise, midnight also belongs to "am", and 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * noon belongs to "pm", so on the same day, we have 12:00 am (midnight) < 12:01 am, 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and 12:00 pm (noon) < 12:01 pm 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ol> 148f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The date or time format strings are not part of the definition of a calendar, 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * as those must be modifiable or overridable by the user at runtime. Use 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link java.text.DateFormat} to format dates. 153f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <strong>Field manipulation methods</strong> 156f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Calendar} fields can be changed using three methods: 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code set()}, {@code add()}, and {@code roll()}. 160f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <strong>{@code set(f, value)}</strong> changes field {@code f} 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to {@code value}. In addition, it sets an internal member variable to 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * indicate that field {@code f} has been changed. Although field 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code f} is changed immediately, the calendar's milliseconds is not 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * recomputed until the next call to {@code get()}, 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code getTime()}, or {@code getTimeInMillis()} is made. Thus, 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * multiple calls to {@code set()} do not trigger multiple, unnecessary 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * computations. As a result of changing a field using {@code set()}, 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * other fields may also change, depending on the field, the field value, and 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the calendar system. In addition, {@code get(f)} will not necessarily 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * return {@code value} after the fields have been recomputed. The 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specifics are determined by the concrete calendar class. 174f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <em>Example</em>: Consider a {@code GregorianCalendar} originally 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * set to August 31, 1999. Calling <code>set(Calendar.MONTH, 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Calendar.SEPTEMBER)</code> 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * sets the calendar to September 31, 1999. This is a temporary internal 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * representation that resolves to October 1, 1999 if {@code getTime()}is 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * then called. However, a call to {@code set(Calendar.DAY_OF_MONTH, 30)} 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * before the call to {@code getTime()} sets the calendar to September 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 30, 1999, since no recomputation occurs after {@code set()} itself. 184f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <strong>{@code add(f, delta)}</strong> adds {@code delta} to 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * field {@code f}. This is equivalent to calling <code>set(f, 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * get(f) + delta)</code> 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * with two adjustments: 190f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote> 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <strong>Add rule 1</strong>. The value of field {@code f} after the 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * call minus the value of field {@code f} before the call is 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code delta}, modulo any overflow that has occurred in field 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code f}. Overflow occurs when a field value exceeds its range and, 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * as a result, the next larger field is incremented or decremented and the 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * field value is adjusted back into its range. 199f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <strong>Add rule 2</strong>. If a smaller field is expected to be invariant, 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * but it is impossible for it to be equal to its prior value because of 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * changes in its minimum or maximum after field {@code f} is changed, 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * then its value is adjusted to be as close as possible to its expected value. 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A smaller field represents a smaller unit of time. {@code HOUR} is a 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * smaller field than {@code DAY_OF_MONTH}. No adjustment is made to 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * smaller fields that are not expected to be invariant. The calendar system 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * determines what fields are expected to be invariant. 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote> 210f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * In addition, unlike {@code set()}, {@code add()} forces an 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * immediate recomputation of the calendar's milliseconds and all fields. 214f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <em>Example</em>: Consider a {@code GregorianCalendar} originally 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * set to August 31, 1999. Calling {@code add(Calendar.MONTH, 13)} sets 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the calendar to September 30, 2000. <strong>Add rule 1</strong> sets the 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code MONTH} field to September, since adding 13 months to August 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * gives September of the next year. Since {@code DAY_OF_MONTH} cannot be 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 31 in September in a {@code GregorianCalendar}, <strong>add rule 2</strong> 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * sets the {@code DAY_OF_MONTH} to 30, the closest possible value. 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Although it is a smaller field, {@code DAY_OF_WEEK} is not adjusted by 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * rule 2, since it is expected to change when the month changes in a 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code GregorianCalendar}. 226f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <strong>{@code roll(f, delta)}</strong> adds {@code delta} to 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * field {@code f} without changing larger fields. This is equivalent to 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * calling {@code add(f, delta)} with the following adjustment: 231f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote> 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <strong>Roll rule</strong>. Larger fields are unchanged after the call. A 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * larger field represents a larger unit of time. {@code DAY_OF_MONTH} is 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a larger field than {@code HOUR}. 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote> 238f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <em>Example</em>: Consider a {@code GregorianCalendar} originally 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * set to August 31, 1999. Calling <code>roll(Calendar.MONTH, 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 8)</code> sets 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the calendar to April 30, <strong>1999</strong>. Add rule 1 sets the 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code MONTH} field to April. Using a {@code GregorianCalendar}, 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code DAY_OF_MONTH} cannot be 31 in the month April. Add rule 2 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * sets it to the closest possible value, 30. Finally, the <strong>roll rule</strong> 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * maintains the {@code YEAR} field value of 1999. 248f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <em>Example</em>: Consider a {@code GregorianCalendar} originally 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * set to Sunday June 6, 1999. Calling 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code roll(Calendar.WEEK_OF_MONTH, -1)} sets the calendar to Tuesday 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * June 1, 1999, whereas calling {@code add(Calendar.WEEK_OF_MONTH, -1)} 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * sets the calendar to Sunday May 30, 1999. This is because the roll rule 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * imposes an additional constraint: The {@code MONTH} must not change 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when the {@code WEEK_OF_MONTH} is rolled. Taken together with add rule 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1, the resultant date must be between Tuesday June 1 and Saturday June 5. 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * According to add rule 2, the {@code DAY_OF_WEEK}, an invariant when 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * changing the {@code WEEK_OF_MONTH}, is set to Tuesday, the closest 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * possible value to Sunday (where Sunday is the first day of the week). 261f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <strong>Usage model</strong>. To motivate the behavior of {@code add()} 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and {@code roll()}, consider a user interface component with 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * increment and decrement buttons for the month, day, and year, and an 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * underlying {@code GregorianCalendar}. If the interface reads January 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 31, 1999 and the user presses the month increment button, what should it 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * read? If the underlying implementation uses {@code set()}, it might 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * read March 3, 1999. A better result would be February 28, 1999. Furthermore, 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the user presses the month increment button again, it should read March 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 31, 1999, not March 28, 1999. By saving the original date and using either 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code add()} or {@code roll()}, depending on whether larger 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * fields should be affected, the user interface can behave as most users will 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * intuitively expect. 275f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <b>Note:</b> You should always use {@code roll} and {@code add} rather than 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * attempting to perform arithmetic operations directly on the fields of a 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <tt>Calendar</tt>. It is quite possible for <tt>Calendar</tt> subclasses 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to have fields with non-linear behavior, for example missing months or days 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * during non-leap years. The subclasses' <tt>add</tt> and <tt>roll</tt> 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * methods will take this into account, while simple arithmetic manipulations 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * may give invalid results. 284f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see Date 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see GregorianCalendar 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see TimeZone 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 28969bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughespublic abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar> { 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final long serialVersionUID = -1807547505821590642L; 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 29469bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * True iff the values in {@code fields[]} correspond to {@code time}. Despite the name, this 29569bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * is effectively "are the values in fields[] up-to-date?" --- {@code fields[]} may contain 29669bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * non-zero values and {@code isSet[]} may contain {@code true} values even when 29769bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * {@code areFieldsSet} is false. 29869bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * Accessing the fields via {@code get} will ensure the fields are up-to-date. 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected boolean areFieldsSet; 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 30369bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * Contains broken-down field values for the current value of {@code time} if 30469bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * {@code areFieldsSet} is true, or stale data corresponding to some previous value otherwise. 30569bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * Accessing the fields via {@code get} will ensure the fields are up-to-date. 30669bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * The array length is always {@code FIELD_COUNT}. 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected int[] fields; 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 31169bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * Whether the corresponding element in {@code field[]} has been set. Initially, these are all 31269bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * false. The first time the fields are computed, these are set to true and remain set even if 31369bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * the data becomes stale: you <i>must</i> check {@code areFieldsSet} if you want to know 31469bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * whether the value is up-to-date. 31569bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * Note that {@code isSet} is <i>not</i> a safe alternative to accessing this array directly, 31669bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * and will likewise return stale data! 31769bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * The array length is always {@code FIELD_COUNT}. 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected boolean[] isSet; 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 32269bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * Whether {@code time} corresponds to the values in {@code fields[]}. If false, {@code time} 32369bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * is out-of-date with respect to changes {@code fields[]}. 32469bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * Accessing the time via {@code getTimeInMillis} will always return the correct value. 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected boolean isTimeSet; 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 32969bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * A time in milliseconds since January 1, 1970. See {@code isTimeSet}. 33069bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * Accessing the time via {@code getTimeInMillis} will always return the correct value. 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected long time; 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project transient int lastTimeFieldSet; 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project transient int lastDateFieldSet; 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private boolean lenient; 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int firstDayOfWeek; 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int minimalDaysInFirstWeek; 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private TimeZone zone; 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code MONTH} field indicating the first month of the 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * year. 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int JANUARY = 0; 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code MONTH} field indicating the second month of 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the year. 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int FEBRUARY = 1; 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code MONTH} field indicating the third month of the 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * year. 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int MARCH = 2; 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code MONTH} field indicating the fourth month of 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the year. 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int APRIL = 3; 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code MONTH} field indicating the fifth month of the 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * year. 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int MAY = 4; 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code MONTH} field indicating the sixth month of the 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * year. 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int JUNE = 5; 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code MONTH} field indicating the seventh month of 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the year. 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int JULY = 6; 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code MONTH} field indicating the eighth month of 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the year. 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int AUGUST = 7; 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code MONTH} field indicating the ninth month of the 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * year. 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int SEPTEMBER = 8; 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code MONTH} field indicating the tenth month of the 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * year. 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int OCTOBER = 9; 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code MONTH} field indicating the eleventh month of 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the year. 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int NOVEMBER = 10; 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code MONTH} field indicating the twelfth month of 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the year. 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int DECEMBER = 11; 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code MONTH} field indicating the thirteenth month 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the year. Although {@code GregorianCalendar} does not use this 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value, lunar calendars do. 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int UNDECIMBER = 12; 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code DAY_OF_WEEK} field indicating Sunday. 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int SUNDAY = 1; 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code DAY_OF_WEEK} field indicating Monday. 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int MONDAY = 2; 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code DAY_OF_WEEK} field indicating Tuesday. 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int TUESDAY = 3; 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code DAY_OF_WEEK} field indicating Wednesday. 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int WEDNESDAY = 4; 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code DAY_OF_WEEK} field indicating Thursday. 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int THURSDAY = 5; 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code DAY_OF_WEEK} field indicating Friday. 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int FRIDAY = 6; 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code DAY_OF_WEEK} field indicating Saturday. 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int SATURDAY = 7; 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * era, e.g., AD or BC in the Julian calendar. This is a calendar-specific 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value; see subclass documentation. 464f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see GregorianCalendar#AD 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see GregorianCalendar#BC 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int ERA = 0; 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * year. This is a calendar-specific value; see subclass documentation. 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int YEAR = 1; 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * month. This is a calendar-specific value. The first month of the year is 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code JANUARY}; the last depends on the number of months in a 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * year. 481f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #JANUARY 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #FEBRUARY 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #MARCH 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #APRIL 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #MAY 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #JUNE 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #JULY 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #AUGUST 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #SEPTEMBER 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #OCTOBER 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #NOVEMBER 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #DECEMBER 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #UNDECIMBER 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int MONTH = 2; 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * week number within the current year. The first week of the year, as 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * defined by {@code getFirstDayOfWeek()} and 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code getMinimalDaysInFirstWeek()}, has value 1. Subclasses 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * define the value of {@code WEEK_OF_YEAR} for days before the first 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * week of the year. 505f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #getFirstDayOfWeek 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #getMinimalDaysInFirstWeek 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int WEEK_OF_YEAR = 3; 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * week number within the current month. The first week of the month, as 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * defined by {@code getFirstDayOfWeek()} and 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code getMinimalDaysInFirstWeek()}, has value 1. Subclasses 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * define the value of {@code WEEK_OF_MONTH} for days before the 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * first week of the month. 518f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #getFirstDayOfWeek 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #getMinimalDaysInFirstWeek 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int WEEK_OF_MONTH = 4; 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * day of the month. This is a synonym for {@code DAY_OF_MONTH}. The 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * first day of the month has value 1. 528f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #DAY_OF_MONTH 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int DATE = 5; 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * day of the month. This is a synonym for {@code DATE}. The first 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * day of the month has value 1. 537f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #DATE 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int DAY_OF_MONTH = 5; 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * day number within the current year. The first day of the year has value 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1. 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int DAY_OF_YEAR = 6; 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * day of the week. This field takes values {@code SUNDAY}, 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code MONDAY}, {@code TUESDAY}, {@code WEDNESDAY}, 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code THURSDAY}, {@code FRIDAY}, and 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code SATURDAY}. 555f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #SUNDAY 557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #MONDAY 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #TUESDAY 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #WEDNESDAY 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #THURSDAY 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #FRIDAY 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #SATURDAY 563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int DAY_OF_WEEK = 7; 565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ordinal number of the day of the week within the current month. Together 569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * with the {@code DAY_OF_WEEK} field, this uniquely specifies a day 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * within a month. Unlike {@code WEEK_OF_MONTH} and 571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code WEEK_OF_YEAR}, this field's value does <em>not</em> 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * depend on {@code getFirstDayOfWeek()} or 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code getMinimalDaysInFirstWeek()}. {@code DAY_OF_MONTH 1} 574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * through {@code 7} always correspond to <code>DAY_OF_WEEK_IN_MONTH 575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1</code>; 576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code 8} through {@code 15} correspond to 577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DAY_OF_WEEK_IN_MONTH 2}, and so on. 578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DAY_OF_WEEK_IN_MONTH 0} indicates the week before 579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DAY_OF_WEEK_IN_MONTH 1}. Negative values count back from 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the end of the month, so the last Sunday of a month is specified as 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1}. Because 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * negative values count backward they will usually be aligned differently 583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * within the month than positive values. For example, if a month has 31 584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * days, {@code DAY_OF_WEEK_IN_MONTH -1} will overlap 585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DAY_OF_WEEK_IN_MONTH 5} and the end of {@code 4}. 586f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #DAY_OF_WEEK 588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #WEEK_OF_MONTH 589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int DAY_OF_WEEK_IN_MONTH = 8; 591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating 594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * whether the {@code HOUR} is before or after noon. E.g., at 595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 10:04:15.250 PM the {@code AM_PM} is {@code PM}. 596f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #AM 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #PM 599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #HOUR 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int AM_PM = 9; 602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * hour of the morning or afternoon. {@code HOUR} is used for the 606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 12-hour clock. E.g., at 10:04:15.250 PM the {@code HOUR} is 10. 607f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #AM_PM 609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #HOUR_OF_DAY 610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int HOUR = 10; 612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * hour of the day. {@code HOUR_OF_DAY} is used for the 24-hour 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * clock. E.g., at 10:04:15.250 PM the {@code HOUR_OF_DAY} is 22. 617f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #HOUR 619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int HOUR_OF_DAY = 11; 621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * minute within the hour. E.g., at 10:04:15.250 PM the {@code MINUTE} 625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is 4. 626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int MINUTE = 12; 628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * second within the minute. E.g., at 10:04:15.250 PM the 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code SECOND} is 15. 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int SECOND = 13; 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * millisecond within the second. E.g., at 10:04:15.250 PM the 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code MILLISECOND} is 250. 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int MILLISECOND = 14; 642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 645fda7c027e360292edfa4d32fadd2844efaa5f9d7Elliott Hughes * raw (non-DST) offset from GMT in milliseconds. 646fda7c027e360292edfa4d32fadd2844efaa5f9d7Elliott Hughes * Equivalent to {@link java.util.TimeZone#getRawOffset}. 647fda7c027e360292edfa4d32fadd2844efaa5f9d7Elliott Hughes * 648fda7c027e360292edfa4d32fadd2844efaa5f9d7Elliott Hughes * <p>To determine the total offset from GMT at the time represented 649fda7c027e360292edfa4d32fadd2844efaa5f9d7Elliott Hughes * by this calendar, you will need to add the {@code ZONE_OFFSET} and 650fda7c027e360292edfa4d32fadd2844efaa5f9d7Elliott Hughes * {@code DST_OFFSET} fields. 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int ZONE_OFFSET = 15; 653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Field number for {@code get} and {@code set} indicating the 656fda7c027e360292edfa4d32fadd2844efaa5f9d7Elliott Hughes * daylight savings offset from the {@code ZONE_OFFSET} in milliseconds. 657fda7c027e360292edfa4d32fadd2844efaa5f9d7Elliott Hughes * Equivalent to {@link java.util.TimeZone#getDSTSavings} if the represented time 658fda7c027e360292edfa4d32fadd2844efaa5f9d7Elliott Hughes * falls inside DST, or 0 otherwise. 659fda7c027e360292edfa4d32fadd2844efaa5f9d7Elliott Hughes * 660fda7c027e360292edfa4d32fadd2844efaa5f9d7Elliott Hughes * <p>To determine the total offset from GMT at the time represented 661fda7c027e360292edfa4d32fadd2844efaa5f9d7Elliott Hughes * by this calendar, you will need to add the {@code ZONE_OFFSET} and 662fda7c027e360292edfa4d32fadd2844efaa5f9d7Elliott Hughes * {@code DST_OFFSET} fields. 663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int DST_OFFSET = 16; 665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This is the total number of fields in this calendar. 668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int FIELD_COUNT = 17; 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code AM_PM} field indicating the period of the day 673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * from midnight to just before noon. 674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int AM = 0; 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Value of the {@code AM_PM} field indicating the period of the day 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * from noon to just before midnight. 680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int PM = 1; 682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 6832e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes /** 6842e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * Requests both {@code SHORT} and {@code LONG} styles in the map returned by 685bf87c56b39383f6b11c36c3cdc93df4b03fed914Brian Carlstrom * {@link #getDisplayNames}. 6862e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @since 1.6 6872e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes */ 6882e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes public static final int ALL_STYLES = 0; 6892e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes 6902e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes /** 6912e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * Requests short names (such as "Jan") from 692bf87c56b39383f6b11c36c3cdc93df4b03fed914Brian Carlstrom * {@link #getDisplayName} or {@link #getDisplayNames}. 6932e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @since 1.6 6942e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes */ 6952e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes public static final int SHORT = 1; 6962e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes 6972e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes /** 6982e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * Requests long names (such as "January") from 699bf87c56b39383f6b11c36c3cdc93df4b03fed914Brian Carlstrom * {@link #getDisplayName} or {@link #getDisplayNames}. 7002e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @since 1.6 7012e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes */ 7022e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes public static final int LONG = 2; 7032e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes 7042e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes private static final String[] FIELD_NAMES = { "ERA", "YEAR", "MONTH", 7052e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes "WEEK_OF_YEAR", "WEEK_OF_MONTH", "DAY_OF_MONTH", "DAY_OF_YEAR", 7062e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes "DAY_OF_WEEK", "DAY_OF_WEEK_IN_MONTH", "AM_PM", "HOUR", 7072e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes "HOUR_OF_DAY", "MINUTE", "SECOND", "MILLISECOND", 7082e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes "ZONE_OFFSET", "DST_OFFSET" }; 709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a {@code Calendar} instance using the default {@code TimeZone} and {@code Locale}. 712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected Calendar() { 714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(TimeZone.getDefault(), Locale.getDefault()); 715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Calendar(TimeZone timezone) { 718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fields = new int[FIELD_COUNT]; 719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project isSet = new boolean[FIELD_COUNT]; 720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project areFieldsSet = isTimeSet = false; 721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setLenient(true); 722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setTimeZone(timezone); 723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 726e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Constructs a {@code Calendar} instance using the given {@code TimeZone} and {@code Locale}. 727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected Calendar(TimeZone timezone, Locale locale) { 729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(timezone); 730148de94b69ad9ed98ebb1adf0e8eb1b1e9e33e1fNarayan Kamath locale = LocaleData.mapInvalidAndNullLocales(locale); 731757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes LocaleData localeData = LocaleData.get(locale); 73233aa6eb602478e7f51ac16f30c88db3566022886Elliott Hughes setFirstDayOfWeek(localeData.firstDayOfWeek.intValue()); 73333aa6eb602478e7f51ac16f30c88db3566022886Elliott Hughes setMinimalDaysInFirstWeek(localeData.minimalDaysInFirstWeek.intValue()); 734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 736f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 738e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Adds the given amount to a {@code Calendar} field. 739f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param field 741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code Calendar} field to modify. 742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the amount to add to the field. 744f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 745f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if {@code field} is {@code DST_OFFSET} or {@code 746f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * ZONE_OFFSET}. 747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 748d29fddcf333997fc2d7429d531e4d934dc705c88Jesse Wilson public abstract void add(int field, int value); 749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 751e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Returns whether the {@code Date} represented by this {@code Calendar} instance is after the {@code Date} 752e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * represented by the parameter. The comparison is not dependent on the time 753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * zones of the {@code Calendar}. 754f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param calendar 756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code Calendar} instance to compare. 757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} when this Calendar is after calendar, {@code false} otherwise. 758f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 759f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the time is not set and the time cannot be computed 760f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * from the current field values. 761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean after(Object calendar) { 763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(calendar instanceof Calendar)) { 764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getTimeInMillis() > ((Calendar) calendar).getTimeInMillis(); 767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 770e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Returns whether the {@code Date} represented by this {@code Calendar} instance is before the 771e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * {@code Date} represented by the parameter. The comparison is not dependent on the 772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * time zones of the {@code Calendar}. 773f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param calendar 775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code Calendar} instance to compare. 776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} when this Calendar is before calendar, {@code false} otherwise. 777f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 778f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the time is not set and the time cannot be computed 779f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * from the current field values. 780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean before(Object calendar) { 782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(calendar instanceof Calendar)) { 783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getTimeInMillis() < ((Calendar) calendar).getTimeInMillis(); 786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 789afc18db553293a12f7a04bd04c7d028dbb3de2f6Elliott Hughes * Clears the values of all the time fields, marking them all unset and assigning 790afc18db553293a12f7a04bd04c7d028dbb3de2f6Elliott Hughes * them all a value of zero. The actual field values will be determined the next 791afc18db553293a12f7a04bd04c7d028dbb3de2f6Elliott Hughes * time the fields are accessed. 792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void clear() { 794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < FIELD_COUNT; i++) { 795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fields[i] = 0; 796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project isSet[i] = false; 797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project areFieldsSet = isTimeSet = false; 799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 802afc18db553293a12f7a04bd04c7d028dbb3de2f6Elliott Hughes * Clears the value in the given time field, marking it unset and assigning 803afc18db553293a12f7a04bd04c7d028dbb3de2f6Elliott Hughes * it a value of zero. The actual field value will be determined the next 804afc18db553293a12f7a04bd04c7d028dbb3de2f6Elliott Hughes * time the field is accessed. 805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void clear(int field) { 807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fields[field] = 0; 808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project isSet[field] = false; 809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project areFieldsSet = isTimeSet = false; 810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 81377ef2926d20998349254632052228bd456f82ed4Narayan Kamath * Returns a partially deep copy of this {@code Calendar}; all fields from 81477ef2926d20998349254632052228bd456f82ed4Narayan Kamath * from the {@code Calendar} class are cloned (deep copy) but fields from 81577ef2926d20998349254632052228bd456f82ed4Narayan Kamath * subclasses aren't (shallow copy). 816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object clone() { 819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Calendar clone = (Calendar) super.clone(); 821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project clone.fields = fields.clone(); 822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project clone.isSet = isSet.clone(); 823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project clone.zone = (TimeZone) zone.clone(); 824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return clone; 825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CloneNotSupportedException e) { 826fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes throw new AssertionError(e); 827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Computes the time from the fields if the time has not already been set. 832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Computes the fields from the time if the fields are not already set. 833f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 834f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 835f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the time is not set and the time cannot be computed 836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * from the current field values. 837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void complete() { 839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!isTimeSet) { 840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project computeTime(); 841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project isTimeSet = true; 842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!areFieldsSet) { 844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project computeFields(); 845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project areFieldsSet = true; 846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Computes the {@code Calendar} fields from {@code time}. 851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract void computeFields(); 853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Computes {@code time} from the Calendar fields. 856f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 857f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 858f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the time cannot be computed from the current field 859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * values. 860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected abstract void computeTime(); 862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 864e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Compares the given object to this {@code Calendar} and returns whether they are 865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * equal. The object must be an instance of {@code Calendar} and have the same 866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * properties. 867f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 868e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * @return {@code true} if the given object is equal to this {@code Calendar}, {@code false} 869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean equals(Object object) { 873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this == object) { 874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(object instanceof Calendar)) { 877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Calendar cal = (Calendar) object; 880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getTimeInMillis() == cal.getTimeInMillis() 881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && isLenient() == cal.isLenient() 882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && getFirstDayOfWeek() == cal.getFirstDayOfWeek() 8831baa4fcbfe3c22e5f06a4fee48f520162d23270fJesse Wilson && getMinimalDaysInFirstWeek() == cal.getMinimalDaysInFirstWeek() 884adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && getTimeZone().equals(cal.getTimeZone()); 885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 888e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Returns the value of the given field after computing the field values by 889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * calling {@code complete()} first. 890f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 891f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 892f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the fields are not set, the time is not set, and the 893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * time cannot be computed from the current field values. 894f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the field is not inside the range of possible fields. 896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The range is starting at 0 up to {@code FIELD_COUNT}. 897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int get(int field) { 899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project complete(); 900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return fields[field]; 901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 904e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Returns the maximum value of the given field for the current date. 9051baa4fcbfe3c22e5f06a4fee48f520162d23270fJesse Wilson * For example, the maximum number of days in the current month. 906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getActualMaximum(int field) { 908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int value, next; 909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (getMaximum(field) == (next = getLeastMaximum(field))) { 910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return next; 911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project complete(); 913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project long orgTime = time; 914adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project set(field, next); 915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project do { 916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project value = next; 917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project roll(field, true); 918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project next = get(field); 919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } while (next > value); 920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project time = orgTime; 921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project areFieldsSet = false; 922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return value; 923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 926e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Returns the minimum value of the given field for the current date. 927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getActualMinimum(int field) { 929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int value, next; 930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (getMinimum(field) == (next = getGreatestMinimum(field))) { 931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return next; 932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project complete(); 934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project long orgTime = time; 935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project set(field, next); 936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project do { 937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project value = next; 938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project roll(field, false); 939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project next = get(field); 940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } while (next < value); 941adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project time = orgTime; 942adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project areFieldsSet = false; 943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return value; 944adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 94793f0d794f264baeb7a90d02e58cae60305b3912aElliott Hughes * Returns an array of locales for which custom {@code Calendar} instances 94893f0d794f264baeb7a90d02e58cae60305b3912aElliott Hughes * are available. 949d2d7abef3e9b73a57cdf1f2afd678d7f48945679Elliott Hughes * <p>Note that Android does not support user-supplied locale service providers. 950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 951adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static synchronized Locale[] getAvailableLocales() { 952757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes return ICU.getAvailableCalendarLocales(); 953adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 956e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Returns the first day of the week for this {@code Calendar}. 957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getFirstDayOfWeek() { 959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return firstDayOfWeek; 960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 962adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 963e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Returns the greatest minimum value of the given field. This is the 964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * biggest value that {@code getActualMinimum} can return for any possible 965adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * time. 966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 967d29fddcf333997fc2d7429d531e4d934dc705c88Jesse Wilson public abstract int getGreatestMinimum(int field); 968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new instance of the {@code Calendar} subclass appropriate for the 971e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * default {@code Locale} and default {@code TimeZone}, set to the current date and time. 972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static synchronized Calendar getInstance() { 974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new GregorianCalendar(); 975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 976adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new instance of the {@code Calendar} subclass appropriate for the 979e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * given {@code Locale} and default {@code TimeZone}, set to the current date and time. 980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 981adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static synchronized Calendar getInstance(Locale locale) { 982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new GregorianCalendar(locale); 983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 986adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new instance of the {@code Calendar} subclass appropriate for the 987e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * default {@code Locale} and given {@code TimeZone}, set to the current date and time. 988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 989adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static synchronized Calendar getInstance(TimeZone timezone) { 990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new GregorianCalendar(timezone); 991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 994adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new instance of the {@code Calendar} subclass appropriate for the 995e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * given {@code Locale} and given {@code TimeZone}, set to the current date and time. 996adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 99732d2e33dabd6767913e275a62c456f8fe4e5131fElliott Hughes public static synchronized Calendar getInstance(TimeZone timezone, Locale locale) { 998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new GregorianCalendar(timezone, locale); 999adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1000adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1001adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1002e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Returns the smallest maximum value of the given field. This is the 1003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * smallest value that {@code getActualMaximum()} can return for any 1004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * possible time. 1005adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1006d29fddcf333997fc2d7429d531e4d934dc705c88Jesse Wilson public abstract int getLeastMaximum(int field); 1007adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1008adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1009e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Returns the greatest maximum value of the given field. This returns the 1010e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * biggest value that {@code get} can return for the given field. 1011adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1012d29fddcf333997fc2d7429d531e4d934dc705c88Jesse Wilson public abstract int getMaximum(int field); 1013adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1014adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1015e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Returns the minimal days in the first week of the year. 1016adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1017adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getMinimalDaysInFirstWeek() { 1018adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return minimalDaysInFirstWeek; 1019adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1020adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1021adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1022e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Returns the smallest minimum value of the given field. this returns the 1023e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * smallest value that {@code get} can return for the given field. 1024adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1025d29fddcf333997fc2d7429d531e4d934dc705c88Jesse Wilson public abstract int getMinimum(int field); 1026adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1027adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1028e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Returns the time of this {@code Calendar} as a {@code Date} object. 1029f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1030f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 1031f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the time is not set and the time cannot be computed 1032adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * from the current field values. 1033adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1034adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final Date getTime() { 1035adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new Date(getTimeInMillis()); 1036adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1037adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1038adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1039e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Returns the time represented by this {@code Calendar}, recomputing the time from its 1040e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * fields if necessary. 1041f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1042f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 1043f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * if the time is not set and the time cannot be computed 1044adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * from the current field values. 1045adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1046adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long getTimeInMillis() { 1047adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!isTimeSet) { 1048adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project computeTime(); 1049adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project isTimeSet = true; 1050adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1051adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return time; 1052adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1053adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1054adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1055e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Returns the time zone used by this {@code Calendar}. 1056adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1057adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public TimeZone getTimeZone() { 1058adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return zone; 1059adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1060adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1061adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 1062adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int hashCode() { 1063adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return (isLenient() ? 1237 : 1231) + getFirstDayOfWeek() 1064adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + getMinimalDaysInFirstWeek() + getTimeZone().hashCode(); 1065adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1066adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1067adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1068e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Returns the value of the given field without recomputing. 1069adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1070adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected final int internalGet(int field) { 1071adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return fields[field]; 1072adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1073adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1074adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1075e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Tests whether this {@code Calendar} accepts field values which are outside the valid 1076adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * range for the field. 1077adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1078adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isLenient() { 1079adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return lenient; 1080adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1081adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1082adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1083e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Tests whether the given field is set. Note that the interpretation of "is set" is 108469bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * somewhat technical. In particular, it does <i>not</i> mean that the field's value is up 108569bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * to date. If you want to know whether a field contains an up-to-date value, you must also 108669bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * check {@code areFieldsSet}, making this method somewhat useless unless you're a subclass, 108769bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * in which case you can access the {@code isSet} array directly. 108869bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * <p> 108969bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * A field remains "set" from the first time its value is computed until it's cleared by one 109069bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * of the {@code clear} methods. Thus "set" does not mean "valid". You probably want to call 109169bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * {@code get} -- which will update fields as necessary -- rather than try to make use of 109269bcb487b7317dde579a8ddc1a8094040ed7ae2bElliott Hughes * this method. 1093adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1094adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final boolean isSet(int field) { 1095adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return isSet[field]; 1096adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1097adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1098adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1099e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Adds the given amount to the given field and wraps the value of 1100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the field when it goes beyond the maximum or minimum value for the 1101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * current date. Other fields will be adjusted as required to maintain a 1102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * consistent date. 1103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void roll(int field, int value) { 1105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean increment = value >= 0; 1106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int count = increment ? value : -value; 1107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < count; i++) { 1108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project roll(field, increment); 1109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1113e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Increment or decrement the given field and wrap the value of the 1114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * field when it goes beyond the maximum or minimum value for the current 1115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * date. Other fields will be adjusted as required to maintain a consistent 1116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * date. 1117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1118d29fddcf333997fc2d7429d531e4d934dc705c88Jesse Wilson public abstract void roll(int field, boolean increment); 1119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1121e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Sets the given field to the given value. 1122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void set(int field, int value) { 1124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fields[field] = value; 1125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project isSet[field] = true; 1126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project areFieldsSet = isTimeSet = false; 1127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (field > MONTH && field < AM_PM) { 1128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project lastDateFieldSet = field; 1129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (field == HOUR || field == HOUR_OF_DAY) { 1131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project lastTimeFieldSet = field; 1132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (field == AM_PM) { 1134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project lastTimeFieldSet = HOUR; 1135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1139e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Sets the year, month, and day of the month fields. 1140e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Other fields are not changed; call {@link #clear} first if this is not desired. 1141e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * The month value is 0-based, so it may be clearer to use a constant like {@code JANUARY}. 1142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void set(int year, int month, int day) { 1144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project set(YEAR, year); 1145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project set(MONTH, month); 1146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project set(DATE, day); 1147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1150e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Sets the year, month, day of the month, hour of day, and minute fields. 1151e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Other fields are not changed; call {@link #clear} first if this is not desired. 1152e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * The month value is 0-based, so it may be clearer to use a constant like {@code JANUARY}. 1153e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes */ 1154e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes public final void set(int year, int month, int day, int hourOfDay, int minute) { 1155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project set(year, month, day); 1156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project set(HOUR_OF_DAY, hourOfDay); 1157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project set(MINUTE, minute); 1158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1161e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Sets the year, month, day of the month, hour of day, minute, and second fields. 1162e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Other fields are not changed; call {@link #clear} first if this is not desired. 1163e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * The month value is 0-based, so it may be clearer to use a constant like {@code JANUARY}. 1164e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes */ 1165e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes public final void set(int year, int month, int day, int hourOfDay, int minute, int second) { 1166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project set(year, month, day, hourOfDay, minute); 1167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project set(SECOND, second); 1168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the first day of the week for this {@code Calendar}. 1172e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * The value should be a day of the week such as {@code MONDAY}. 1173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setFirstDayOfWeek(int value) { 1175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project firstDayOfWeek = value; 1176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1179e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Sets whether this {@code Calendar} accepts field values which are outside the valid 1180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * range for the field. 1181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setLenient(boolean value) { 1183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project lenient = value; 1184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the minimal days in the first week of the year. 1188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setMinimalDaysInFirstWeek(int value) { 1190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project minimalDaysInFirstWeek = value; 1191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the time of this {@code Calendar}. 1195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void setTime(Date date) { 1197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setTimeInMillis(date.getTime()); 1198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1201e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Sets the time of this {@code Calendar} to the given Unix time. See {@link Date} for more 1202e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * about what this means. 1203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setTimeInMillis(long milliseconds) { 1205f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson if (!isTimeSet || !areFieldsSet || time != milliseconds) { 1206f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson time = milliseconds; 1207f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson isTimeSet = true; 1208f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson areFieldsSet = false; 1209f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson complete(); 1210f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson } 1211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the {@code TimeZone} used by this Calendar. 1215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setTimeZone(TimeZone timezone) { 1217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project zone = timezone; 1218f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson areFieldsSet = false; 1219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1222e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Returns a string representation of this {@code Calendar}, showing which fields are set. 1223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 1225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toString() { 1226e4a533f2e6b22bd6183285c96d7907a97389240bElliott Hughes StringBuilder result = new StringBuilder(getClass().getName() + 1227e4a533f2e6b22bd6183285c96d7907a97389240bElliott Hughes "[time=" + (isTimeSet ? String.valueOf(time) : "?") + 1228e4a533f2e6b22bd6183285c96d7907a97389240bElliott Hughes ",areFieldsSet=" + areFieldsSet + 1229e4a533f2e6b22bd6183285c96d7907a97389240bElliott Hughes ",lenient=" + lenient + 1230e4a533f2e6b22bd6183285c96d7907a97389240bElliott Hughes ",zone=" + zone.getID() + 1231e4a533f2e6b22bd6183285c96d7907a97389240bElliott Hughes ",firstDayOfWeek=" + firstDayOfWeek + 1232e4a533f2e6b22bd6183285c96d7907a97389240bElliott Hughes ",minimalDaysInFirstWeek=" + minimalDaysInFirstWeek); 1233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < FIELD_COUNT; i++) { 1234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.append(','); 12352e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes result.append(FIELD_NAMES[i]); 1236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.append('='); 1237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (isSet[i]) { 1238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.append(fields[i]); 1239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 1240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.append('?'); 1241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.append(']'); 1244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result.toString(); 1245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1248e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * Compares the time represented by this {@code Calendar} to that represented by the given 1249e040b50765cafb84783245ed959b1f5b6ded8de4Elliott Hughes * {@code Calendar}. 1250f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return 0 if the times of the two {@code Calendar}s are equal, -1 if the time of 1252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this {@code Calendar} is before the other one, 1 if the time of this 1253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Calendar} is after the other one. 1254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 1255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the argument is null. 1256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 1257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the argument does not include a valid time 1258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value. 1259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int compareTo(Calendar anotherCalendar) { 1261b46dab348e2007bc08abaf7ecae34d89a2474e50Elliott Hughes if (anotherCalendar == null) { 126286acc043d3334651ee26c65467d78d6cefedd397Kenny Root throw new NullPointerException("anotherCalendar == null"); 1263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project long timeInMillis = getTimeInMillis(); 1265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project long anotherTimeInMillis = anotherCalendar.getTimeInMillis(); 1266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (timeInMillis > anotherTimeInMillis) { 1267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 1; 1268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (timeInMillis == anotherTimeInMillis) { 1270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 1271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return -1; 1273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 12752e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes /** 12762e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * Returns a human-readable string for the value of {@code field} 12772e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * using the given style and locale. If no string is available, returns null. 12782e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * The value is retrieved by invoking {@code get(field)}. 1279f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 12802e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * <p>For example, {@code getDisplayName(MONTH, SHORT, Locale.US)} will return "Jan" 12812e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * while {@code getDisplayName(MONTH, LONG, Locale.US)} will return "January". 1282f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 12832e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @param field the field 12842e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @param style {@code SHORT} or {@code LONG} 12852e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @param locale the locale 12862e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @return the display name, or null 12872e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @throws NullPointerException if {@code locale == null} 12882e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @throws IllegalArgumentException if {@code field} or {@code style} is invalid 12892e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @since 1.6 12902e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes */ 12912e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes public String getDisplayName(int field, int style, Locale locale) { 12922e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes // TODO: the RI's documentation says ALL_STYLES is invalid, but actually treats it as SHORT. 12932e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes if (style == ALL_STYLES) { 12942e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes style = SHORT; 12952e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes } 12962e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes String[] array = getDisplayNameArray(field, style, locale); 12972e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes int value = get(field); 12982e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes return (array != null) ? array[value] : null; 12992e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes } 13002e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes 13012e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes private String[] getDisplayNameArray(int field, int style, Locale locale) { 13022e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes if (field < 0 || field >= FIELD_COUNT) { 13032e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes throw new IllegalArgumentException("bad field " + field); 13042e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes } 13052e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes checkStyle(style); 13062e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes DateFormatSymbols dfs = DateFormatSymbols.getInstance(locale); 13072e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes switch (field) { 13082e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes case AM_PM: 13092e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes return dfs.getAmPmStrings(); 13102e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes case DAY_OF_WEEK: 13112e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes return (style == LONG) ? dfs.getWeekdays() : dfs.getShortWeekdays(); 13122e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes case ERA: 13132e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes return dfs.getEras(); 13142e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes case MONTH: 13152e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes return (style == LONG) ? dfs.getMonths() : dfs.getShortMonths(); 13162e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes } 13172e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes return null; 13182e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes } 13192e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes 13202e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes private static void checkStyle(int style) { 13212e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes if (style != ALL_STYLES && style != SHORT && style != LONG) { 13222e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes throw new IllegalArgumentException("bad style " + style); 13232e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes } 13242e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes } 13252e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes 13262e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes /** 13272e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * Returns a map of human-readable strings to corresponding values, 13282e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * for the given field, style, and locale. 13292e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * Returns null if no strings are available. 1330f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 13312e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * <p>For example, {@code getDisplayNames(MONTH, ALL_STYLES, Locale.US)} would 1332bf87c56b39383f6b11c36c3cdc93df4b03fed914Brian Carlstrom * contain mappings from "Jan" and "January" to {@link #JANUARY}, and so on. 1333f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 13342e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @param field the field 13352e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @param style {@code SHORT}, {@code LONG}, or {@code ALL_STYLES} 13362e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @param locale the locale 13372e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @return the display name, or null 13382e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @throws NullPointerException if {@code locale == null} 13392e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @throws IllegalArgumentException if {@code field} or {@code style} is invalid 13402e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes * @since 1.6 13412e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes */ 13422e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes public Map<String, Integer> getDisplayNames(int field, int style, Locale locale) { 13432e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes checkStyle(style); 13442e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes complete(); 13452e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes Map<String, Integer> result = new HashMap<String, Integer>(); 13462e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes if (style == SHORT || style == ALL_STYLES) { 13472e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes insertValuesInMap(result, getDisplayNameArray(field, SHORT, locale)); 13482e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes } 13492e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes if (style == LONG || style == ALL_STYLES) { 13502e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes insertValuesInMap(result, getDisplayNameArray(field, LONG, locale)); 13512e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes } 13522e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes return result.isEmpty() ? null : result; 13532e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes } 13542e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes 13552e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes private static void insertValuesInMap(Map<String, Integer> map, String[] values) { 13562e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes if (values == null) { 13572e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes return; 13582e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes } 13592e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes for (int i = 0; i < values.length; ++i) { 13602e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes if (values[i] != null && !values[i].isEmpty()) { 13612e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes map.put(values[i], i); 13622e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes } 13632e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes } 13642e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes } 13652e43b95339579a2ea8b749d7598677bb44f2770fElliott Hughes 1366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final ObjectStreamField[] serialPersistentFields = { 1367e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("areFieldsSet", boolean.class), 136828eb98ecd43c27702e85b0561e040e2da10320a6Elliott Hughes new ObjectStreamField("fields", int[].class), 1369e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("firstDayOfWeek", int.class), 137028eb98ecd43c27702e85b0561e040e2da10320a6Elliott Hughes new ObjectStreamField("isSet", boolean[].class), 1371e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("isTimeSet", boolean.class), 1372e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("lenient", boolean.class), 1373e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("minimalDaysInFirstWeek", int.class), 1374e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("nextStamp", int.class), 1375e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("serialVersionOnStream", int.class), 1376e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes new ObjectStreamField("time", long.class), 137728eb98ecd43c27702e85b0561e040e2da10320a6Elliott Hughes new ObjectStreamField("zone", TimeZone.class), 137828eb98ecd43c27702e85b0561e040e2da10320a6Elliott Hughes }; 1379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void writeObject(ObjectOutputStream stream) throws IOException { 1381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project complete(); 1382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ObjectOutputStream.PutField putFields = stream.putFields(); 1383f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes putFields.put("areFieldsSet", areFieldsSet); 1384f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes putFields.put("fields", this.fields); 1385f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes putFields.put("firstDayOfWeek", firstDayOfWeek); 1386f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes putFields.put("isSet", isSet); 1387f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes putFields.put("isTimeSet", isTimeSet); 1388f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes putFields.put("lenient", lenient); 1389f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes putFields.put("minimalDaysInFirstWeek", minimalDaysInFirstWeek); 1390f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes putFields.put("nextStamp", 2 /* MINIMUM_USER_STAMP */); 1391f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes putFields.put("serialVersionOnStream", 1); 1392f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes putFields.put("time", time); 1393f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes putFields.put("zone", zone); 1394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stream.writeFields(); 1395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 13971c4b8eb0aebfe7f99c10fb1d01716946e8e74ad7Elliott Hughes private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { 1398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ObjectInputStream.GetField readFields = stream.readFields(); 1399f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes areFieldsSet = readFields.get("areFieldsSet", false); 1400f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes this.fields = (int[]) readFields.get("fields", null); 1401f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes firstDayOfWeek = readFields.get("firstDayOfWeek", Calendar.SUNDAY); 1402f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes isSet = (boolean[]) readFields.get("isSet", null); 1403f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes isTimeSet = readFields.get("isTimeSet", false); 1404f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes lenient = readFields.get("lenient", true); 1405f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes minimalDaysInFirstWeek = readFields.get("minimalDaysInFirstWeek", 1); 1406f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes time = readFields.get("time", 0L); 1407f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes zone = (TimeZone) readFields.get("zone", null); 1408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 1410