DateFormat.java revision fe1eba10c5d69e115dfab55d82cc22d42e9fbae5
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 Project// BEGIN android-note
199b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson// changed from ICU to resource bundles
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// END android-note
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.text;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InvalidObjectException;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Calendar;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Date;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Hashtable;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Locale;
299b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson// BEGIN android-added
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.ResourceBundle;
319b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson// BEGIN android-added
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.TimeZone;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.text.internal.nls.Messages;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * An abstract class for date/time formatting subclasses which formats and
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * parses dates or time in a language-independent manner. The date/time
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting subclass, such as {@link SimpleDateFormat}, allows for formatting
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (i.e., date -> text), parsing (text -> date), and normalization. The date is
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * represented as a {@code Date} object or as the milliseconds since January 1,
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1970, 00:00:00 GMT.
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DateFormat provides many class methods for obtaining default date/time
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatters based on the default or a given locale and a number of formatting
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * styles. The formatting styles include FULL, LONG, MEDIUM, and SHORT. More
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * details and examples for using these styles are provided in the method
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * descriptions.
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DateFormat} helps you to format and parse dates for any locale. Your
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * code can be completely independent of the locale conventions for months, days
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the week, or even the calendar format: lunar vs. solar.
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * To format a date for the current Locale, use one of the static factory
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * methods:
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote>
579b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson *
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre>
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * myString = DateFormat.getDateInstance().format(myDate);
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre>
619b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson *
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote>
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If you are formatting multiple dates, it is more efficient to get the format
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and use it multiple times so that the system doesn't have to fetch the
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * information about the local language and country conventions multiple times.
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote>
689b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson *
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre>
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DateFormat df = DateFormat.getDateInstance();
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * for (int i = 0; i &lt; a.length; ++i) {
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     output.println(df.format(myDate[i]) + &quot;; &quot;);
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * }
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre>
759b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson *
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote>
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * To format a number for a different locale, specify it in the call to
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code getDateInstance}:
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote>
819b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson *
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre>
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre>
859b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson *
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote>
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DateFormat} can also be used to parse strings:
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote>
909b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson *
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre>
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * myDate = df.parse(myString);
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre>
949b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson *
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote>
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Use {@code getDateInstance} to get the normal date format for a country.
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Other static factory methods are available: Use {@code getTimeInstance} to
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * get the time format for a country. Use {@code getDateTimeInstance} to get the
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * date and time format. You can pass in different options to these factory
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * methods to control the length of the result; from SHORT to MEDIUM to LONG to
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * FULL. The exact result depends on the locale, but generally:
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul>
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>SHORT is completely numeric, such as 12.13.52 or 3:30pm
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>MEDIUM is longer, such as Jan 12, 1952
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>LONG is longer, such as January 12, 1952 or 3:30:32pm
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>FULL is pretty completely specified, such as Tuesday, April 12, 1952 AD
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or 3:30:42pm PST.
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul>
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If needed, the time zone can be set on the format. For even greater control
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * over the formatting or parsing, try casting the {@code DateFormat} you get
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * from the factory methods to a {@code SimpleDateFormat}. This will work for
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the majority of countries; just remember to put it in a try block in case you
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * encounter an unusual one.
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * There are versions of the parse and format methods which use
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code ParsePosition} and {@code FieldPosition} to allow you to
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul>
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>progressively parse through pieces of a string;
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>align any particular field.
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul>
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <h4>Synchronization</h4>
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Date formats are not synchronized. It is recommended to create separate
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * format instances for each thread. If multiple threads access a format
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * concurrently, it must be synchronized externally.
1289b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson *
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see NumberFormat
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see SimpleDateFormat
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see Calendar
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see TimeZone
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class DateFormat extends Format {
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final long serialVersionUID = 7218322306649953788L;
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The calendar that this {@code DateFormat} uses to format a number
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * representing a date.
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected Calendar calendar;
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The number format used to format a number.
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected NumberFormat numberFormat;
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The format style constant defining the default format style. The default
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * is MEDIUM.
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int DEFAULT = 2;
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The format style constant defining the full style.
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int FULL = 0;
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The format style constant defining the long style.
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int LONG = 1;
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The format style constant defining the medium style.
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int MEDIUM = 2;
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The format style constant defining the short style.
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int SHORT = 3;
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The {@code FieldPosition} selector for 'G' field alignment, corresponds
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * to the {@link Calendar#ERA} field.
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int ERA_FIELD = 0;
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The {@code FieldPosition} selector for 'y' field alignment, corresponds
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * to the {@link Calendar#YEAR} field.
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int YEAR_FIELD = 1;
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The {@code FieldPosition} selector for 'M' field alignment, corresponds
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * to the {@link Calendar#MONTH} field.
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int MONTH_FIELD = 2;
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The {@code FieldPosition} selector for 'd' field alignment, corresponds
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * to the {@link Calendar#DATE} field.
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int DATE_FIELD = 3;
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The {@code FieldPosition} selector for 'k' field alignment, corresponds
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * to the {@link Calendar#HOUR_OF_DAY} field. {@code HOUR_OF_DAY1_FIELD} is
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * used for the one-based 24-hour clock. For example, 23:59 + 01:00 results
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * in 24:59.
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int HOUR_OF_DAY1_FIELD = 4;
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The {@code FieldPosition} selector for 'H' field alignment, corresponds
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * to the {@link Calendar#HOUR_OF_DAY} field. {@code HOUR_OF_DAY0_FIELD} is
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * used for the zero-based 24-hour clock. For example, 23:59 + 01:00 results
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * in 00:59.
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int HOUR_OF_DAY0_FIELD = 5;
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'm' field alignment, corresponds to the
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#MINUTE} field.
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int MINUTE_FIELD = 6;
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 's' field alignment, corresponds to the
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#SECOND} field.
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int SECOND_FIELD = 7;
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'S' field alignment, corresponds to the
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#MILLISECOND} field.
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int MILLISECOND_FIELD = 8;
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'E' field alignment, corresponds to the
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#DAY_OF_WEEK} field.
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int DAY_OF_WEEK_FIELD = 9;
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'D' field alignment, corresponds to the
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#DAY_OF_YEAR} field.
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int DAY_OF_YEAR_FIELD = 10;
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'F' field alignment, corresponds to the
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#DAY_OF_WEEK_IN_MONTH} field.
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int DAY_OF_WEEK_IN_MONTH_FIELD = 11;
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'w' field alignment, corresponds to the
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#WEEK_OF_YEAR} field.
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int WEEK_OF_YEAR_FIELD = 12;
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'W' field alignment, corresponds to the
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#WEEK_OF_MONTH} field.
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int WEEK_OF_MONTH_FIELD = 13;
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'a' field alignment, corresponds to the
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#AM_PM} field.
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int AM_PM_FIELD = 14;
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * FieldPosition selector for 'h' field alignment, corresponding to the
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link Calendar#HOUR} field. {@code HOUR1_FIELD} is used for the
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * one-based 12-hour clock. For example, 11:30 PM + 1 hour results in 12:30
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * AM.
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int HOUR1_FIELD = 15;
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The {@code FieldPosition} selector for 'z' field alignment, corresponds
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * to the {@link Calendar#ZONE_OFFSET} and {@link Calendar#DST_OFFSET}
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * fields.
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int HOUR0_FIELD = 16;
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The {@code FieldPosition} selector for 'z' field alignment, corresponds
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * to the {@link Calendar#ZONE_OFFSET} and {@link Calendar#DST_OFFSET}
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * fields.
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static int TIMEZONE_FIELD = 17;
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructs a new instance of {@code DateFormat}.
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected DateFormat() {
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a new instance of {@code DateFormat} with the same properties.
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a shallow copy of this {@code DateFormat}.
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @see java.lang.Cloneable
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Object clone() {
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DateFormat clone = (DateFormat) super.clone();
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        clone.calendar = (Calendar) calendar.clone();
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        clone.numberFormat = (NumberFormat) numberFormat.clone();
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return clone;
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Compares this date format with the specified object and indicates if they
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * are equal.
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param object
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the object to compare with this date format.
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if {@code object} is a {@code DateFormat} object and
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         it has the same properties as this date format; {@code false}
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         otherwise.
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @see #hashCode
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean equals(Object object) {
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (this == object) {
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return true;
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!(object instanceof DateFormat)) {
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DateFormat dateFormat = (DateFormat) object;
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return numberFormat.equals(dateFormat.numberFormat)
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && calendar.getTimeZone().equals(
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        dateFormat.calendar.getTimeZone())
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && calendar.getFirstDayOfWeek() == dateFormat.calendar
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .getFirstDayOfWeek()
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && calendar.getMinimalDaysInFirstWeek() == dateFormat.calendar
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .getMinimalDaysInFirstWeek()
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                && calendar.isLenient() == dateFormat.calendar.isLenient();
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Formats the specified object as a string using the pattern of this date
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * format and appends the string to the specified string buffer.
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If the {@code field} member of {@code field} contains a value specifying
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * a format field, then its {@code beginIndex} and {@code endIndex} members
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * will be updated with the position of the first occurrence of this field
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * in the formatted text.
3509b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     *
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param object
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source object to format, must be a {@code Date} or a
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code Number}. If {@code object} is a number then a date is
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            constructed using the {@code longValue()} of the number.
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param buffer
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the target string buffer to append the formatted date/time to.
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param field
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            on input: an optional alignment field; on output: the offsets
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            of the alignment field in the formatted text.
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the string buffer.
3619b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     * @throws IllegalArgumentException
3629b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     *            if {@code object} is neither a {@code Date} nor a
3639b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     *            {@code Number} instance.
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final StringBuffer format(Object object, StringBuffer buffer,
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            FieldPosition field) {
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (object instanceof Date) {
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return format((Date) object, buffer, field);
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (object instanceof Number) {
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return format(new Date(((Number) object).longValue()), buffer,
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    field);
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throw new IllegalArgumentException();
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Formats the specified date using the rules of this date format.
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param date
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the date to format.
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the formatted string.
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final String format(Date date) {
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return format(date, new StringBuffer(), new FieldPosition(0))
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .toString();
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Formats the specified date as a string using the pattern of this date
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * format and appends the string to the specified string buffer.
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If the {@code field} member of {@code field} contains a value specifying
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * a format field, then its {@code beginIndex} and {@code endIndex} members
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * will be updated with the position of the first occurrence of this field
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * in the formatted text.
3989b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     *
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param date
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the date to format.
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param buffer
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the target string buffer to append the formatted date/time to.
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param field
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            on input: an optional alignment field; on output: the offsets
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            of the alignment field in the formatted text.
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the string buffer.
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract StringBuffer format(Date date, StringBuffer buffer,
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            FieldPosition field);
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Gets the list of installed locales which support {@code DateFormat}.
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return an array of locales.
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static Locale[] getAvailableLocales() {
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return Locale.getAvailableLocales();
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the calendar used by this {@code DateFormat}.
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the calendar used by this date format.
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Calendar getCalendar() {
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return calendar;
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing dates in
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * the DEFAULT style for the default locale.
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for the default style and locale.
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static DateFormat getDateInstance() {
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getDateInstance(DEFAULT);
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing dates in
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * the specified style for the default locale.
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param style
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            one of SHORT, MEDIUM, LONG, FULL, or DEFAULT.
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for {@code style} and the default
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         locale.
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code style} is not one of SHORT, MEDIUM, LONG, FULL, or
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             DEFAULT.
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static DateFormat getDateInstance(int style) {
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkDateStyle(style);
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getDateInstance(style, Locale.getDefault());
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing dates in
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * the specified style for the specified locale.
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param style
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            one of SHORT, MEDIUM, LONG, FULL, or DEFAULT.
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param locale
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the locale.
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code style} is not one of SHORT, MEDIUM, LONG, FULL, or
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             DEFAULT.
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for {@code style} and
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code locale}.
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static DateFormat getDateInstance(int style, Locale locale) {
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkDateStyle(style);
4729b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson        // BEGIN android-changed
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ResourceBundle bundle = getBundle(locale);
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String pattern = bundle.getString("Date_" + getStyleName(style)); //$NON-NLS-1$
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return new SimpleDateFormat(pattern, locale);
4769b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson        // END android-changed
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing dates
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * and time values in the DEFAULT style for the default locale.
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for the default style and locale.
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static DateFormat getDateTimeInstance() {
486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getDateTimeInstance(DEFAULT, DEFAULT);
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing of both
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * dates and time values in the manner appropriate for the default locale.
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param dateStyle
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            one of SHORT, MEDIUM, LONG, FULL, or DEFAULT.
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param timeStyle
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            one of SHORT, MEDIUM, LONG, FULL, or DEFAULT.
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for {@code dateStyle},
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code timeStyle} and the default locale.
499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code dateStyle} or {@code timeStyle} is not one of
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             SHORT, MEDIUM, LONG, FULL, or DEFAULT.
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static DateFormat getDateTimeInstance(int dateStyle,
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int timeStyle) {
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkTimeStyle(timeStyle);
506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkDateStyle(dateStyle);
507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getDateTimeInstance(dateStyle, timeStyle, Locale.getDefault());
508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing dates
512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * and time values in the specified styles for the specified locale.
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param dateStyle
515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            one of SHORT, MEDIUM, LONG, FULL, or DEFAULT.
516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param timeStyle
517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            one of SHORT, MEDIUM, LONG, FULL, or DEFAULT.
518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param locale
519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the locale.
520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for {@code dateStyle},
521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code timeStyle} and {@code locale}.
522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code dateStyle} or {@code timeStyle} is not one of
524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             SHORT, MEDIUM, LONG, FULL, or DEFAULT.
525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static DateFormat getDateTimeInstance(int dateStyle,
527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int timeStyle, Locale locale) {
528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkTimeStyle(timeStyle);
529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkDateStyle(dateStyle);
5309b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson        // BEGIN android-changed
531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ResourceBundle bundle = getBundle(locale);
532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String pattern = bundle.getString("Date_" + getStyleName(dateStyle)) //$NON-NLS-1$
533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + " " + bundle.getString("Time_" + getStyleName(timeStyle)); //$NON-NLS-1$ //$NON-NLS-2$
534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return new SimpleDateFormat(pattern, locale);
5359b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson        // END android-changed
536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing dates
540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * and times in the SHORT style for the default locale.
541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for the SHORT style and default
543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         locale.
544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static DateFormat getInstance() {
546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getDateTimeInstance(SHORT, SHORT);
547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the {@code NumberFormat} used by this {@code DateFormat}.
551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code NumberFormat} used by this date format.
553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public NumberFormat getNumberFormat() {
555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return numberFormat;
556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static String getStyleName(int style) {
559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String styleName;
560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        switch (style) {
561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            case SHORT:
562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                styleName = "SHORT"; //$NON-NLS-1$
563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                break;
564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            case MEDIUM:
565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                styleName = "MEDIUM"; //$NON-NLS-1$
566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                break;
567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            case LONG:
568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                styleName = "LONG"; //$NON-NLS-1$
569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                break;
570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            case FULL:
571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                styleName = "FULL"; //$NON-NLS-1$
572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                break;
573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            default:
574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                styleName = ""; //$NON-NLS-1$
575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return styleName;
577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing time
581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * values in the DEFAULT style for the default locale.
582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for the default style and locale.
584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static DateFormat getTimeInstance() {
586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getTimeInstance(DEFAULT);
587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing time
591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * values in the specified style for the default locale.
592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param style
594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            one of SHORT, MEDIUM, LONG, FULL, or DEFAULT.
595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for {@code style} and the default
596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         locale.
597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code style} is not one of SHORT, MEDIUM, LONG, FULL, or
599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             DEFAULT.
600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static DateFormat getTimeInstance(int style) {
602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkTimeStyle(style);
603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getTimeInstance(style, Locale.getDefault());
604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code DateFormat} instance for formatting and parsing time
608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * values in the specified style for the specified locale.
609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param style
611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            one of SHORT, MEDIUM, LONG, FULL, or DEFAULT.
612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param locale
613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the locale.
614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code style} is not one of SHORT, MEDIUM, LONG, FULL, or
616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             DEFAULT.
617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code DateFormat} instance for {@code style} and
618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code locale}.
619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final static DateFormat getTimeInstance(int style, Locale locale) {
621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkTimeStyle(style);
6229b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson        // BEGIN android-changed
623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ResourceBundle bundle = getBundle(locale);
624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String pattern = bundle.getString("Time_" + getStyleName(style)); //$NON-NLS-1$
625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return new SimpleDateFormat(pattern, locale);
6269b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson        // END android-changed
627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the time zone of this date format's calendar.
631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the time zone of the calendar used by this date format.
633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public TimeZone getTimeZone() {
635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return calendar.getTimeZone();
636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int hashCode() {
640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return calendar.getFirstDayOfWeek()
641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + calendar.getMinimalDaysInFirstWeek()
642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + calendar.getTimeZone().hashCode()
643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + (calendar.isLenient() ? 1231 : 1237)
644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + numberFormat.hashCode();
645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Indicates whether the calendar used by this date format is lenient.
649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if the calendar is lenient; {@code false} otherwise.
651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean isLenient() {
653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return calendar.isLenient();
654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Parses a date from the specified string using the rules of this date
658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * format.
659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the string to parse.
662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the {@code Date} resulting from the parsing.
6639b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     * @throws ParseException
6649b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     *         if an error occurs during parsing.
665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Date parse(String string) throws ParseException {
667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ParsePosition position = new ParsePosition(0);
668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Date date = parse(string, position);
669fe1eba10c5d69e115dfab55d82cc22d42e9fbae5Elliott Hughes        if (position.getIndex() == 0) {
670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // text.19=Unparseable date: {0}
671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new ParseException(
672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    Messages.getString("text.19", string), position.getErrorIndex()); //$NON-NLS-1$
673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return date;
675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Parses a date from the specified string starting at the index specified
679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * by {@code position}. If the string is successfully parsed then the index
680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * of the {@code ParsePosition} is updated to the index following the parsed
681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * text. On error, the index is unchanged and the error index of {@code
682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * ParsePosition} is set to the index where the error occurred.
683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * By default, parsing is lenient: If the input is not in the form used by
685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * this object's format method but can still be parsed as a date, then the
686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * parse succeeds. Clients may insist on strict adherence to the format by
687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * calling {@code setLenient(false)}.
6889b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     *
689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the string to parse.
691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param position
692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            input/output parameter, specifies the start index in {@code
693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            string} from where to start parsing. If parsing is successful,
694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            it is updated with the index following the parsed text; on
695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            error, the index is unchanged and the error index is set to
696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index where the error occurred.
697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the date resulting from the parse, or {@code null} if there is an
698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         error.
699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract Date parse(String string, ParsePosition position);
701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Parses a date from the specified string starting at the index specified
704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * by {@code position}. If the string is successfully parsed then the index
705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * of the {@code ParsePosition} is updated to the index following the parsed
706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * text. On error, the index is unchanged and the error index of
707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code ParsePosition} is set to the index where the error occurred.
708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * By default, parsing is lenient: If the input is not in the form used by
710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * this object's format method but can still be parsed as a date, then the
711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * parse succeeds. Clients may insist on strict adherence to the format by
712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * calling {@code setLenient(false)}.
7139b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson     *
714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the string to parse.
716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param position
717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            input/output parameter, specifies the start index in
718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code string} from where to start parsing. If parsing is
719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            successful, it is updated with the index following the parsed
720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            text; on error, the index is unchanged and the error index
721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            is set to the index where the error occurred.
722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the date resulting from the parsing, or {@code null} if there is
723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         an error.
724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Object parseObject(String string, ParsePosition position) {
727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return parse(string, position);
728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets the calendar used by this date format.
732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param cal
734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the new calendar.
735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void setCalendar(Calendar cal) {
737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        calendar = cal;
738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Specifies whether or not date/time parsing shall be lenient. With lenient
742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * parsing, the parser may use heuristics to interpret inputs that do not
743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * precisely match this object's format. With strict parsing, inputs must
744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * match this object's format.
745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param value
747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code true} to set the calendar to be lenient, {@code false}
748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            otherwise.
749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void setLenient(boolean value) {
751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        calendar.setLenient(value);
752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets the {@code NumberFormat} used by this date format.
756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param format
758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the new number format.
759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void setNumberFormat(NumberFormat format) {
761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        numberFormat = format;
762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets the time zone of the calendar used by this date format.
766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param timezone
768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the new time zone.
769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void setTimeZone(TimeZone timezone) {
771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        calendar.setTimeZone(timezone);
772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The instances of this inner class are used as attribute keys and values
776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * in {@code AttributedCharacterIterator} that the
777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@link SimpleDateFormat#formatToCharacterIterator(Object)} method returns.
778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * There is no public constructor in this class, the only instances are the
780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * constants defined here.
781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static class Field extends Format.Field {
783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private static final long serialVersionUID = 7441350119349544720L;
785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private static Hashtable<Integer, Field> table = new Hashtable<Integer, Field>();
787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the era part of a date.
790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field ERA = new Field("era", Calendar.ERA); //$NON-NLS-1$
792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the year part of a date.
795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field YEAR = new Field("year", Calendar.YEAR); //$NON-NLS-1$
797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the month part of a date.
800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field MONTH = new Field("month", Calendar.MONTH); //$NON-NLS-1$
802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the hour of the day part of a date (0-11).
805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field HOUR_OF_DAY0 = new Field("hour of day", //$NON-NLS-1$
807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Calendar.HOUR_OF_DAY);
808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the hour of the day part of a date (1-12).
811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field HOUR_OF_DAY1 = new Field("hour of day 1", -1); //$NON-NLS-1$
813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the minute part of a time.
816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field MINUTE = new Field("minute", Calendar.MINUTE); //$NON-NLS-1$
818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the second part of a time.
821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field SECOND = new Field("second", Calendar.SECOND); //$NON-NLS-1$
823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the millisecond part of a time.
826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field MILLISECOND = new Field("millisecond", //$NON-NLS-1$
828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Calendar.MILLISECOND);
829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the day of the week part of a date.
832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field DAY_OF_WEEK = new Field("day of week", //$NON-NLS-1$
834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Calendar.DAY_OF_WEEK);
835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the day of the month part of a date.
838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field DAY_OF_MONTH = new Field("day of month", //$NON-NLS-1$
840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Calendar.DAY_OF_MONTH);
841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the day of the year part of a date.
844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field DAY_OF_YEAR = new Field("day of year", //$NON-NLS-1$
846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Calendar.DAY_OF_YEAR);
847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the day of the week in the month part of a date.
850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field DAY_OF_WEEK_IN_MONTH = new Field(
852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "day of week in month", Calendar.DAY_OF_WEEK_IN_MONTH); //$NON-NLS-1$
853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the week of the year part of a date.
856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field WEEK_OF_YEAR = new Field("week of year", //$NON-NLS-1$
858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Calendar.WEEK_OF_YEAR);
859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the week of the month part of a date.
862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field WEEK_OF_MONTH = new Field("week of month", //$NON-NLS-1$
864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Calendar.WEEK_OF_MONTH);
865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the time indicator part of a date.
868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field AM_PM = new Field("am pm", Calendar.AM_PM); //$NON-NLS-1$
870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the hour part of a date (0-11).
873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field HOUR0 = new Field("hour", Calendar.HOUR); //$NON-NLS-1$
875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the hour part of a date (1-12).
878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field HOUR1 = new Field("hour 1", -1); //$NON-NLS-1$
880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Marks the time zone part of a date.
883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
884adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public final static Field TIME_ZONE = new Field("time zone", -1); //$NON-NLS-1$
885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * The calendar field that this field represents.
888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private int calendarField = -1;
890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Constructs a new instance of {@code DateFormat.Field} with the given
893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * fieldName and calendar field.
8949b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson         *
895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @param fieldName
896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         *            the field name.
897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @param calendarField
898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         *            the calendar field type of the field.
899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Field(String fieldName, int calendarField) {
901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(fieldName);
902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.calendarField = calendarField;
903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (calendarField != -1
904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && table.get(new Integer(calendarField)) == null) {
905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                table.put(new Integer(calendarField), this);
906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Returns the Calendar field that this field represents.
911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         *
912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @return the calendar field.
913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
914adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public int getCalendarField() {
915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return calendarField;
916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Returns the {@code DateFormat.Field} instance for the given calendar
920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * field.
921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         *
922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @param calendarField
923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         *            a calendar field constant.
924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @return the {@code DateFormat.Field} corresponding to
925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         *         {@code calendarField}.
926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @throws IllegalArgumentException
927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         *             if {@code calendarField} is negative or greater than the
928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         *             field count of {@code Calendar}.
929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public static Field ofCalendarField(int calendarField) {
931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (calendarField < 0 || calendarField >= Calendar.FIELD_COUNT) {
932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new IllegalArgumentException();
933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return table.get(new Integer(calendarField));
936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Resolves instances that are deserialized to the constant
940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * {@code DateFormat.Field} values.
9419b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson         *
942adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @return the resolved field object.
943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @throws InvalidObjectException
944adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         *             if an error occurs while resolving the field object.
945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @Override
947adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Object readResolve() throws InvalidObjectException {
9489b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson        	if (this.getClass() != Field.class) {
9499b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson                // text.0C=cannot resolve subclasses
9509b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson                throw new InvalidObjectException(Messages.getString("text.0C")); //$NON-NLS-1$
9519b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson            }
9529b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson
953adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (calendarField != -1) {
954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                try {
955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    Field result = ofCalendarField(calendarField);
9569b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson
9579b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson                    if (result != null && this.getName().equals(result.getName())) {
958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        return result;
959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    }
960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                } catch (IllegalArgumentException e) {
961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    // text.02=Unknown attribute
962adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    throw new InvalidObjectException(Messages
963adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            .getString("text.02")); //$NON-NLS-1$
964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
965adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } else {
966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (this.equals(TIME_ZONE)) {
967adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    return TIME_ZONE;
968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (this.equals(HOUR1)) {
970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    return HOUR1;
971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (this.equals(HOUR_OF_DAY1)) {
973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    return HOUR_OF_DAY1;
974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
976adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // text.02=Unknown attribute
977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new InvalidObjectException(Messages.getString("text.02")); //$NON-NLS-1$
978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
981adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static void checkDateStyle(int style) {
982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!(style == SHORT || style == MEDIUM || style == LONG
983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                || style == FULL || style == DEFAULT)) {
984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // text.0E=Illegal date style: {0}
985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new IllegalArgumentException(Messages.getString(
986adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    "text.0E", style)); //$NON-NLS-1$
987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
989adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static void checkTimeStyle(int style) {
991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!(style == SHORT || style == MEDIUM || style == LONG
992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                || style == FULL || style == DEFAULT)) {
993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // text.0F=Illegal time style: {0}
994adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new IllegalArgumentException(Messages.getString(
995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    "text.0F", style)); //$NON-NLS-1$
996adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
999