DateFormat.java revision e4f01dff49442840faa828dcff0d1583a2e68530
1f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/*
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
8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
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.text;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InvalidObjectException;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Calendar;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Date;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Hashtable;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Locale;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.TimeZone;
26162b0775772fa66b7eb634760a8159a60c1ddceaElliott Hughesimport libcore.icu.ICU;
27162b0775772fa66b7eb634760a8159a60c1ddceaElliott Hughesimport libcore.icu.LocaleData;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
30b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * Formats or parses dates and times.
319b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson *
32b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * <p>This class provides factories for obtaining instances configured for a specific locale.
33b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * The most common subclass is {@link SimpleDateFormat}.
349b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson *
35b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * <h4>Sample Code</h4>
36b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * <p>This code:
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre>
38b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * DateFormat[] formats = new DateFormat[] {
39b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes *   DateFormat.getDateInstance(),
40b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes *   DateFormat.getDateTimeInstance(),
41b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes *   DateFormat.getTimeInstance(),
42b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * };
43b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * for (DateFormat df : formats) {
44b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes *   System.out.println(df.format(new Date(0)));
45b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes *   df.setTimeZone(TimeZone.getTimeZone("UTC"));
46b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes *   System.out.println(df.format(new Date(0)));
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * }
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre>
499b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson *
50b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * <p>Produces this output when run on an {@code en_US} device in the America/Los_Angeles time zone:
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre>
52b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * Dec 31, 1969
53b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * Jan 1, 1970
54b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * Dec 31, 1969 4:00:00 PM
55b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * Jan 1, 1970 12:00:00 AM
56b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * 4:00:00 PM
57b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * 12:00:00 AM
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre>
59b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * And will produce similarly appropriate localized human-readable output on any user's system.
60b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * Notice how the same point in time when formatted can appear to be a different time when rendered
61b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * for a different time zone. This is one reason why formatting should be left until the data will
62b98632738dfc72ba32ae0160eada03a97a303288Elliott Hughes * only be presented to a human. Machines should interchange "Unix time" integers.
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class DateFormat extends Format {
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final long serialVersionUID = 7218322306649953788L;
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The calendar that this {@code DateFormat} uses to format a number
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * representing a date.
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected Calendar calendar;
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The number format used to format a number.
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected NumberFormat numberFormat;
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The format style constant defining the default format style. The default
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * is MEDIUM.
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
830d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int DEFAULT = 2;
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The format style constant defining the full style.
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
880d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int FULL = 0;
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The format style constant defining the long style.
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
930d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int LONG = 1;
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The format style constant defining the medium style.
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
980d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int MEDIUM = 2;
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The format style constant defining the short style.
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1030d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int SHORT = 3;
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The {@code FieldPosition} selector for 'G' field alignment, corresponds
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * to the {@link Calendar#ERA} field.
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1090d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int ERA_FIELD = 0;
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The {@code FieldPosition} selector for 'y' field alignment, corresponds
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * to the {@link Calendar#YEAR} field.
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1150d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int YEAR_FIELD = 1;
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The {@code FieldPosition} selector for 'M' field alignment, corresponds
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * to the {@link Calendar#MONTH} field.
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1210d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int MONTH_FIELD = 2;
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The {@code FieldPosition} selector for 'd' field alignment, corresponds
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * to the {@link Calendar#DATE} field.
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1270d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int DATE_FIELD = 3;
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The {@code FieldPosition} selector for 'k' field alignment, corresponds
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * to the {@link Calendar#HOUR_OF_DAY} field. {@code HOUR_OF_DAY1_FIELD} is
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * used for the one-based 24-hour clock. For example, 23:59 + 01:00 results
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * in 24:59.
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1350d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int HOUR_OF_DAY1_FIELD = 4;
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The {@code FieldPosition} selector for 'H' field alignment, corresponds
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * to the {@link Calendar#HOUR_OF_DAY} field. {@code HOUR_OF_DAY0_FIELD} is
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * used for the zero-based 24-hour clock. For example, 23:59 + 01:00 results
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * in 00:59.
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1430d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int HOUR_OF_DAY0_FIELD = 5;
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'm' field alignment, corresponds to the
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#MINUTE} field.
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1490d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int MINUTE_FIELD = 6;
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 's' field alignment, corresponds to the
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#SECOND} field.
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1550d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int SECOND_FIELD = 7;
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'S' field alignment, corresponds to the
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#MILLISECOND} field.
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1610d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int MILLISECOND_FIELD = 8;
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'E' field alignment, corresponds to the
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#DAY_OF_WEEK} field.
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1670d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int DAY_OF_WEEK_FIELD = 9;
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'D' field alignment, corresponds to the
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#DAY_OF_YEAR} field.
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1730d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int DAY_OF_YEAR_FIELD = 10;
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'F' field alignment, corresponds to the
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#DAY_OF_WEEK_IN_MONTH} field.
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1790d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int DAY_OF_WEEK_IN_MONTH_FIELD = 11;
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'w' field alignment, corresponds to the
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#WEEK_OF_YEAR} field.
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1850d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int WEEK_OF_YEAR_FIELD = 12;
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'W' field alignment, corresponds to the
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#WEEK_OF_MONTH} field.
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1910d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int WEEK_OF_MONTH_FIELD = 13;
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'a' field alignment, corresponds to the
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#AM_PM} field.
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1970d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int AM_PM_FIELD = 14;
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'h' field alignment, corresponding to the
201143e8c9cf91cfc01c3c91c8e93cad661ec7554eeElliott Hughes     * {@link Calendar#HOUR} field.
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2030d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int HOUR1_FIELD = 15;
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
206143e8c9cf91cfc01c3c91c8e93cad661ec7554eeElliott Hughes     * The {@code FieldPosition} selector for 'K' field alignment, corresponding to the
207143e8c9cf91cfc01c3c91c8e93cad661ec7554eeElliott Hughes     * {@link Calendar#HOUR} field.
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2090d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int HOUR0_FIELD = 16;
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The {@code FieldPosition} selector for 'z' field alignment, corresponds
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * to the {@link Calendar#ZONE_OFFSET} and {@link Calendar#DST_OFFSET}
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * fields.
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2160d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final int TIMEZONE_FIELD = 17;
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructs a new instance of {@code DateFormat}.
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected DateFormat() {
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a new instance of {@code DateFormat} with the same properties.
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Object clone() {
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DateFormat clone = (DateFormat) super.clone();
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        clone.calendar = (Calendar) calendar.clone();
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        clone.numberFormat = (NumberFormat) numberFormat.clone();
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return clone;
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Compares this date format with the specified object and indicates if they
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * are equal.
238f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param object
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the object to compare with this date format.
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if {@code object} is a {@code DateFormat} object and
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         it has the same properties as this date format; {@code false}
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         otherwise.
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @see #hashCode
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean equals(Object object) {
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (this == object) {
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return true;
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!(object instanceof DateFormat)) {
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DateFormat dateFormat = (DateFormat) object;
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return numberFormat.equals(dateFormat.numberFormat)
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && calendar.getTimeZone().equals(
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        dateFormat.calendar.getTimeZone())
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && calendar.getFirstDayOfWeek() == dateFormat.calendar
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .getFirstDayOfWeek()
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && calendar.getMinimalDaysInFirstWeek() == dateFormat.calendar
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .getMinimalDaysInFirstWeek()
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && calendar.isLenient() == dateFormat.calendar.isLenient();
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Formats the specified object as a string using the pattern of this date
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * format and appends the string to the specified string buffer.
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If the {@code field} member of {@code field} contains a value specifying
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * a format field, then its {@code beginIndex} and {@code endIndex} members
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * will be updated with the position of the first occurrence of this field
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * in the formatted text.
2739b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     *
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param object
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source object to format, must be a {@code Date} or a
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code Number}. If {@code object} is a number then a date is
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            constructed using the {@code longValue()} of the number.
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param buffer
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the target string buffer to append the formatted date/time to.
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param field
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            on input: an optional alignment field; on output: the offsets
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            of the alignment field in the formatted text.
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the string buffer.
2849b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     * @throws IllegalArgumentException
2859b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     *            if {@code object} is neither a {@code Date} nor a
2869b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     *            {@code Number} instance.
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
289cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes    public final StringBuffer format(Object object, StringBuffer buffer, FieldPosition field) {
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (object instanceof Date) {
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return format((Date) object, buffer, field);
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (object instanceof Number) {
294cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes            return format(new Date(((Number) object).longValue()), buffer, field);
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
296cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes        throw new IllegalArgumentException("Bad class: " + object.getClass());
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Formats the specified date using the rules of this date format.
301f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param date
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the date to format.
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the formatted string.
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final String format(Date date) {
307cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes        return format(date, new StringBuffer(), new FieldPosition(0)).toString();
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Formats the specified date as a string using the pattern of this date
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * format and appends the string to the specified string buffer.
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If the {@code field} member of {@code field} contains a value specifying
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * a format field, then its {@code beginIndex} and {@code endIndex} members
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * will be updated with the position of the first occurrence of this field
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * in the formatted text.
3189b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     *
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param date
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the date to format.
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param buffer
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the target string buffer to append the formatted date/time to.
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param field
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            on input: an optional alignment field; on output: the offsets
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            of the alignment field in the formatted text.
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the string buffer.
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
328cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes    public abstract StringBuffer format(Date date, StringBuffer buffer, FieldPosition field);
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
33193f0d794f264baeb7a90d02e58cae60305b3912aElliott Hughes     * Returns an array of locales for which custom {@code DateFormat} instances
33293f0d794f264baeb7a90d02e58cae60305b3912aElliott Hughes     * are available.
333d2d7abef3e9b73a57cdf1f2afd678d7f48945679Elliott Hughes     * <p>Note that Android does not support user-supplied locale service providers.
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static Locale[] getAvailableLocales() {
336757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes        return ICU.getAvailableDateFormatLocales();
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the calendar used by this {@code DateFormat}.
341f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the calendar used by this date format.
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Calendar getCalendar() {
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return calendar;
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing dates in
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * the DEFAULT style for the default locale.
351f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for the default style and locale.
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
3540d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final DateFormat getDateInstance() {
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getDateInstance(DEFAULT);
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing dates in
3603106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes     * the specified style for the user's default locale.
3613106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes     * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>".
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param style
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            one of SHORT, MEDIUM, LONG, FULL, or DEFAULT.
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for {@code style} and the default
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         locale.
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code style} is not one of SHORT, MEDIUM, LONG, FULL, or
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             DEFAULT.
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
3700d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final DateFormat getDateInstance(int style) {
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkDateStyle(style);
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getDateInstance(style, Locale.getDefault());
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing dates in
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * the specified style for the specified locale.
378f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param style
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            one of SHORT, MEDIUM, LONG, FULL, or DEFAULT.
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param locale
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the locale.
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code style} is not one of SHORT, MEDIUM, LONG, FULL, or
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             DEFAULT.
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for {@code style} and
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code locale}.
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
3890d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final DateFormat getDateInstance(int style, Locale locale) {
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkDateStyle(style);
391e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath        if (locale == null) {
392e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath            throw new NullPointerException("locale == null");
393e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath        }
394757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes        return new SimpleDateFormat(LocaleData.get(locale).getDateFormat(style), locale);
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing dates
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * and time values in the DEFAULT style for the default locale.
400f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for the default style and locale.
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
4030d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final DateFormat getDateTimeInstance() {
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getDateTimeInstance(DEFAULT, DEFAULT);
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing of both
4093106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes     * dates and time values in the manner appropriate for the user's default locale.
4103106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes     * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>".
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param dateStyle
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            one of SHORT, MEDIUM, LONG, FULL, or DEFAULT.
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param timeStyle
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            one of SHORT, MEDIUM, LONG, FULL, or DEFAULT.
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for {@code dateStyle},
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code timeStyle} and the default locale.
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code dateStyle} or {@code timeStyle} is not one of
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             SHORT, MEDIUM, LONG, FULL, or DEFAULT.
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
4210d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final DateFormat getDateTimeInstance(int dateStyle, int timeStyle) {
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkTimeStyle(timeStyle);
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkDateStyle(dateStyle);
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getDateTimeInstance(dateStyle, timeStyle, Locale.getDefault());
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing dates
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * and time values in the specified styles for the specified locale.
430f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param dateStyle
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            one of SHORT, MEDIUM, LONG, FULL, or DEFAULT.
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param timeStyle
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            one of SHORT, MEDIUM, LONG, FULL, or DEFAULT.
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param locale
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the locale.
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for {@code dateStyle},
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code timeStyle} and {@code locale}.
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code dateStyle} or {@code timeStyle} is not one of
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             SHORT, MEDIUM, LONG, FULL, or DEFAULT.
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
4430d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale locale) {
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkTimeStyle(timeStyle);
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkDateStyle(dateStyle);
446e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath        if (locale == null) {
447e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath            throw new NullPointerException("locale == null");
448e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath        }
449757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes        LocaleData localeData = LocaleData.get(locale);
4506ca85c49efc0f02d69933f60b207b964a999061fElliott Hughes        String pattern = localeData.getDateFormat(dateStyle) + " " + localeData.getTimeFormat(timeStyle);
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return new SimpleDateFormat(pattern, locale);
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing dates
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * and times in the SHORT style for the default locale.
457f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for the SHORT style and default
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         locale.
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
4610d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final DateFormat getInstance() {
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getDateTimeInstance(SHORT, SHORT);
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
46668d78caff1997dd870f0265c1c642288aee6e653Narayan Kamath     * @hide for internal use only.
46768d78caff1997dd870f0265c1c642288aee6e653Narayan Kamath     */
46868d78caff1997dd870f0265c1c642288aee6e653Narayan Kamath    public static final void set24HourTimePref(boolean is24Hour) {
46968d78caff1997dd870f0265c1c642288aee6e653Narayan Kamath    }
47068d78caff1997dd870f0265c1c642288aee6e653Narayan Kamath
47168d78caff1997dd870f0265c1c642288aee6e653Narayan Kamath    /**
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the {@code NumberFormat} used by this {@code DateFormat}.
473f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code NumberFormat} used by this date format.
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public NumberFormat getNumberFormat() {
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return numberFormat;
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing time
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * values in the DEFAULT style for the default locale.
483f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for the default style and locale.
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
4860d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final DateFormat getTimeInstance() {
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getTimeInstance(DEFAULT);
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing time
4923106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes     * values in the specified style for the user's default locale.
4933106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes     * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>".
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param style
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            one of SHORT, MEDIUM, LONG, FULL, or DEFAULT.
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for {@code style} and the default
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         locale.
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code style} is not one of SHORT, MEDIUM, LONG, FULL, or
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             DEFAULT.
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
5020d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final DateFormat getTimeInstance(int style) {
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkTimeStyle(style);
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getTimeInstance(style, Locale.getDefault());
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing time
509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * values in the specified style for the specified locale.
510f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param style
512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            one of SHORT, MEDIUM, LONG, FULL, or DEFAULT.
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param locale
514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the locale.
515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code style} is not one of SHORT, MEDIUM, LONG, FULL, or
517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             DEFAULT.
518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for {@code style} and
519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code locale}.
520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
5210d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes    public static final DateFormat getTimeInstance(int style, Locale locale) {
522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkTimeStyle(style);
523e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath        if (locale == null) {
524e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath            throw new NullPointerException("locale == null");
525e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath        }
526e4f01dff49442840faa828dcff0d1583a2e68530Narayan Kamath
527757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes        return new SimpleDateFormat(LocaleData.get(locale).getTimeFormat(style), locale);
528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the time zone of this date format's calendar.
532f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the time zone of the calendar used by this date format.
534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public TimeZone getTimeZone() {
536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return calendar.getTimeZone();
537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int hashCode() {
541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return calendar.getFirstDayOfWeek()
542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + calendar.getMinimalDaysInFirstWeek()
543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + calendar.getTimeZone().hashCode()
544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + (calendar.isLenient() ? 1231 : 1237)
545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + numberFormat.hashCode();
546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Indicates whether the calendar used by this date format is lenient.
550f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if the calendar is lenient; {@code false} otherwise.
552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean isLenient() {
554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return calendar.isLenient();
555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Parses a date from the specified string using the rules of this date
559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * format.
560f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the string to parse.
563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code Date} resulting from the parsing.
5649b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     * @throws ParseException
5659b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     *         if an error occurs during parsing.
566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Date parse(String string) throws ParseException {
568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ParsePosition position = new ParsePosition(0);
569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date = parse(string, position);
570fe1eba10c5d69e115dfab55d82cc22d42e9fbae5Elliott Hughes        if (position.getIndex() == 0) {
571a8bc3bd2794b36c5e935aff7b932a7945e98bf30Elliott Hughes            throw new ParseException("Unparseable date: \"" + string + "\"",
572a8bc3bd2794b36c5e935aff7b932a7945e98bf30Elliott Hughes                    position.getErrorIndex());
573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return date;
575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Parses a date from the specified string starting at the index specified
579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * by {@code position}. If the string is successfully parsed then the index
580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * of the {@code ParsePosition} is updated to the index following the parsed
581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * text. On error, the index is unchanged and the error index of {@code
582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * ParsePosition} is set to the index where the error occurred.
583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * By default, parsing is lenient: If the input is not in the form used by
585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * this object's format method but can still be parsed as a date, then the
586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * parse succeeds. Clients may insist on strict adherence to the format by
587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * calling {@code setLenient(false)}.
5889b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     *
589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the string to parse.
591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param position
592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            input/output parameter, specifies the start index in {@code
593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            string} from where to start parsing. If parsing is successful,
594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            it is updated with the index following the parsed text; on
595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            error, the index is unchanged and the error index is set to
596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index where the error occurred.
597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the date resulting from the parse, or {@code null} if there is an
598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         error.
599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract Date parse(String string, ParsePosition position);
601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Parses a date from the specified string starting at the index specified
604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * by {@code position}. If the string is successfully parsed then the index
605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * of the {@code ParsePosition} is updated to the index following the parsed
606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * text. On error, the index is unchanged and the error index of
607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code ParsePosition} is set to the index where the error occurred.
608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * By default, parsing is lenient: If the input is not in the form used by
610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * this object's format method but can still be parsed as a date, then the
611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * parse succeeds. Clients may insist on strict adherence to the format by
612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * calling {@code setLenient(false)}.
6139b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     *
614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the string to parse.
616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param position
617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            input/output parameter, specifies the start index in
618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code string} from where to start parsing. If parsing is
619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            successful, it is updated with the index following the parsed
620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            text; on error, the index is unchanged and the error index
621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            is set to the index where the error occurred.
622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the date resulting from the parsing, or {@code null} if there is
623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         an error.
624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Object parseObject(String string, ParsePosition position) {
627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return parse(string, position);
628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets the calendar used by this date format.
632f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param cal
634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the new calendar.
635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void setCalendar(Calendar cal) {
637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        calendar = cal;
638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Specifies whether or not date/time parsing shall be lenient. With lenient
642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * parsing, the parser may use heuristics to interpret inputs that do not
643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * precisely match this object's format. With strict parsing, inputs must
644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * match this object's format.
645f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param value
647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code true} to set the calendar to be lenient, {@code false}
648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            otherwise.
649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void setLenient(boolean value) {
651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        calendar.setLenient(value);
652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets the {@code NumberFormat} used by this date format.
656f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param format
658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the new number format.
659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void setNumberFormat(NumberFormat format) {
661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        numberFormat = format;
662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets the time zone of the calendar used by this date format.
666f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param timezone
668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the new time zone.
669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void setTimeZone(TimeZone timezone) {
671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        calendar.setTimeZone(timezone);
672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The instances of this inner class are used as attribute keys and values
676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * in {@code AttributedCharacterIterator} that the
677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link SimpleDateFormat#formatToCharacterIterator(Object)} method returns.
678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * There is no public constructor in this class, the only instances are the
680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * constants defined here.
681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static class Field extends Format.Field {
683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private static final long serialVersionUID = 7441350119349544720L;
685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private static Hashtable<Integer, Field> table = new Hashtable<Integer, Field>();
687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the era part of a date.
690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
6910d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field ERA = new Field("era", Calendar.ERA);
692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the year part of a date.
695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
6960d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field YEAR = new Field("year", Calendar.YEAR);
697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the month part of a date.
700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
7010d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field MONTH = new Field("month", Calendar.MONTH);
702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the hour of the day part of a date (0-11).
705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
7060d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field HOUR_OF_DAY0 = new Field("hour of day", Calendar.HOUR_OF_DAY);
707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the hour of the day part of a date (1-12).
710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
7110d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field HOUR_OF_DAY1 = new Field("hour of day 1", -1);
712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the minute part of a time.
715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
7160d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field MINUTE = new Field("minute", Calendar.MINUTE);
717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the second part of a time.
720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
7210d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field SECOND = new Field("second", Calendar.SECOND);
722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the millisecond part of a time.
725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
7260d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field MILLISECOND = new Field("millisecond", Calendar.MILLISECOND);
727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the day of the week part of a date.
730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
7310d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field DAY_OF_WEEK = new Field("day of week", Calendar.DAY_OF_WEEK);
732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the day of the month part of a date.
735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
7360d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field DAY_OF_MONTH = new Field("day of month", Calendar.DAY_OF_MONTH);
737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the day of the year part of a date.
740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
7410d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field DAY_OF_YEAR = new Field("day of year", Calendar.DAY_OF_YEAR);
742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the day of the week in the month part of a date.
745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
7460d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field DAY_OF_WEEK_IN_MONTH = new Field("day of week in month",
74703c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes                Calendar.DAY_OF_WEEK_IN_MONTH);
748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the week of the year part of a date.
751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
7520d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field WEEK_OF_YEAR = new Field("week of year",
753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Calendar.WEEK_OF_YEAR);
754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the week of the month part of a date.
757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
7580d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field WEEK_OF_MONTH = new Field("week of month",
759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Calendar.WEEK_OF_MONTH);
760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the time indicator part of a date.
763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
7640d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field AM_PM = new Field("am pm", Calendar.AM_PM);
765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the hour part of a date (0-11).
768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
7690d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field HOUR0 = new Field("hour", Calendar.HOUR);
770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the hour part of a date (1-12).
773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
7740d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes        public static final Field HOUR1 = new Field("hour 1", -1);
775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the time zone part of a date.
778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
77978b660e21412ff36d3eed179ff400d8fa690267eNarayan Kamath        public static final Field TIME_ZONE = new Field("time zone", -1);
780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * The calendar field that this field represents.
783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private int calendarField = -1;
785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Constructs a new instance of {@code DateFormat.Field} with the given
788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * fieldName and calendar field.
7899b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson         *
790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @param fieldName
791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         *            the field name.
792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @param calendarField
793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         *            the calendar field type of the field.
794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Field(String fieldName, int calendarField) {
796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(fieldName);
797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.calendarField = calendarField;
798a0a4196cb15480959f053d0ebe6b412bd23c8170Elliott Hughes            if (calendarField != -1 && table.get(Integer.valueOf(calendarField)) == null) {
799a0a4196cb15480959f053d0ebe6b412bd23c8170Elliott Hughes                table.put(Integer.valueOf(calendarField), this);
800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Returns the Calendar field that this field represents.
805f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes         *
806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @return the calendar field.
807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public int getCalendarField() {
809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return calendarField;
810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Returns the {@code DateFormat.Field} instance for the given calendar
814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * field.
815f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes         *
816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @param calendarField
817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         *            a calendar field constant.
818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @return the {@code DateFormat.Field} corresponding to
819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         *         {@code calendarField}.
820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @throws IllegalArgumentException
821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         *             if {@code calendarField} is negative or greater than the
822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         *             field count of {@code Calendar}.
823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public static Field ofCalendarField(int calendarField) {
825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (calendarField < 0 || calendarField >= Calendar.FIELD_COUNT) {
826cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes                throw new IllegalArgumentException("Field out of range: " + calendarField);
827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
828a0a4196cb15480959f053d0ebe6b412bd23c8170Elliott Hughes            return table.get(Integer.valueOf(calendarField));
829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static void checkDateStyle(int style) {
833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!(style == SHORT || style == MEDIUM || style == LONG
834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                || style == FULL || style == DEFAULT)) {
835cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes            throw new IllegalArgumentException("Illegal date style: " + style);
836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static void checkTimeStyle(int style) {
840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!(style == SHORT || style == MEDIUM || style == LONG
841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                || style == FULL || style == DEFAULT)) {
842cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes            throw new IllegalArgumentException("Illegal time style: " + style);
843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
846