1bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert/*
2bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *   Copyright (C) 1996-2012, International Business Machines
3bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *   Corporation and others.  All Rights Reserved.
4bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */
5bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
6bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertpackage com.ibm.icu.text;
7bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
8bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.io.InvalidObjectException;
9bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.text.FieldPosition;
10bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.text.Format;
11bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.text.ParseException;
12bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.text.ParsePosition;
13bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.util.Date;
14bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.util.HashMap;
15bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.util.Locale;
16bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.util.Map;
17bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
18bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.util.Calendar;
19bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.util.TimeZone;
20bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.util.ULocale;
21bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport com.ibm.icu.util.ULocale.Category;
22bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
23bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert/**
24bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * {@icuenhanced java.text.DateFormat}.{@icu _usage_}
25bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
26bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p>DateFormat is an abstract class for date/time formatting subclasses which
27bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * formats and parses dates or time in a language-independent manner.
28bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * The date/time formatting subclass, such as SimpleDateFormat, allows for
29bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * formatting (i.e., date -> text), parsing (text -> date), and
30bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * normalization.  The date is represented as a <code>Date</code> object or
31bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * as the milliseconds since January 1, 1970, 00:00:00 GMT.
32bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
33bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p>DateFormat provides many class methods for obtaining default date/time
34bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * formatters based on the default or a given locale and a number of formatting
35bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * styles. The formatting styles include FULL, LONG, MEDIUM, and SHORT. More
36bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * detail and examples of using these styles are provided in the method
37bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * descriptions.
38bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
39bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p>DateFormat helps you to format and parse dates for any locale.
40bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Your code can be completely independent of the locale conventions for
41bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * months, days of the week, or even the calendar format: lunar vs. solar.
42bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
43bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p>To format a date for the current Locale, use one of the
44bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * static factory methods:
45bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <pre>
46bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *  myString = DateFormat.getDateInstance().format(myDate);
47bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </pre>
48bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p>If you are formatting multiple numbers, it is
49bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * more efficient to get the format and use it multiple times so that
50bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * the system doesn't have to fetch the information about the local
51bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * language and country conventions multiple times.
52bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <pre>
53bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *  DateFormat df = DateFormat.getDateInstance();
54bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *  for (int i = 0; i < a.length; ++i) {
55bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *    output.println(df.format(myDate[i]) + "; ");
56bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *  }
57bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </pre>
58bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p>To format a number for a different Locale, specify it in the
59bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * call to getDateInstance().
60bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <pre>
61bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *  DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
62bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </pre>
63bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p>You can use a DateFormat to parse also.
64bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <pre>
65bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *  myDate = df.parse(myString);
66bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </pre>
67bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p>Use getDateInstance to get the normal date format for that country.
68bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * There are other static factory methods available.
69bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Use getTimeInstance to get the time format for that country.
70bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Use getDateTimeInstance to get a date and time format. You can pass in
71bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * different options to these factory methods to control the length of the
72bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * result; from SHORT to MEDIUM to LONG to FULL. The exact result depends
73bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * on the locale, but generally:
74bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <ul><li>SHORT is completely numeric, such as 12.13.52 or 3:30pm
75bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <li>MEDIUM is longer, such as Jan 12, 1952
76bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <li>LONG is longer, such as January 12, 1952 or 3:30:32pm
77bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <li>FULL is pretty completely specified, such as
78bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Tuesday, April 12, 1952 AD or 3:30:42pm PST.
79bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </ul>
80bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
81bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p>You can also set the time zone on the format if you wish.
82bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * If you want even more control over the format or parsing,
83bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * (or want to give your users more control),
84bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * you can try casting the DateFormat you get from the factory methods
85bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * to a SimpleDateFormat. This will work for the majority
86bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * of countries; just remember to put it in a try block in case you
87bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * encounter an unusual one.
88bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
89bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <p>You can also use forms of the parse and format methods with
90bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * ParsePosition and FieldPosition to
91bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * allow you to
92bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <ul><li>progressively parse through pieces of a string.
93bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <li>align any particular field, or find out where it is for selection
94bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * on the screen.
95bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * </ul>
96bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
97bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * <h4>Synchronization</h4>
98bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
99bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Date formats are not synchronized. It is recommended to create separate
100bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * format instances for each thread. If multiple threads access a format
101bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * concurrently, it must be synchronized externally.
102bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
103bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @see          UFormat
104bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @see          NumberFormat
105bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @see          SimpleDateFormat
106bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @see          com.ibm.icu.util.Calendar
107bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @see          com.ibm.icu.util.GregorianCalendar
108bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @see          com.ibm.icu.util.TimeZone
109bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @author       Mark Davis, Chen-Lieh Huang, Alan Liu
110bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @stable ICU 2.0
111bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */
112bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertpublic class DateFormat extends Format {
113bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
114bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    private static final long serialVersionUID = 1L;
115bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
116bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
117bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @internal
118bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
119bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final java.text.DateFormat dateFormat;
120bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
121bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
122bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @internal
123bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param delegate the DateFormat to which to delegate
124bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
125bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public DateFormat(java.text.DateFormat delegate) {
126bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        this.dateFormat = delegate;
127bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
128bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
129bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
130bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * For subclass use.  Subclasses will generally not
131bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * work correctly unless they manipulate the delegate.
132bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
133bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    protected DateFormat() {
134bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        this.dateFormat = java.text.DateFormat.getDateTimeInstance(
135bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                java.text.DateFormat.SHORT,
136bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                java.text.DateFormat.SHORT,
137bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                ULocale.getDefault(Category.FORMAT).toLocale());
138bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
139bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
140bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
141bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 'G' field alignment,
142bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#ERA} field.
143bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
144bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
145bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int ERA_FIELD = 0;
146bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
147bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
148bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 'y' field alignment,
149bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#YEAR} field.
150bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
151bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
152bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int YEAR_FIELD = 1;
153bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
154bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
155bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 'M' field alignment,
156bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#MONTH} field.
157bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
158bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
159bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int MONTH_FIELD = 2;
160bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
161bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
162bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 'd' field alignment,
163bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#DATE} field.
164bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
165bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
166bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int DATE_FIELD = 3;
167bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
168bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
169bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 'k' field alignment,
170bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#HOUR_OF_DAY} field.
171bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * HOUR_OF_DAY1_FIELD is used for the one-based 24-hour clock.
172bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * For example, 23:59 + 01:00 results in 24:59.
173bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
174bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
175bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int HOUR_OF_DAY1_FIELD = 4;
176bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
177bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
178bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 'H' field alignment,
179bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#HOUR_OF_DAY} field.
180bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * HOUR_OF_DAY0_FIELD is used for the zero-based 24-hour clock.
181bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * For example, 23:59 + 01:00 results in 00:59.
182bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
183bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
184bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int HOUR_OF_DAY0_FIELD = 5;
185bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
186bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
187bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 'm' field alignment,
188bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#MINUTE} field.
189bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
190bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
191bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int MINUTE_FIELD = 6;
192bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
193bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
194bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 's' field alignment,
195bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#SECOND} field.
196bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
197bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
198bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int SECOND_FIELD = 7;
199bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
200bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
201bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} FieldPosition selector for 'S' field alignment,
202bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#MILLISECOND} field.
203bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.0
204bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
205bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int FRACTIONAL_SECOND_FIELD = 8;
206bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
207bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
208bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Alias for FRACTIONAL_SECOND_FIELD.
209bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.0 FRACTIONAL_SECOND_FIELD.
210bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
211bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int MILLISECOND_FIELD = FRACTIONAL_SECOND_FIELD;
212bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
213bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
214bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 'E' field alignment,
215bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#DAY_OF_WEEK} field.
216bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
217bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
218bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int DAY_OF_WEEK_FIELD = 9;
219bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
220bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
221bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 'D' field alignment,
222bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#DAY_OF_YEAR} field.
223bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
224bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
225bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int DAY_OF_YEAR_FIELD = 10;
226bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
227bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
228bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 'F' field alignment,
229bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#DAY_OF_WEEK_IN_MONTH} field.
230bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
231bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
232bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int DAY_OF_WEEK_IN_MONTH_FIELD = 11;
233bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
234bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
235bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 'w' field alignment,
236bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#WEEK_OF_YEAR} field.
237bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
238bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
239bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int WEEK_OF_YEAR_FIELD = 12;
240bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
241bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
242bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 'W' field alignment,
243bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#WEEK_OF_MONTH} field.
244bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
245bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
246bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int WEEK_OF_MONTH_FIELD = 13;
247bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
248bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
249bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 'a' field alignment,
250bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#AM_PM} field.
251bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
252bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
253bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int AM_PM_FIELD = 14;
254bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
255bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
256bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 'h' field alignment,
257bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#HOUR} field.
258bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * HOUR1_FIELD is used for the one-based 12-hour clock.
259bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * For example, 11:30 PM + 1 hour results in 12:30 AM.
260bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
261bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
262bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int HOUR1_FIELD = 15;
263bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
264bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
265bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 'K' field alignment,
266bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#HOUR} field.
267bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * HOUR0_FIELD is used for the zero-based 12-hour clock.
268bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * For example, 11:30 PM + 1 hour results in 00:30 AM.
269bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
270bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
271bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int HOUR0_FIELD = 16;
272bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
273bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
274bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * FieldPosition selector for 'z' field alignment,
275bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#ZONE_OFFSET} and
276bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@link Calendar#DST_OFFSET} fields.
277bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
278bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
279bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int TIMEZONE_FIELD = 17;
280bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
281bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
282bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} FieldPosition selector for 'Y' field alignment,
283bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#YEAR_WOY} field.
284bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.0
285bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
286bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int YEAR_WOY_FIELD = 18;
287bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
288bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
289bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} FieldPosition selector for 'e' field alignment,
290bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#DOW_LOCAL} field.
291bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.0
292bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
293bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int DOW_LOCAL_FIELD = 19;
294bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
295bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
296bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} FieldPosition selector for 'u' field alignment,
297bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#EXTENDED_YEAR} field.
298bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.0
299bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
300bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int EXTENDED_YEAR_FIELD = 20;
301bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
302bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
303bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} FieldPosition selector for 'g' field alignment,
304bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#JULIAN_DAY} field.
305bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.0
306bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
307bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int JULIAN_DAY_FIELD = 21;
308bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
309bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
310bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} FieldPosition selector for 'A' field alignment,
311bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#MILLISECONDS_IN_DAY} field.
312bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.0
313bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
314bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int MILLISECONDS_IN_DAY_FIELD = 22;
315bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
316bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
317bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} FieldPosition selector for 'Z' field alignment,
318bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#ZONE_OFFSET} and
319bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@link Calendar#DST_OFFSET} fields.
320bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.0
321bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
322bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int TIMEZONE_RFC_FIELD = 23;
323bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
324bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
325bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} FieldPosition selector for 'v' field alignment,
326bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#ZONE_OFFSET} and
327bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@link Calendar#DST_OFFSET} fields.  This displays the generic zone
328bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * name, if available.
329bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.4
330bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
331bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int TIMEZONE_GENERIC_FIELD = 24;
332bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
333bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
334bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} FieldPosition selector for 'c' field alignment,
335bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#DAY_OF_WEEK} field.
336bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * This displays the stand alone day name, if available.
337bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.4
338bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
339bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int STANDALONE_DAY_FIELD = 25;
340bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
341bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
342bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} FieldPosition selector for 'L' field alignment,
343bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#MONTH} field.
344bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * This displays the stand alone month name, if available.
345bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.4
346bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
347bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int STANDALONE_MONTH_FIELD = 26;
348bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
349bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
350bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} FieldPosition selector for 'Q' field alignment,
351bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#MONTH} field.
352bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * This displays the quarter.
353bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.6
354bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
355bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int QUARTER_FIELD = 27;
356bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
357bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
358bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} FieldPosition selector for 'q' field alignment,
359bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#MONTH} field.
360bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * This displays the stand alone quarter, if available.
361bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.6
362bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
363bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int STANDALONE_QUARTER_FIELD = 28;
364bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
365bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
366bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} FieldPosition selector for 'V' field alignment,
367bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * corresponding to the {@link Calendar#ZONE_OFFSET} and
368bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@link Calendar#DST_OFFSET} fields.  This displays the fallback timezone
369bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * name when VVVV is specified, and the short standard or daylight
370bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * timezone name ignoring commonlyUsed when a single V is specified.
371bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.8
372bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
373bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int TIMEZONE_SPECIAL_FIELD = 29;
374bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
375bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
376bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Number of FieldPosition selectors for DateFormat.
377bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Valid selectors range from 0 to FIELD_COUNT-1.
378bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.0
379bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
380bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static int FIELD_COUNT = 30; // must == DateFormatSymbols.patternChars.length()
381bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
382bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
383bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Formats a time object into a time string. Examples of time objects
384bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * are a time value expressed in milliseconds and a Date object.
385bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param obj must be a Number or a Date or a Calendar.
386bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param toAppendTo the string buffer for the returning time string.
387bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the formatted time string.
388bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param fieldPosition keeps track of the position of the field
389bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * within the returned string.
390bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * On input: an alignment field,
391bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * if desired. On output: the offsets of the alignment field. For
392bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * example, given a time text "1996.07.10 AD at 15:08:56 PDT",
393bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * if the given fieldPosition is DateFormat.YEAR_FIELD, the
394bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * begin index and end index of fieldPosition will be set to
395bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * 0 and 4, respectively.
396bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Notice that if the same time field appears
397bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * more than once in a pattern, the fieldPosition will be set for the first
398bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * occurrence of that time field. For instance, formatting a Date to
399bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the time string "1 PM PDT (Pacific Daylight Time)" using the pattern
400bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * "h a z (zzzz)" and the alignment field DateFormat.TIMEZONE_FIELD,
401bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the begin index and end index of fieldPosition will be set to
402bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * 5 and 8, respectively, for the first occurrence of the timezone
403bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * pattern character 'z'.
404bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see java.text.Format
405bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
406bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
407bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final StringBuffer format(Object obj, StringBuffer toAppendTo,
408bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                                     FieldPosition fieldPosition)
409bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
410bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (obj instanceof Calendar) {
411bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return format((Calendar)obj, toAppendTo, fieldPosition);
412bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        } else if (obj instanceof Date) {
413bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return format((Date)obj, toAppendTo, fieldPosition);
414bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        } else if (obj instanceof Number) {
415bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return format(new Date(((Number)obj).longValue()), toAppendTo, fieldPosition );
416bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
417bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
418bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        throw new IllegalArgumentException("Cannot format given Object (" +
419bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                                               obj.getClass().getName() + ") as a Date");
420bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
421bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
422bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
423bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Formats a date into a date/time string.
424bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param cal a Calendar set to the date and time to be formatted
425bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * into a date/time string.  When the calendar type is different from
426bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the internal calendar held by this DateFormat instance, the date
427bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * and the time zone will be inherited from the input calendar, but
428bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * other calendar field values will be calculated by the internal calendar.
429bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param toAppendTo the string buffer for the returning date/time string.
430bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param fieldPosition keeps track of the position of the field
431bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * within the returned string.
432bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * On input: an alignment field,
433bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * if desired. On output: the offsets of the alignment field. For
434bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * example, given a time text "1996.07.10 AD at 15:08:56 PDT",
435bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * if the given fieldPosition is DateFormat.YEAR_FIELD, the
436bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * begin index and end index of fieldPosition will be set to
437bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * 0 and 4, respectively.
438bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Notice that if the same time field appears
439bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * more than once in a pattern, the fieldPosition will be set for the first
440bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * occurrence of that time field. For instance, formatting a Date to
441bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the time string "1 PM PDT (Pacific Daylight Time)" using the pattern
442bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * "h a z (zzzz)" and the alignment field DateFormat.TIMEZONE_FIELD,
443bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the begin index and end index of fieldPosition will be set to
444bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * 5 and 8, respectively, for the first occurrence of the timezone
445bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * pattern character 'z'.
446bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the formatted date/time string.
447bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
448bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
449bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public StringBuffer format(Calendar cal, StringBuffer toAppendTo,
450bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                                        FieldPosition fieldPosition) {
451bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return format(cal.getTime(), toAppendTo, fieldPosition);
452bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
453bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
454bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
455bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Formats a Date into a date/time string.
456bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param date a Date to be formatted into a date/time string.
457bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param toAppendTo the string buffer for the returning date/time string.
458bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param fieldPosition keeps track of the position of the field
459bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * within the returned string.
460bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * On input: an alignment field,
461bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * if desired. On output: the offsets of the alignment field. For
462bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * example, given a time text "1996.07.10 AD at 15:08:56 PDT",
463bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * if the given fieldPosition is DateFormat.YEAR_FIELD, the
464bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * begin index and end index of fieldPosition will be set to
465bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * 0 and 4, respectively.
466bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Notice that if the same time field appears
467bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * more than once in a pattern, the fieldPosition will be set for the first
468bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * occurrence of that time field. For instance, formatting a Date to
469bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the time string "1 PM PDT (Pacific Daylight Time)" using the pattern
470bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * "h a z (zzzz)" and the alignment field DateFormat.TIMEZONE_FIELD,
471bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the begin index and end index of fieldPosition will be set to
472bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * 5 and 8, respectively, for the first occurrence of the timezone
473bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * pattern character 'z'.
474bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the formatted date/time string.
475bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
476bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
477bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public StringBuffer format(Date date, StringBuffer toAppendTo,
478bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                                     FieldPosition fieldPosition) {
479bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        FieldPosition jdkPos = toJDKFieldPosition(fieldPosition);
480bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        StringBuffer buf = dateFormat.format(date, toAppendTo, jdkPos);
481bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (jdkPos != null) {
482bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            fieldPosition.setBeginIndex(jdkPos.getBeginIndex());
483bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            fieldPosition.setEndIndex(jdkPos.getEndIndex());
484bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
485bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return buf;
486bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
487bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
488bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
489bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Formats a Date into a date/time string.
490bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param date the time value to be formatted into a time string.
491bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the formatted time string.
492bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
493bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
494bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final String format(Date date)
495bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
496bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return dateFormat.format(date);
497bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
498bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
499bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
500bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Parses a date/time string.
501bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
502bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param text  The date/time string to be parsed
503bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
504bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return      A Date, or null if the input could not be parsed
505bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
506bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @exception  ParseException  If the given string cannot be parsed as a date.
507bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
508bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see #parse(String, ParsePosition)
509bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
510bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
511bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public Date parse(String text) throws ParseException
512bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
513bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return dateFormat.parse(text);
514bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
515bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
516bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
517bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Parses a date/time string according to the given parse position.
518bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * For example, a time text "07/10/96 4:5 PM, PDT" will be parsed
519bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * into a Calendar that is equivalent to Date(837039928046).  The
520bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * caller should clear the calendar before calling this method,
521bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * unless existing field information is to be kept.
522bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
523bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <p> By default, parsing is lenient: If the input is not in the form used
524bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * by this object's format method but can still be parsed as a date, then
525bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the parse succeeds.  Clients may insist on strict adherence to the
526bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * format by calling setLenient(false).
527bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
528bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see #setLenient(boolean)
529bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
530bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param text  The date/time string to be parsed
531bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
532bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param cal   The calendar into which parsed data will be stored.
533bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              In general, this should be cleared before calling this
534bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              method.  If this parse fails, the calendar may still
535bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              have been modified.  When the calendar type is different
536bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              from the internal calendar held by this DateFormat
537bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              instance, calendar field values will be parsed based
538bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              on the internal calendar initialized with the time and
539bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              the time zone taken from this calendar, then the
540bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              parse result (time in milliseconds and time zone) will
541bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              be set back to this calendar.
542bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
543bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param pos   On input, the position at which to start parsing; on
544bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              output, the position at which parsing terminated, or the
545bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              start position if the parse failed.
546bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
547bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
548bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public void parse(String text, Calendar cal, ParsePosition pos) {
549bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        Date result = dateFormat.parse(text, pos);
550bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        cal.setTime(result);
551bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
552bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
553bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
554bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Parses a date/time string according to the given parse position.  For
555bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date
556bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * that is equivalent to Date(837039928046).
557bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
558bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <p> By default, parsing is lenient: If the input is not in the form used
559bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * by this object's format method but can still be parsed as a date, then
560bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the parse succeeds.  Clients may insist on strict adherence to the
561bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * format by calling setLenient(false).
562bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
563bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see #setLenient(boolean)
564bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
565bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param text  The date/time string to be parsed
566bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
567bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param pos   On input, the position at which to start parsing; on
568bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              output, the position at which parsing terminated, or the
569bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              start position if the parse failed.
570bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
571bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return      A Date, or null if the input could not be parsed
572bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
573bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
574bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public Date parse(String text, ParsePosition pos) {
575bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return dateFormat.parse(text, pos);
576bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
577bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
578bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
579bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Parses a date/time string into an Object.  This convenience method simply
580bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * calls parse(String, ParsePosition).
581bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
582bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see #parse(String, ParsePosition)
583bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
584bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
585bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public Object parseObject (String source, ParsePosition pos)
586bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
587bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return parse(source, pos);
588bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
589bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
590bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
591bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for empty style pattern.
592bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.8
593bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
594bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final int NONE = -1;
595bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
596bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
597bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for full style pattern.
598bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
599bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
600bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final int FULL = 0;
601bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
602bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
603bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for long style pattern.
604bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
605bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
606bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final int LONG = 1;
607bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
608bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
609bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for medium style pattern.
610bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
611bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
612bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final int MEDIUM = 2;
613bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
614bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
615bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for short style pattern.
616bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
617bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
618bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final int SHORT = 3;
619bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
620bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
621bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for default style pattern.  Its value is MEDIUM.
622bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
623bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
624bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final int DEFAULT = MEDIUM;
625bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
626bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
627bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for relative style mask.
628bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.8
629bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
630bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final int RELATIVE = (1 << 7);
631bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
632bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
633bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for relative full style pattern.
634bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.8
635bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
636bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final int RELATIVE_FULL = RELATIVE | FULL;
637bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
638bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
639bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for relative style pattern.
640bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.8
641bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
642bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final int RELATIVE_LONG = RELATIVE | LONG;
643bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
644bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
645bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for relative style pattern.
646bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.8
647bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
648bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final int RELATIVE_MEDIUM = RELATIVE | MEDIUM;
649bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
650bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
651bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for relative style pattern.
652bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.8
653bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
654bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final int RELATIVE_SHORT = RELATIVE | SHORT;
655bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
656bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
657bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for relative default style pattern.
658bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.8
659bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
660bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final int RELATIVE_DEFAULT = RELATIVE | DEFAULT;
661bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
662bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /*
663bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * DATES
664bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
665bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
666bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
667bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with year.
668bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
669bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
670bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String YEAR = "y";
671bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
672bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
673bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with quarter.
674bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 50
675bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
676bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
677bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String QUARTER = "QQQQ";
678bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
679bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
680bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with abbreviated quarter.
681bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 50
682bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
683bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
684bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String ABBR_QUARTER = "QQQ";
685bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
686bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
687bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with year and quarter.
688bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
689bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
690bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String YEAR_QUARTER = "yQQQQ";
691bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
692bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
693bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with year and abbreviated quarter.
694bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
695bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
696bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String YEAR_ABBR_QUARTER = "yQQQ";
697bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
698bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
699bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with month.
700bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
701bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
702bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String MONTH = "MMMM";
703bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
704bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
705bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with abbreviated month.
706bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
707bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
708bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String ABBR_MONTH = "MMM";
709bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
710bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
711bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with numeric month.
712bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
713bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
714bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String NUM_MONTH = "M";
715bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
716bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
717bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with year and month.
718bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
719bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
720bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String YEAR_MONTH = "yMMMM";
721bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
722bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
723bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with year and abbreviated month.
724bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
725bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
726bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String YEAR_ABBR_MONTH = "yMMM";
727bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
728bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
729bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with year and numeric month.
730bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
731bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
732bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String YEAR_NUM_MONTH = "yM";
733bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
734bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
735bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with day.
736bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
737bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
738bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String DAY = "d";
739bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
740bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
741bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with year, month, and day.
742bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
743bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
744bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
745bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String YEAR_MONTH_DAY = "yMMMMd";
746bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
747bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
748bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with year, abbreviated month, and day.
749bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
750bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
751bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
752bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String YEAR_ABBR_MONTH_DAY = "yMMMd";
753bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
754bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
755bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with year, numeric month, and day.
756bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
757bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
758bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
759bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String YEAR_NUM_MONTH_DAY = "yMd";
760bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
761bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
762bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with weekday.
763bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 50
764bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
765bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
766bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String WEEKDAY = "EEEE";
767bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
768bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
769bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with abbreviated weekday.
770bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 50
771bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
772bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
773bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String ABBR_WEEKDAY = "E";
774bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
775bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
776bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with year, month, weekday, and day.
777bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
778bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
779bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
780bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String YEAR_MONTH_WEEKDAY_DAY = "yMMMMEEEEd";
781bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
782bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
783bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with year, abbreviated month, weekday, and day.
784bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
785bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
786bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
787bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String YEAR_ABBR_MONTH_WEEKDAY_DAY = "yMMMEd";
788bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
789bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
790bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with year, numeric month, weekday, and day.
791bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
792bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
793bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
794bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String YEAR_NUM_MONTH_WEEKDAY_DAY = "yMEd";
795bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
796bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
797bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with long month and day.
798bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
799bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
800bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
801bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String MONTH_DAY = "MMMMd";
802bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
803bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
804bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with abbreviated month and day.
805bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
806bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
807bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
808bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String ABBR_MONTH_DAY = "MMMd";
809bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
810bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
811bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with numeric month and day.
812bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
813bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
814bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
815bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String NUM_MONTH_DAY = "Md";
816bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
817bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
818bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with month, weekday, and day.
819bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
820bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
821bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
822bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String MONTH_WEEKDAY_DAY = "MMMMEEEEd";
823bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
824bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
825bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with abbreviated month, weekday, and day.
826bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
827bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
828bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
829bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String ABBR_MONTH_WEEKDAY_DAY = "MMMEd";
830bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
831bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
832bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with numeric month, weekday, and day.
833bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
834bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
835bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
836bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String NUM_MONTH_WEEKDAY_DAY = "MEd";
837bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
838bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /*
839bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * TIMES
840bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
841bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
842bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
843bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with hour, with the locale's preferred hour format (12 or 24).
844bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
845bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
846bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String HOUR = "j";
847bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
848bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
849bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with hour in 24-hour presentation.
850bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 50
851bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
852bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
853bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String HOUR24 = "H";
854bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
855bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
856bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with minute.
857bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 50
858bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
859bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
860bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String MINUTE = "m";
861bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
862bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
863bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with hour and minute, with the locale's preferred hour format (12 or 24).
864bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
865bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
866bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
867bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String HOUR_MINUTE = "jm";
868bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
869bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
870bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with hour and minute in 24-hour presentation.
871bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
872bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
873bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
874bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String HOUR24_MINUTE = "Hm";
875bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
876bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
877bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with second.
878bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 50
879bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
880bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
881bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String SECOND = "s";
882bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
883bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
884bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with hour, minute, and second,
885bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * with the locale's preferred hour format (12 or 24).
886bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
887bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
888bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
889bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String HOUR_MINUTE_SECOND = "jms";
890bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
891bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
892bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with hour, minute, and second in
893bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * 24-hour presentation.
894bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
895bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
896bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
897bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String HOUR24_MINUTE_SECOND = "Hms";
898bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
899bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
900bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with minute and second.
901bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Used in combinations date + time, date + time + zone, or time + zone.
902bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 4.0
903bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
904bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String MINUTE_SECOND = "ms";
905bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
906bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /*
907bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * TIMEZONES
908bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
909bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
910bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
911bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for <i>generic location format</i>, such as Los Angeles Time;
912bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * used in combinations date + time + zone, or time + zone.
913bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
914bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
915bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 50
916bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
917bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
918bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String LOCATION_TZ = "VVVV";
919bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
920bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
921bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for <i>generic non-location format</i>, such as Pacific Time;
922bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * used in combinations date + time + zone, or time + zone.
923bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
924bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
925bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 50
926bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
927bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
928bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String GENERIC_TZ = "vvvv";
929bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
930bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
931bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for <i>generic non-location format</i>, abbreviated if possible, such as PT;
932bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * used in combinations date + time + zone, or time + zone.
933bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
934bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
935bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 50
936bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
937bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
938bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String ABBR_GENERIC_TZ = "v";
939bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
940bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
941bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for <i>specific non-location format</i>, such as Pacific Daylight Time;
942bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * used in combinations date + time + zone, or time + zone.
943bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
944bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
945bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 50
946bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
947bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
948bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String SPECIFIC_TZ = "zzzz";
949bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
950bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
951bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for <i>specific non-location format</i>, abbreviated if possible, such as PDT;
952bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * used in combinations date + time + zone, or time + zone.
953bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
954bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
955bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 50
956bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
957bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
958bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String ABBR_SPECIFIC_TZ = "z";
959bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
960bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
961bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for <i>localized GMT/UTC format</i>, such as GMT+8:00 or HPG-8:00;
962bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * used in combinations date + time + zone, or time + zone.
963bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
964bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
965bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 50
966bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
967bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
968bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String ABBR_UTC_TZ = "ZZZZ";
969bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
970bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /*
971bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * deprecated skeleton constants
972bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
973bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
974bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
975bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with standalone month.
976bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @deprecated ICU 50 Use {@link #MONTH} instead.
977bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
978bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String STANDALONE_MONTH = "LLLL";
979bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
980bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
981bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with standalone abbreviated month.
982bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @deprecated ICU 50 Use {@link #ABBR_MONTH} instead.
983bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
984bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String ABBR_STANDALONE_MONTH = "LLL";
985bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
986bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
987bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with hour, minute, and generic timezone.
988bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @deprecated ICU 50 Use instead {@link #HOUR_MINUTE}+{@link #ABBR_GENERIC_TZ} or some other timezone presentation.
989bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
990bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String HOUR_MINUTE_GENERIC_TZ = "jmv";
991bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
992bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
993bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with hour, minute, and timezone.
994bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @deprecated ICU 50 Use instead {@link #HOUR_MINUTE}+{@link #ABBR_SPECIFIC_TZ} or some other timezone presentation.
995bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
996bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String HOUR_MINUTE_TZ = "jmz";
997bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
998bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
999bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with hour and generic timezone.
1000bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @deprecated ICU 50 Use instead {@link #HOUR}+{@link #ABBR_GENERIC_TZ} or some other timezone presentation.
1001bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1002bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String HOUR_GENERIC_TZ = "jv";
1003bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1004bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1005bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Constant for date skeleton with hour and timezone.
1006bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @deprecated ICU 50 Use instead {@link #HOUR}+{@link #ABBR_SPECIFIC_TZ} or some other timezone presentation.
1007bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1008bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final String HOUR_TZ = "jz";
1009bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1010bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Gets the time formatter with the default formatting style
1011bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * for the default locale.
1012bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return a time formatter.
1013bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1014bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1015bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static DateFormat getTimeInstance()
1016bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1017bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new DateFormat(java.text.DateFormat.getTimeInstance(
1018bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                java.text.DateFormat.DEFAULT,
1019bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                ULocale.getDefault(Category.FORMAT).toLocale()));
1020bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1021bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1022bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1023bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the time formatter with the given formatting style
1024bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * for the default locale.
1025bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param style the given formatting style. For example,
1026bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * SHORT for "h:mm a" in the US locale.
1027bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return a time formatter.
1028bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1029bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1030bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static DateFormat getTimeInstance(int style)
1031bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1032bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new DateFormat(java.text.DateFormat.getTimeInstance(
1033bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                getJDKFormatStyle(style),
1034bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                ULocale.getDefault(Category.FORMAT).toLocale()));
1035bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1036bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1037bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1038bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the time formatter with the given formatting style
1039bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * for the given locale.
1040bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param style the given formatting style. For example,
1041bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * SHORT for "h:mm a" in the US locale.
1042bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param aLocale the given locale.
1043bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return a time formatter.
1044bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1045bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1046bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static DateFormat getTimeInstance(int style,
1047bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                                                 Locale aLocale)
1048bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1049bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new DateFormat(java.text.DateFormat.getTimeInstance(getJDKFormatStyle(style), aLocale));
1050bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1051bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1052bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1053bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the time formatter with the given formatting style
1054bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * for the given locale.
1055bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param style the given formatting style. For example,
1056bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * SHORT for "h:mm a" in the US locale.
1057bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param locale the given ulocale.
1058bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return a time formatter.
1059bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.2
1060bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1061bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static DateFormat getTimeInstance(int style,
1062bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                                                 ULocale locale)
1063bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1064bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new DateFormat(java.text.DateFormat.getTimeInstance(getJDKFormatStyle(style), locale.toLocale()));
1065bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1066bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1067bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1068bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the date formatter with the default formatting style
1069bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * for the default locale.
1070bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return a date formatter.
1071bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1072bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1073bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static DateFormat getDateInstance()
1074bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1075bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new DateFormat(java.text.DateFormat.getDateInstance(
1076bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                java.text.DateFormat.DEFAULT,
1077bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                ULocale.getDefault(Category.FORMAT).toLocale()));
1078bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1079bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1080bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1081bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the date formatter with the given formatting style
1082bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * for the default locale.
1083bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param style the given formatting style. For example,
1084bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * SHORT for "M/d/yy" in the US locale.
1085bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return a date formatter.
1086bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1087bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1088bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static DateFormat getDateInstance(int style)
1089bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1090bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new DateFormat(java.text.DateFormat.getDateInstance(
1091bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                getJDKFormatStyle(style),
1092bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                ULocale.getDefault(Category.FORMAT).toLocale()));
1093bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1094bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1095bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1096bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the date formatter with the given formatting style
1097bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * for the given locale.
1098bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param style the given formatting style. For example,
1099bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * SHORT for "M/d/yy" in the US locale.
1100bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param aLocale the given locale.
1101bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return a date formatter.
1102bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1103bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1104bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static DateFormat getDateInstance(int style,
1105bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                                                 Locale aLocale)
1106bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1107bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new DateFormat(java.text.DateFormat.getDateInstance(getJDKFormatStyle(style), aLocale));
1108bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1109bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1110bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1111bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the date formatter with the given formatting style
1112bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * for the given locale.
1113bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param style the given formatting style. For example,
1114bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * SHORT for "M/d/yy" in the US locale.
1115bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param locale the given ulocale.
1116bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return a date formatter.
1117bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.2
1118bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1119bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static DateFormat getDateInstance(int style,
1120bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                                                 ULocale locale)
1121bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1122bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new DateFormat(java.text.DateFormat.getDateInstance(getJDKFormatStyle(style), locale.toLocale()));
1123bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1124bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1125bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1126bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the date/time formatter with the default formatting style
1127bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * for the default locale.
1128bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return a date/time formatter.
1129bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1130bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1131bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static DateFormat getDateTimeInstance()
1132bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1133bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new DateFormat(java.text.DateFormat.getDateTimeInstance(
1134bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                java.text.DateFormat.DEFAULT,
1135bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                java.text.DateFormat.DEFAULT,
1136bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                ULocale.getDefault(Category.FORMAT).toLocale()));
1137bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1138bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1139bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1140bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the date/time formatter with the given date and time
1141bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * formatting styles for the default locale.
1142bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param dateStyle the given date formatting style. For example,
1143bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * SHORT for "M/d/yy" in the US locale.
1144bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param timeStyle the given time formatting style. For example,
1145bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * SHORT for "h:mm a" in the US locale.
1146bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return a date/time formatter.
1147bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1148bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1149bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static DateFormat getDateTimeInstance(int dateStyle,
1150bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                                                       int timeStyle)
1151bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1152bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (dateStyle != NONE) {
1153bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            if (timeStyle != NONE) {
1154bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                return new DateFormat(java.text.DateFormat.getDateTimeInstance(
1155bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                        getJDKFormatStyle(dateStyle),
1156bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                        getJDKFormatStyle(timeStyle),
1157bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                        ULocale.getDefault(Category.FORMAT).toLocale()));
1158bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else {
1159bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                return new DateFormat(java.text.DateFormat.getDateInstance(
1160bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                        getJDKFormatStyle(dateStyle),
1161bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                        ULocale.getDefault(Category.FORMAT).toLocale()));
1162bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            }
1163bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
1164bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (timeStyle != NONE) {
1165bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return new DateFormat(java.text.DateFormat.getTimeInstance(
1166bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                    getJDKFormatStyle(timeStyle),
1167bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                    ULocale.getDefault(Category.FORMAT).toLocale()));
1168bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
1169bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return null;
1170bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1171bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1172bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1173bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the date/time formatter with the given formatting styles
1174bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * for the given locale.
1175bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param dateStyle the given date formatting style.
1176bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param timeStyle the given time formatting style.
1177bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param aLocale the given locale.
1178bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return a date/time formatter.
1179bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1180bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1181bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static DateFormat getDateTimeInstance(
1182bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        int dateStyle, int timeStyle, Locale aLocale)
1183bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1184bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (dateStyle != NONE) {
1185bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            if (timeStyle != NONE) {
1186bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                return new DateFormat(java.text.DateFormat.getDateTimeInstance(getJDKFormatStyle(dateStyle), getJDKFormatStyle(timeStyle), aLocale));
1187bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else {
1188bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                return new DateFormat(java.text.DateFormat.getDateInstance(getJDKFormatStyle(dateStyle), aLocale));
1189bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            }
1190bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
1191bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (timeStyle != NONE) {
1192bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return new DateFormat(java.text.DateFormat.getTimeInstance(getJDKFormatStyle(timeStyle), aLocale));
1193bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
1194bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return null;
1195bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1196bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1197bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1198bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the date/time formatter with the given formatting styles
1199bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * for the given locale.
1200bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param dateStyle the given date formatting style.
1201bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param timeStyle the given time formatting style.
1202bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param locale the given ulocale.
1203bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return a date/time formatter.
1204bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.2
1205bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1206bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static DateFormat getDateTimeInstance(
1207bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        int dateStyle, int timeStyle, ULocale locale)
1208bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1209bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (dateStyle != NONE) {
1210bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            if (timeStyle != NONE) {
1211bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                return new DateFormat(java.text.DateFormat.getDateTimeInstance(getJDKFormatStyle(dateStyle), getJDKFormatStyle(timeStyle), locale.toLocale()));
1212bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else {
1213bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                return new DateFormat(java.text.DateFormat.getDateInstance(getJDKFormatStyle(dateStyle), locale.toLocale()));
1214bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            }
1215bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
1216bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (timeStyle != NONE) {
1217bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return new DateFormat(java.text.DateFormat.getTimeInstance(getJDKFormatStyle(timeStyle), locale.toLocale()));
1218bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
1219bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return null;
1220bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1221bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1222bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1223bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns a default date/time formatter that uses the SHORT style for both the
1224bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * date and the time.
1225bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1226bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1227bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public final static DateFormat getInstance() {
1228bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new DateFormat(java.text.DateFormat.getDateTimeInstance(
1229bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                java.text.DateFormat.SHORT,
1230bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                java.text.DateFormat.SHORT,
1231bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                ULocale.getDefault(Category.FORMAT).toLocale()));
1232bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1233bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1234bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1235bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the set of locales for which DateFormats are installed.
1236bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the set of locales for which DateFormats are installed.
1237bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1238bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1239bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static Locale[] getAvailableLocales()
1240bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1241bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return java.text.DateFormat.getAvailableLocales();
1242bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1243bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1244bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1245bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * {@icu} Returns the set of locales for which DateFormats are installed.
1246bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the set of locales for which DateFormats are installed.
1247bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 3.2 (retain)
1248bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
1249bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1250bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static ULocale[] getAvailableULocales()
1251bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1252bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (availableULocales == null) {
1253bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            synchronized(DateFormat.class) {
1254bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                if (availableULocales == null) {
1255bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                    Locale[] locales = java.text.DateFormat.getAvailableLocales();
1256bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                    availableULocales = new ULocale[locales.length];
1257bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                    for (int i = 0; i < locales.length; ++i) {
1258bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                        availableULocales[i] = ULocale.forLocale(locales[i]);
1259bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                    }
1260bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                }
1261bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            }
1262bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
1263bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return availableULocales;
1264bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1265bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    private static volatile ULocale[] availableULocales;
1266bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1267bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1268bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Sets the calendar to be used by this date format.  Initially, the default
1269bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * calendar for the specified or default locale is used.
1270bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param newCalendar the new Calendar to be used by the date format
1271bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1272bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1273bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public void setCalendar(Calendar newCalendar)
1274bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1275bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        dateFormat.setCalendar(newCalendar.calendar);
1276bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1277bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1278bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1279bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the calendar associated with this date/time formatter.
1280bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the calendar associated with this date/time formatter.
1281bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1282bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1283bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public Calendar getCalendar()
1284bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1285bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new Calendar(dateFormat.getCalendar());
1286bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1287bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1288bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1289bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Sets the number formatter.
1290bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param newNumberFormat the given new NumberFormat.
1291bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1292bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1293bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public void setNumberFormat(NumberFormat newNumberFormat)
1294bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1295bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        dateFormat.setNumberFormat(newNumberFormat.numberFormat);
1296bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1297bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1298bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1299bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the number formatter which this date/time formatter uses to
1300bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * format and parse a time.
1301bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the number formatter which this date/time formatter uses.
1302bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1303bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1304bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public NumberFormat getNumberFormat()
1305bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1306bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new NumberFormat(dateFormat.getNumberFormat());
1307bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1308bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1309bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1310bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Sets the time zone for the calendar of this DateFormat object.
1311bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param zone the given new time zone.
1312bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1313bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1314bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public void setTimeZone(TimeZone zone)
1315bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1316bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        dateFormat.setTimeZone(zone.timeZone);
1317bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1318bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1319bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1320bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns the time zone.
1321bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @return the time zone associated with the calendar of DateFormat.
1322bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1323bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1324bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public TimeZone getTimeZone()
1325bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1326bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new TimeZone(dateFormat.getTimeZone());
1327bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1328bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1329bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1330bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Specifies whether date/time parsing is to be lenient.  With
1331bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * lenient parsing, the parser may use heuristics to interpret inputs that
1332bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * do not precisely match this object's format.  With strict parsing,
1333bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * inputs must match this object's format.
1334bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param lenient when true, parsing is lenient
1335bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see com.ibm.icu.util.Calendar#setLenient
1336bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1337bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1338bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public void setLenient(boolean lenient)
1339bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1340bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        dateFormat.setLenient(lenient);
1341bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1342bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1343bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1344bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Returns whether date/time parsing is lenient.
1345bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1346bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1347bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public boolean isLenient()
1348bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1349bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return dateFormat.isLenient();
1350bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1351bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1352bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1353bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Overrides hashCode.
1354bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1355bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1356bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public int hashCode() {
1357bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return dateFormat.hashCode();
1358bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1359bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1360bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1361bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Overrides equals.
1362bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1363bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1364bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public boolean equals(Object obj) {
1365bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        try {
1366bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return dateFormat.equals(((DateFormat)obj).dateFormat);
1367bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
1368bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        catch (Exception e) {
1369bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return false;
1370bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
1371bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1372bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1373bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1374bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Overrides clone.
1375bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1376bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1377bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public Object clone()
1378bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1379bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return new DateFormat((java.text.DateFormat)dateFormat.clone());
1380bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1381bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1382bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    //-------------------------------------------------------------------------
1383bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    // Public static interface for creating custon DateFormats for different
1384bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    // types of Calendars.
1385bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    //-------------------------------------------------------------------------
1386bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1387bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1388bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Creates a {@link DateFormat} object that can be used to format dates in
1389bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the calendar system specified by <code>cal</code>.
1390bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <p>
1391bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param cal   The calendar system for which a date format is desired.
1392bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1393bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param dateStyle The type of date format desired.  This can be
1394bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              {@link DateFormat#SHORT}, {@link DateFormat#MEDIUM},
1395bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              etc.
1396bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1397bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param locale The locale for which the date format is desired.
1398bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1399bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1400bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    static final public DateFormat getDateInstance(Calendar cal, int dateStyle, Locale locale)
1401bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1402bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        DateFormat df = getDateInstance(dateStyle, locale);
1403bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        df.setCalendar(cal);
1404bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return df;
1405bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1406bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1407bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1408bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Creates a {@link DateFormat} object that can be used to format dates in
1409bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the calendar system specified by <code>cal</code>.
1410bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <p>
1411bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param cal   The calendar system for which a date format is desired.
1412bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1413bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param dateStyle The type of date format desired.  This can be
1414bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              {@link DateFormat#SHORT}, {@link DateFormat#MEDIUM},
1415bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              etc.
1416bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1417bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param locale The locale for which the date format is desired.
1418bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.2
1419bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1420bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    static final public DateFormat getDateInstance(Calendar cal, int dateStyle, ULocale locale)
1421bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1422bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        DateFormat df = getDateInstance(dateStyle, locale);
1423bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        df.setCalendar(cal);
1424bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return df;
1425bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1426bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1427bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1428bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Creates a {@link DateFormat} object that can be used to format times in
1429bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the calendar system specified by <code>cal</code>.
1430bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <p>
1431bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <b>Note:</b> When this functionality is moved into the core JDK, this method
1432bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * will probably be replaced by a new overload of {@link DateFormat#getInstance}.
1433bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <p>
1434bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param cal   The calendar system for which a time format is desired.
1435bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1436bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param timeStyle The type of time format desired.  This can be
1437bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              {@link DateFormat#SHORT}, {@link DateFormat#MEDIUM},
1438bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              etc.
1439bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1440bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param locale The locale for which the time format is desired.
1441bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1442bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see DateFormat#getTimeInstance
1443bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1444bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1445bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    static final public DateFormat getTimeInstance(Calendar cal, int timeStyle, Locale locale)
1446bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1447bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        DateFormat df = getTimeInstance(timeStyle, locale);
1448bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        df.setCalendar(cal);
1449bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return df;
1450bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1451bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1452bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1453bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Creates a {@link DateFormat} object that can be used to format times in
1454bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the calendar system specified by <code>cal</code>.
1455bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <p>
1456bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <b>Note:</b> When this functionality is moved into the core JDK, this method
1457bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * will probably be replaced by a new overload of {@link DateFormat#getInstance}.
1458bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <p>
1459bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param cal   The calendar system for which a time format is desired.
1460bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1461bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param timeStyle The type of time format desired.  This can be
1462bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              {@link DateFormat#SHORT}, {@link DateFormat#MEDIUM},
1463bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              etc.
1464bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1465bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param locale The locale for which the time format is desired.
1466bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1467bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see DateFormat#getTimeInstance
1468bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.2
1469bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1470bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    static final public DateFormat getTimeInstance(Calendar cal, int timeStyle, ULocale locale)
1471bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1472bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        DateFormat df = getTimeInstance(timeStyle, locale);
1473bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        df.setCalendar(cal);
1474bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return df;
1475bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1476bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1477bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1478bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Creates a {@link DateFormat} object that can be used to format dates and times in
1479bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the calendar system specified by <code>cal</code>.
1480bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <p>
1481bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <b>Note:</b> When this functionality is moved into the core JDK, this method
1482bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * will probably be replaced by a new overload of {@link DateFormat#getInstance}.
1483bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <p>
1484bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param cal   The calendar system for which a date/time format is desired.
1485bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1486bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param dateStyle The type of date format desired.  This can be
1487bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              {@link DateFormat#SHORT}, {@link DateFormat#MEDIUM},
1488bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              etc.
1489bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1490bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param timeStyle The type of time format desired.  This can be
1491bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              {@link DateFormat#SHORT}, {@link DateFormat#MEDIUM},
1492bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              etc.
1493bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1494bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param locale The locale for which the date/time format is desired.
1495bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1496bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see DateFormat#getDateTimeInstance
1497bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1498bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1499bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    static final public DateFormat getDateTimeInstance(Calendar cal, int dateStyle,
1500bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                                                 int timeStyle, Locale locale)
1501bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1502bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        DateFormat df = getDateTimeInstance(dateStyle, timeStyle, locale);
1503bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        df.setCalendar(cal);
1504bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return df;
1505bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1506bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1507bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1508bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Creates a {@link DateFormat} object that can be used to format dates and times in
1509bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * the calendar system specified by <code>cal</code>.
1510bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <p>
1511bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <b>Note:</b> When this functionality is moved into the core JDK, this method
1512bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * will probably be replaced by a new overload of {@link DateFormat#getInstance}.
1513bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <p>
1514bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param cal   The calendar system for which a date/time format is desired.
1515bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1516bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param dateStyle The type of date format desired.  This can be
1517bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              {@link DateFormat#SHORT}, {@link DateFormat#MEDIUM},
1518bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              etc.
1519bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1520bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param timeStyle The type of time format desired.  This can be
1521bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              {@link DateFormat#SHORT}, {@link DateFormat#MEDIUM},
1522bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *              etc.
1523bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1524bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @param locale The locale for which the date/time format is desired.
1525bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1526bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @see DateFormat#getDateTimeInstance
1527bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.2
1528bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1529bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    static final public DateFormat getDateTimeInstance(Calendar cal, int dateStyle,
1530bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                                                 int timeStyle, ULocale locale)
1531bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
1532bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        DateFormat df = getDateTimeInstance(dateStyle, timeStyle, locale);
1533bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        df.setCalendar(cal);
1534bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return df;
1535bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1536bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1537bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1538bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Convenience overload.
1539bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1540bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1541bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    static final public DateFormat getInstance(Calendar cal, Locale locale) {
1542bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return getDateTimeInstance(cal, DateFormat.MEDIUM, DateFormat.SHORT, locale);
1543bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1544bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1545bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1546bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Convenience overload.
1547bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.2
1548bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
1549bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1550bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    static final public DateFormat getInstance(Calendar cal, ULocale locale) {
1551bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return getDateTimeInstance(cal, DateFormat.MEDIUM, DateFormat.SHORT, locale);
1552bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1553bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1554bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1555bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Convenience overload.
1556bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1557bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1558bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    static final public DateFormat getInstance(Calendar cal) {
1559bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return getInstance(cal, ULocale.getDefault(Category.FORMAT));
1560bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1561bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1562bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1563bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Convenience overload.
1564bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1565bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1566bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    static final public DateFormat getDateInstance(Calendar cal, int dateStyle) {
1567bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return getDateInstance(cal, dateStyle, ULocale.getDefault(Category.FORMAT));
1568bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1569bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1570bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1571bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Convenience overload.
1572bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1573bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1574bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    static final public DateFormat getTimeInstance(Calendar cal, int timeStyle) {
1575bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return getTimeInstance(cal, timeStyle, ULocale.getDefault(Category.FORMAT));
1576bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1577bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1578bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1579bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Convenience overload.
1580bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 2.0
1581bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1582bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    static final public DateFormat getDateTimeInstance(Calendar cal, int dateStyle, int timeStyle) {
1583bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return getDateTimeInstance(cal, dateStyle, timeStyle, ULocale.getDefault(Category.FORMAT));
1584bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1585bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1586bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
1587bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} Convenience overload.
1588bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @stable ICU 4.0
1589bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
1590bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public final static DateFormat getPatternInstance(String pattern) {
1591bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        throw new UnsupportedOperationException("Method not supported by com.ibm.icu.base");
1592bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    }
1593bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1594bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
1595bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} Convenience overload.
1596bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @stable ICU 4.0
1597bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
1598bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public final static DateFormat getPatternInstance(String pattern, Locale locale) {
1599bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        throw new UnsupportedOperationException("Method not supported by com.ibm.icu.base");
1600bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    }
1601bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1602bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
1603bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} Returns a {@link DateFormat} object that can be used to format dates and times in
1604bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * the given locale.
1605bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * <p>
1606bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * <b>Note:</b> When this functionality is moved into the core JDK, this method
1607bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * will probably be replaced by a new overload of {@link DateFormat#getInstance}.
1608bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * <p>
1609bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
1610bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param pattern The pattern that selects the fields to be formatted. (Uses the
1611bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *              {@link DateTimePatternGenerator}.) This can be {@link DateFormat#ABBR_MONTH},
1612bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *              {@link DateFormat#MONTH_WEEKDAY_DAY}, etc.
1613bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
1614bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param locale The locale for which the date/time format is desired.
1615bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
1616bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @stable ICU 4.0
1617bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
1618bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public final static DateFormat getPatternInstance(String pattern, ULocale locale) {
1619bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        throw new UnsupportedOperationException("Method not supported by com.ibm.icu.base");
1620bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    }
1621bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1622bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
1623bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} Convenience overload.
1624bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @stable ICU 4.0
1625bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
1626bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public final static DateFormat getPatternInstance(Calendar cal, String pattern, Locale locale) {
1627bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        throw new UnsupportedOperationException("Method not supported by com.ibm.icu.base");
1628bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    }
1629bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1630bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    /**
1631bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * {@icu} Creates a {@link DateFormat} object that can be used to format dates and
1632bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * times in the calendar system specified by <code>cal</code>.
1633bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
1634bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * <p><b>Note:</b> When this functionality is moved into the core JDK, this method
1635bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * will probably be replaced by a new overload of {@link DateFormat#getInstance}.
1636bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
1637bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param cal   The calendar system for which a date/time format is desired.
1638bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
1639bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param pattern The pattern that selects the fields to be formatted. (Uses the
1640bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *              {@link DateTimePatternGenerator}.)  This can be
1641bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *              {@link DateFormat#ABBR_MONTH}, {@link DateFormat#MONTH_WEEKDAY_DAY},
1642bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *              etc.
1643bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
1644bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @param locale The locale for which the date/time format is desired.
1645bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     *
1646bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     * @stable ICU 4.0
1647bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//     */
1648bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    public final static DateFormat getPatternInstance(
1649bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        Calendar cal, String pattern, ULocale locale) {
1650bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        throw new UnsupportedOperationException("Method not supported by com.ibm.icu.base");
1651bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//    }
1652bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1653bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1654bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * The instances of this inner class are used as attribute keys and values
1655bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * in AttributedCharacterIterator that
1656bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * DateFormat.formatToCharacterIterator() method returns.
1657bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     *
1658bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <p>There is no public constructor to this class, the only instances are the
1659bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * constants defined here.
1660bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * <p>
1661bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 3.8
1662bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
1663bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static class Field extends Format.Field {
1664bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1665bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        private static final long serialVersionUID = -3627456821000730829L;
1666bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1667bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        // Max number of calendar fields
1668bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        private static final int CAL_FIELD_COUNT;
1669bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1670bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        // Table for mapping calendar field number to DateFormat.Field
1671bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        private static final Field[] CAL_FIELDS;
1672bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1673bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        // Map for resolving DateFormat.Field by name
1674bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        private static final Map<String, Field> FIELD_NAME_MAP;
1675bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1676bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        static {
1677bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            Calendar cal = Calendar.getInstance();
1678bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            CAL_FIELD_COUNT = cal.getFieldCount();
1679bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            CAL_FIELDS = new Field[CAL_FIELD_COUNT];
1680bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            FIELD_NAME_MAP = new HashMap<String, Field>(CAL_FIELD_COUNT);
1681bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
1682bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1683bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        // Java fields -------------------
1684bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1685bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1686bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the time of day indicator(am/pm).
1687bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1688bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1689bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field AM_PM = new Field("am pm", Calendar.AM_PM);
1690bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1691bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1692bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the day of month field.
1693bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1694bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1695bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field DAY_OF_MONTH = new Field("day of month", Calendar.DAY_OF_MONTH);
1696bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1697bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1698bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the day of week field.
1699bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1700bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1701bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field DAY_OF_WEEK = new Field("day of week", Calendar.DAY_OF_WEEK);
1702bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1703bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1704bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the day of week in month field.
1705bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1706bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1707bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field DAY_OF_WEEK_IN_MONTH =
1708bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            new Field("day of week in month", Calendar.DAY_OF_WEEK_IN_MONTH);
1709bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1710bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1711bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the day of year field.
1712bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1713bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1714bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field DAY_OF_YEAR = new Field("day of year", Calendar.DAY_OF_YEAR);
1715bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1716bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1717bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the era field.
1718bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1719bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1720bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field ERA = new Field("era", Calendar.ERA);
1721bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1722bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1723bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the hour(0-23) of day field.
1724bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1725bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1726bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field HOUR_OF_DAY0 = new Field("hour of day", Calendar.HOUR_OF_DAY);
1727bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1728bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1729bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the hour(1-24) of day field.
1730bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1731bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1732bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field HOUR_OF_DAY1 = new Field("hour of day 1", -1);
1733bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1734bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1735bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the hour(0-11) field.
1736bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1737bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1738bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field HOUR0 = new Field("hour", Calendar.HOUR);
1739bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1740bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1741bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the hour(1-12) field.
1742bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1743bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1744bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field HOUR1 = new Field("hour 1", -1);
1745bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1746bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1747bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the millisecond field.
1748bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1749bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1750bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field MILLISECOND = new Field("millisecond", Calendar.MILLISECOND);
1751bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1752bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1753bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the minute field.
1754bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1755bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1756bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field MINUTE = new Field("minute", Calendar.MINUTE);
1757bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1758bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1759bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the month field.
1760bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1761bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1762bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field MONTH = new Field("month", Calendar.MONTH);
1763bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1764bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1765bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the second field.
1766bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1767bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1768bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field SECOND = new Field("second", Calendar.SECOND);
1769bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1770bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1771bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the time zone field.
1772bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1773bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1774bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field TIME_ZONE = new Field("time zone", -1);
1775bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1776bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1777bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the week of month field.
1778bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1779bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1780bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field WEEK_OF_MONTH =
1781bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            new Field("week of month", Calendar.WEEK_OF_MONTH);
1782bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1783bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1784bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the week of year field.
1785bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1786bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1787bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field WEEK_OF_YEAR = new Field("week of year", Calendar.WEEK_OF_YEAR);
1788bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1789bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1790bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constant identifying the year field.
1791bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1792bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1793bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field YEAR = new Field("year", Calendar.YEAR);
1794bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1795bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1796bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        // ICU only fields -------------------
1797bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1798bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        /**
1799bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * Constant identifying the local day of week field.
1800bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * @stable ICU 3.8
1801bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         */
1802bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        public static final Field DOW_LOCAL = new Field("local day of week", Calendar.DOW_LOCAL);
1803bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1804bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        /**
1805bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * Constant identifying the extended year field.
1806bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * @stable ICU 3.8
1807bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         */
1808bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        public static final Field EXTENDED_YEAR = new Field("extended year",
1809bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//                                                            Calendar.EXTENDED_YEAR);
1810bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1811bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        /**
1812bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * Constant identifying the Julian day field.
1813bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * @stable ICU 3.8
1814bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         */
1815bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        public static final Field JULIAN_DAY = new Field("Julian day", Calendar.JULIAN_DAY);
1816bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1817bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        /**
1818bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * Constant identifying the milliseconds in day field.
1819bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * @stable ICU 3.8
1820bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         */
1821bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        public static final Field MILLISECONDS_IN_DAY =
1822bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//            new Field("milliseconds in day", Calendar.MILLISECONDS_IN_DAY);
1823bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1824bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        /**
1825bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * Constant identifying the year used with week of year field.
1826bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * @stable ICU 3.8
1827bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         */
1828bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        public static final Field YEAR_WOY = new Field("year for week of year", Calendar.YEAR_WOY);
1829bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1830bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        /**
1831bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * Constant identifying the quarter field.
1832bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         * @stable ICU 3.8
1833bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//         */
1834bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//        public static final Field QUARTER = new Field("quarter", -1);
1835bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1836bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        // Stand alone types are variants for its base types.  So we do not define Field for
1837bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        // them.
1838bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /*
1839bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field STANDALONE_DAY =
1840bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            new Field("stand alone day of week", Calendar.DAY_OF_WEEK);
1841bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field STANDALONE_MONTH = new Field("stand alone month", Calendar.MONTH);
1842bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static final Field STANDALONE_QUARTER = new Field("stand alone quarter", -1);
1843bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        */
1844bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1845bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        // Corresponding calendar field
1846bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        private final int calendarField;
1847bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1848bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1849bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Constructs a <code>DateFormat.Field</code> with the given name and
1850bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * the <code>Calendar</code> field which this attribute represents.  Use -1 for
1851bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * <code>calendarField</code> if this field does not have a corresponding
1852bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * <code>Calendar</code> field.
1853bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         *
1854bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @param name          Name of the attribute
1855bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @param calendarField <code>Calendar</code> field constant
1856bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         *
1857bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1858bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1859bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        protected Field(String name, int calendarField) {
1860bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            super(name);
1861bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            this.calendarField = calendarField;
1862bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            if (this.getClass() == DateFormat.Field.class) {
1863bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                FIELD_NAME_MAP.put(name, this);
1864bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                if (calendarField >= 0 && calendarField < CAL_FIELD_COUNT) {
1865bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                    CAL_FIELDS[calendarField] = this;
1866bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                }
1867bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            }
1868bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
1869bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1870bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1871bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Returns the <code>Field</code> constant that corresponds to the <code>
1872bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Calendar</code> field <code>calendarField</code>.  If there is no
1873bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * corresponding <code>Field</code> is available, null is returned.
1874bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         *
1875bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @param calendarField <code>Calendar</code> field constant
1876bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @return <code>Field</code> associated with the <code>calendarField</code>,
1877bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * or null if no associated <code>Field</code> is available.
1878bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @throws IllegalArgumentException if <code>calendarField</code> is not
1879bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * a valid <code>Calendar</code> field constant.
1880bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         *
1881bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1882bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1883bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public static DateFormat.Field ofCalendarField(int calendarField) {
1884bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            if (calendarField < 0 || calendarField >= CAL_FIELD_COUNT) {
1885bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                throw new IllegalArgumentException("Calendar field number is out of range");
1886bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            }
1887bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return CAL_FIELDS[calendarField];
1888bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
1889bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1890bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1891bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Returns the <code>Calendar</code> field associated with this attribute.
1892bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * If there is no corresponding <code>Calendar</code> available, this will
1893bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * return -1.
1894bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         *
1895bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @return <code>Calendar</code> constant for this attribute.
1896bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         *
1897bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1898bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1899bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        public int getCalendarField() {
1900bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return calendarField;
1901bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
1902bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1903bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        /**
1904bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * Resolves instances being deserialized to the predefined constants.
1905bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         *
1906bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @throws InvalidObjectException if the constant could not be resolved.
1907bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         *
1908bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         * @stable ICU 3.8
1909bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert         */
1910bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        protected Object readResolve() throws InvalidObjectException {
1911bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            ///CLOVER:OFF
1912bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            if (this.getClass() != DateFormat.Field.class) {
1913bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                throw new InvalidObjectException(
1914bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                    "A subclass of DateFormat.Field must implement readResolve.");
1915bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            }
1916bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            ///CLOVER:ON
1917bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            Object o = FIELD_NAME_MAP.get(this.getName());
1918bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            ///CLOVER:OFF
1919bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            if (o == null) {
1920bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                throw new InvalidObjectException("Unknown attribute name.");
1921bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            }
1922bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            ///CLOVER:ON
1923bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return o;
1924bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
1925bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1926bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1927bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    private static int getJDKFormatStyle(int icuFormatStyle) {
1928bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        switch (icuFormatStyle) {
1929bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        case DateFormat.FULL:
1930bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return java.text.DateFormat.FULL;
1931bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        case DateFormat.LONG:
1932bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return java.text.DateFormat.LONG;
1933bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        case DateFormat.MEDIUM:
1934bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return java.text.DateFormat.MEDIUM;
1935bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        case DateFormat.SHORT:
1936bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return java.text.DateFormat.SHORT;
1937bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        default:
1938bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            throw new UnsupportedOperationException("Style not supported by com.ibm.icu.base");
1939bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
1940bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
1941bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1942bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1943bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    protected static FieldPosition toJDKFieldPosition(FieldPosition icuPos) {
1944bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (icuPos == null) {
1945bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            return null;
1946bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
1947bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1948bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        int fieldID = icuPos.getField();
1949bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        Format.Field fieldAttribute = icuPos.getFieldAttribute();
1950bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1951bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        FieldPosition jdkPos = null;
1952bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1953bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (fieldID >= 0) {
1954bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            switch (fieldID) {
1955bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case ERA_FIELD:
1956bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.ERA_FIELD;
1957bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
1958bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case YEAR_FIELD:
1959bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.YEAR_FIELD;
1960bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
1961bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case MONTH_FIELD:
1962bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.MONTH_FIELD;
1963bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
1964bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case DATE_FIELD:
1965bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.DATE_FIELD;
1966bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
1967bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case HOUR_OF_DAY1_FIELD:
1968bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.HOUR_OF_DAY1_FIELD;
1969bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
1970bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case HOUR_OF_DAY0_FIELD:
1971bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.HOUR_OF_DAY0_FIELD;
1972bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
1973bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case MINUTE_FIELD:
1974bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.MINUTE_FIELD;
1975bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
1976bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case SECOND_FIELD:
1977bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.SECOND_FIELD;
1978bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
1979bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case FRACTIONAL_SECOND_FIELD: // MILLISECOND_FIELD
1980bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.MILLISECOND_FIELD;
1981bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
1982bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case DAY_OF_WEEK_FIELD:
1983bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.DAY_OF_WEEK_FIELD;
1984bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
1985bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case DAY_OF_YEAR_FIELD:
1986bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.DAY_OF_YEAR_FIELD;
1987bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
1988bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case DAY_OF_WEEK_IN_MONTH_FIELD:
1989bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.DAY_OF_WEEK_IN_MONTH_FIELD;
1990bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
1991bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case WEEK_OF_YEAR_FIELD:
1992bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.WEEK_OF_YEAR_FIELD;
1993bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
1994bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case WEEK_OF_MONTH_FIELD:
1995bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.WEEK_OF_MONTH_FIELD;
1996bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
1997bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case AM_PM_FIELD:
1998bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.AM_PM_FIELD;
1999bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
2000bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case HOUR1_FIELD:
2001bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.HOUR1_FIELD;
2002bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
2003bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case HOUR0_FIELD:
2004bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.HOUR0_FIELD;
2005bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
2006bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case TIMEZONE_FIELD:
2007bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldID = java.text.DateFormat.TIMEZONE_FIELD;
2008bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
2009bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
2010bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case YEAR_WOY_FIELD:
2011bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case DOW_LOCAL_FIELD:
2012bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case EXTENDED_YEAR_FIELD:
2013bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case JULIAN_DAY_FIELD:
2014bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case MILLISECONDS_IN_DAY_FIELD:
2015bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case TIMEZONE_RFC_FIELD:
2016bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case TIMEZONE_GENERIC_FIELD:
2017bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case STANDALONE_DAY_FIELD:
2018bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case STANDALONE_MONTH_FIELD:
2019bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case QUARTER_FIELD:
2020bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case STANDALONE_QUARTER_FIELD:
2021bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            case TIMEZONE_SPECIAL_FIELD:
2022bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                throw new UnsupportedOperationException("Format Field ID not supported by com.ibm.icu.base");
2023bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
2024bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            default:
2025bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                // just let it go
2026bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                break;
2027bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            }
2028bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
2029bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
2030bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        if (fieldAttribute != null) {
2031bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            // map field
2032bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            if (fieldAttribute.equals(Field.AM_PM)) {
2033bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.AM_PM;
2034bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.DAY_OF_MONTH)) {
2035bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.DAY_OF_MONTH;
2036bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.DAY_OF_WEEK)) {
2037bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.DAY_OF_WEEK;
2038bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.DAY_OF_WEEK_IN_MONTH)) {
2039bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.DAY_OF_WEEK_IN_MONTH;
2040bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.DAY_OF_YEAR)) {
2041bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.DAY_OF_YEAR;
2042bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.ERA)) {
2043bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.ERA;
2044bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.HOUR_OF_DAY0)) {
2045bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.HOUR_OF_DAY0;
2046bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.HOUR_OF_DAY1)) {
2047bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.HOUR_OF_DAY1;
2048bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.HOUR0)) {
2049bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.HOUR0;
2050bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.HOUR1)) {
2051bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.HOUR1;
2052bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.MILLISECOND)) {
2053bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.MILLISECOND;
2054bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.MINUTE)) {
2055bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.MINUTE;
2056bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.MONTH)) {
2057bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.MONTH;
2058bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.SECOND)) {
2059bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.SECOND;
2060bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.TIME_ZONE)) {
2061bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.TIME_ZONE;
2062bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.WEEK_OF_MONTH)) {
2063bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.WEEK_OF_MONTH;
2064bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.WEEK_OF_YEAR)) {
2065bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.WEEK_OF_YEAR;
2066bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            } else if (fieldAttribute.equals(Field.YEAR)) {
2067bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                fieldAttribute = java.text.DateFormat.Field.YEAR;
2068bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            }
2069bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//            else if (fieldAttribute.equals(Field.DOW_LOCAL)
2070bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//                    || fieldAttribute.equals(Field.EXTENDED_YEAR)
2071bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//                    || fieldAttribute.equals(Field.JULIAN_DAY)
2072bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//                    || fieldAttribute.equals(Field.MILLISECONDS_IN_DAY)
2073bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//                    || fieldAttribute.equals(Field.YEAR_WOY)
2074bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//                    || fieldAttribute.equals(Field.QUARTER)) {
2075bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//                // Not supported
2076bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//                throw new UnsupportedOperationException("Format Field not supported by com.ibm.icu.base");
2077bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert//            }
2078bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
2079bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            jdkPos = new FieldPosition(fieldAttribute, fieldID);
2080bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        } else {
2081bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            jdkPos = new FieldPosition(fieldID);
2082bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
2083bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
2084bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        jdkPos.setBeginIndex(icuPos.getBeginIndex());
2085bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        jdkPos.setEndIndex(icuPos.getEndIndex());
2086bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
2087bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return jdkPos;
2088bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
2089bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert}
2090