DateFormat.java revision d2d7abef3e9b73a57cdf1f2afd678d7f48945679
1f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.text; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughesimport com.ibm.icu4jni.util.ICU; 217365de1056414750d0a7d1fdd26025fd247f0d04Jesse Wilsonimport com.ibm.icu4jni.util.LocaleData; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InvalidObjectException; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Calendar; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Date; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Hashtable; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Locale; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.TimeZone; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * An abstract class for date/time formatting subclasses which formats and 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * parses dates or time in a language-independent manner. The date/time 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting subclass, such as {@link SimpleDateFormat}, allows for formatting 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (i.e., date -> text), parsing (text -> date), and normalization. The date is 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * represented as a {@code Date} object or as the milliseconds since January 1, 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1970, 00:00:00 GMT. 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DateFormat provides many class methods for obtaining default date/time 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatters based on the default or a given locale and a number of formatting 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * styles. The formatting styles include FULL, LONG, MEDIUM, and SHORT. More 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * details and examples for using these styles are provided in the method 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * descriptions. 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DateFormat} helps you to format and parse dates for any locale. Your 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * code can be completely independent of the locale conventions for months, days 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the week, or even the calendar format: lunar vs. solar. 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * To format a date for the current Locale, use one of the static factory 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * methods: 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote> 509b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * myString = DateFormat.getDateInstance().format(myDate); 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 549b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote> 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If you are formatting multiple dates, it is more efficient to get the format 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and use it multiple times so that the system doesn't have to fetch the 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * information about the local language and country conventions multiple times. 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote> 619b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DateFormat df = DateFormat.getDateInstance(); 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * for (int i = 0; i < a.length; ++i) { 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * output.println(df.format(myDate[i]) + "; "); 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 689b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote> 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * To format a number for a different locale, specify it in the call to 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code getDateInstance}: 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote> 749b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE); 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 789b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote> 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DateFormat} can also be used to parse strings: 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <blockquote> 839b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * myDate = df.parse(myString); 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 879b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </blockquote> 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Use {@code getDateInstance} to get the normal date format for a country. 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Other static factory methods are available: Use {@code getTimeInstance} to 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * get the time format for a country. Use {@code getDateTimeInstance} to get the 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * date and time format. You can pass in different options to these factory 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * methods to control the length of the result; from SHORT to MEDIUM to LONG to 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * FULL. The exact result depends on the locale, but generally: 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul> 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>SHORT is completely numeric, such as 12.13.52 or 3:30pm 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>MEDIUM is longer, such as Jan 12, 1952 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>LONG is longer, such as January 12, 1952 or 3:30:32pm 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>FULL is pretty completely specified, such as Tuesday, April 12, 1952 AD 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or 3:30:42pm PST. 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul> 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If needed, the time zone can be set on the format. For even greater control 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * over the formatting or parsing, try casting the {@code DateFormat} you get 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * from the factory methods to a {@code SimpleDateFormat}. This will work for 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the majority of countries; just remember to put it in a try block in case you 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * encounter an unusual one. 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * There are versions of the parse and format methods which use 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code ParsePosition} and {@code FieldPosition} to allow you to 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul> 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>progressively parse through pieces of a string; 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>align any particular field. 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul> 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <h4>Synchronization</h4> 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Date formats are not synchronized. It is recommended to create separate 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * format instances for each thread. If multiple threads access a format 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * concurrently, it must be synchronized externally. 1219b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see NumberFormat 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see SimpleDateFormat 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see Calendar 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see TimeZone 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class DateFormat extends Format { 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final long serialVersionUID = 7218322306649953788L; 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The calendar that this {@code DateFormat} uses to format a number 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * representing a date. 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected Calendar calendar; 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The number format used to format a number. 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected NumberFormat numberFormat; 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The format style constant defining the default format style. The default 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is MEDIUM. 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int DEFAULT = 2; 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The format style constant defining the full style. 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int FULL = 0; 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The format style constant defining the long style. 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int LONG = 1; 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The format style constant defining the medium style. 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int MEDIUM = 2; 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The format style constant defining the short style. 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int SHORT = 3; 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code FieldPosition} selector for 'G' field alignment, corresponds 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the {@link Calendar#ERA} field. 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int ERA_FIELD = 0; 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code FieldPosition} selector for 'y' field alignment, corresponds 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the {@link Calendar#YEAR} field. 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int YEAR_FIELD = 1; 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code FieldPosition} selector for 'M' field alignment, corresponds 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the {@link Calendar#MONTH} field. 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int MONTH_FIELD = 2; 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code FieldPosition} selector for 'd' field alignment, corresponds 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the {@link Calendar#DATE} field. 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int DATE_FIELD = 3; 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code FieldPosition} selector for 'k' field alignment, corresponds 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the {@link Calendar#HOUR_OF_DAY} field. {@code HOUR_OF_DAY1_FIELD} is 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * used for the one-based 24-hour clock. For example, 23:59 + 01:00 results 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in 24:59. 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int HOUR_OF_DAY1_FIELD = 4; 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code FieldPosition} selector for 'H' field alignment, corresponds 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the {@link Calendar#HOUR_OF_DAY} field. {@code HOUR_OF_DAY0_FIELD} is 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * used for the zero-based 24-hour clock. For example, 23:59 + 01:00 results 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in 00:59. 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int HOUR_OF_DAY0_FIELD = 5; 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * FieldPosition selector for 'm' field alignment, corresponds to the 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link Calendar#MINUTE} field. 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int MINUTE_FIELD = 6; 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * FieldPosition selector for 's' field alignment, corresponds to the 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link Calendar#SECOND} field. 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int SECOND_FIELD = 7; 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * FieldPosition selector for 'S' field alignment, corresponds to the 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link Calendar#MILLISECOND} field. 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int MILLISECOND_FIELD = 8; 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * FieldPosition selector for 'E' field alignment, corresponds to the 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link Calendar#DAY_OF_WEEK} field. 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int DAY_OF_WEEK_FIELD = 9; 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * FieldPosition selector for 'D' field alignment, corresponds to the 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link Calendar#DAY_OF_YEAR} field. 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int DAY_OF_YEAR_FIELD = 10; 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * FieldPosition selector for 'F' field alignment, corresponds to the 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link Calendar#DAY_OF_WEEK_IN_MONTH} field. 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int DAY_OF_WEEK_IN_MONTH_FIELD = 11; 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * FieldPosition selector for 'w' field alignment, corresponds to the 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link Calendar#WEEK_OF_YEAR} field. 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int WEEK_OF_YEAR_FIELD = 12; 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * FieldPosition selector for 'W' field alignment, corresponds to the 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link Calendar#WEEK_OF_MONTH} field. 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int WEEK_OF_MONTH_FIELD = 13; 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * FieldPosition selector for 'a' field alignment, corresponds to the 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link Calendar#AM_PM} field. 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int AM_PM_FIELD = 14; 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * FieldPosition selector for 'h' field alignment, corresponding to the 264143e8c9cf91cfc01c3c91c8e93cad661ec7554eeElliott Hughes * {@link Calendar#HOUR} field. 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int HOUR1_FIELD = 15; 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 269143e8c9cf91cfc01c3c91c8e93cad661ec7554eeElliott Hughes * The {@code FieldPosition} selector for 'K' field alignment, corresponding to the 270143e8c9cf91cfc01c3c91c8e93cad661ec7554eeElliott Hughes * {@link Calendar#HOUR} field. 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int HOUR0_FIELD = 16; 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code FieldPosition} selector for 'z' field alignment, corresponds 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the {@link Calendar#ZONE_OFFSET} and {@link Calendar#DST_OFFSET} 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * fields. 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static int TIMEZONE_FIELD = 17; 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new instance of {@code DateFormat}. 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected DateFormat() { 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a new instance of {@code DateFormat} with the same properties. 289f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a shallow copy of this {@code DateFormat}. 291f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see java.lang.Cloneable 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object clone() { 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DateFormat clone = (DateFormat) super.clone(); 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project clone.calendar = (Calendar) calendar.clone(); 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project clone.numberFormat = (NumberFormat) numberFormat.clone(); 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return clone; 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares this date format with the specified object and indicates if they 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are equal. 305f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to compare with this date format. 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if {@code object} is a {@code DateFormat} object and 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * it has the same properties as this date format; {@code false} 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #hashCode 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean equals(Object object) { 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this == object) { 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(object instanceof DateFormat)) { 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DateFormat dateFormat = (DateFormat) object; 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return numberFormat.equals(dateFormat.numberFormat) 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && calendar.getTimeZone().equals( 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dateFormat.calendar.getTimeZone()) 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && calendar.getFirstDayOfWeek() == dateFormat.calendar 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getFirstDayOfWeek() 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && calendar.getMinimalDaysInFirstWeek() == dateFormat.calendar 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getMinimalDaysInFirstWeek() 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && calendar.isLenient() == dateFormat.calendar.isLenient(); 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Formats the specified object as a string using the pattern of this date 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * format and appends the string to the specified string buffer. 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the {@code field} member of {@code field} contains a value specifying 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a format field, then its {@code beginIndex} and {@code endIndex} members 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * will be updated with the position of the first occurrence of this field 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in the formatted text. 3409b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source object to format, must be a {@code Date} or a 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Number}. If {@code object} is a number then a date is 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * constructed using the {@code longValue()} of the number. 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param buffer 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target string buffer to append the formatted date/time to. 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param field 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * on input: an optional alignment field; on output: the offsets 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the alignment field in the formatted text. 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the string buffer. 3519b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * @throws IllegalArgumentException 3529b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * if {@code object} is neither a {@code Date} nor a 3539b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * {@code Number} instance. 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final StringBuffer format(Object object, StringBuffer buffer, 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project FieldPosition field) { 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (object instanceof Date) { 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return format((Date) object, buffer, field); 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (object instanceof Number) { 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return format(new Date(((Number) object).longValue()), buffer, 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project field); 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalArgumentException(); 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Formats the specified date using the rules of this date format. 370f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param date 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the date to format. 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the formatted string. 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final String format(Date date) { 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return format(date, new StringBuffer(), new FieldPosition(0)) 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .toString(); 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Formats the specified date as a string using the pattern of this date 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * format and appends the string to the specified string buffer. 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the {@code field} member of {@code field} contains a value specifying 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a format field, then its {@code beginIndex} and {@code endIndex} members 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * will be updated with the position of the first occurrence of this field 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in the formatted text. 3889b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param date 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the date to format. 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param buffer 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target string buffer to append the formatted date/time to. 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param field 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * on input: an optional alignment field; on output: the offsets 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the alignment field in the formatted text. 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the string buffer. 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract StringBuffer format(Date date, StringBuffer buffer, 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project FieldPosition field); 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 40293f0d794f264baeb7a90d02e58cae60305b3912aElliott Hughes * Returns an array of locales for which custom {@code DateFormat} instances 40393f0d794f264baeb7a90d02e58cae60305b3912aElliott Hughes * are available. 404d2d7abef3e9b73a57cdf1f2afd678d7f48945679Elliott Hughes * <p>Note that Android does not support user-supplied locale service providers. 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Locale[] getAvailableLocales() { 407757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes return ICU.getAvailableDateFormatLocales(); 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the calendar used by this {@code DateFormat}. 412f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the calendar used by this date format. 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Calendar getCalendar() { 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return calendar; 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code DateFormat} instance for formatting and parsing dates in 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the DEFAULT style for the default locale. 422f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code DateFormat} instance for the default style and locale. 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static DateFormat getDateInstance() { 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getDateInstance(DEFAULT); 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code DateFormat} instance for formatting and parsing dates in 4313106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * the specified style for the user's default locale. 4323106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>". 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param style 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * one of SHORT, MEDIUM, LONG, FULL, or DEFAULT. 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code DateFormat} instance for {@code style} and the default 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * locale. 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code style} is not one of SHORT, MEDIUM, LONG, FULL, or 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DEFAULT. 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static DateFormat getDateInstance(int style) { 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkDateStyle(style); 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getDateInstance(style, Locale.getDefault()); 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code DateFormat} instance for formatting and parsing dates in 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the specified style for the specified locale. 449f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param style 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * one of SHORT, MEDIUM, LONG, FULL, or DEFAULT. 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param locale 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the locale. 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code style} is not one of SHORT, MEDIUM, LONG, FULL, or 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DEFAULT. 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code DateFormat} instance for {@code style} and 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code locale}. 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static DateFormat getDateInstance(int style, Locale locale) { 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkDateStyle(style); 462757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes return new SimpleDateFormat(LocaleData.get(locale).getDateFormat(style), locale); 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code DateFormat} instance for formatting and parsing dates 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and time values in the DEFAULT style for the default locale. 468f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code DateFormat} instance for the default style and locale. 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static DateFormat getDateTimeInstance() { 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getDateTimeInstance(DEFAULT, DEFAULT); 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code DateFormat} instance for formatting and parsing of both 4773106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * dates and time values in the manner appropriate for the user's default locale. 4783106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>". 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param dateStyle 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * one of SHORT, MEDIUM, LONG, FULL, or DEFAULT. 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param timeStyle 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * one of SHORT, MEDIUM, LONG, FULL, or DEFAULT. 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code DateFormat} instance for {@code dateStyle}, 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code timeStyle} and the default locale. 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code dateStyle} or {@code timeStyle} is not one of 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * SHORT, MEDIUM, LONG, FULL, or DEFAULT. 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 4893106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes public final static DateFormat getDateTimeInstance(int dateStyle, int timeStyle) { 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkTimeStyle(timeStyle); 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkDateStyle(dateStyle); 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getDateTimeInstance(dateStyle, timeStyle, Locale.getDefault()); 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code DateFormat} instance for formatting and parsing dates 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and time values in the specified styles for the specified locale. 498f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param dateStyle 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * one of SHORT, MEDIUM, LONG, FULL, or DEFAULT. 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param timeStyle 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * one of SHORT, MEDIUM, LONG, FULL, or DEFAULT. 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param locale 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the locale. 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code DateFormat} instance for {@code dateStyle}, 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code timeStyle} and {@code locale}. 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code dateStyle} or {@code timeStyle} is not one of 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * SHORT, MEDIUM, LONG, FULL, or DEFAULT. 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 511757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes public final static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale locale) { 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkTimeStyle(timeStyle); 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkDateStyle(dateStyle); 514757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes LocaleData localeData = LocaleData.get(locale); 5156ca85c49efc0f02d69933f60b207b964a999061fElliott Hughes String pattern = localeData.getDateFormat(dateStyle) + " " + localeData.getTimeFormat(timeStyle); 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new SimpleDateFormat(pattern, locale); 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code DateFormat} instance for formatting and parsing dates 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and times in the SHORT style for the default locale. 522f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code DateFormat} instance for the SHORT style and default 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * locale. 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static DateFormat getInstance() { 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getDateTimeInstance(SHORT, SHORT); 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code NumberFormat} used by this {@code DateFormat}. 532f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code NumberFormat} used by this date format. 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public NumberFormat getNumberFormat() { 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return numberFormat; 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code DateFormat} instance for formatting and parsing time 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * values in the DEFAULT style for the default locale. 542f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code DateFormat} instance for the default style and locale. 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static DateFormat getTimeInstance() { 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getTimeInstance(DEFAULT); 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code DateFormat} instance for formatting and parsing time 5513106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * values in the specified style for the user's default locale. 5523106a99ccbe2e2a25bb66266d0ee42d98dd18099Elliott Hughes * See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>". 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param style 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * one of SHORT, MEDIUM, LONG, FULL, or DEFAULT. 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code DateFormat} instance for {@code style} and the default 556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * locale. 557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code style} is not one of SHORT, MEDIUM, LONG, FULL, or 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DEFAULT. 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static DateFormat getTimeInstance(int style) { 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkTimeStyle(style); 563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getTimeInstance(style, Locale.getDefault()); 564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code DateFormat} instance for formatting and parsing time 568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * values in the specified style for the specified locale. 569f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param style 571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * one of SHORT, MEDIUM, LONG, FULL, or DEFAULT. 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param locale 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the locale. 574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code style} is not one of SHORT, MEDIUM, LONG, FULL, or 576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DEFAULT. 577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code DateFormat} instance for {@code style} and 578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code locale}. 579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final static DateFormat getTimeInstance(int style, Locale locale) { 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkTimeStyle(style); 582757a7942eed2b0aa457f8517a0259d2ac82c5b18Elliott Hughes return new SimpleDateFormat(LocaleData.get(locale).getTimeFormat(style), locale); 583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the time zone of this date format's calendar. 587f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the time zone of the calendar used by this date format. 589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public TimeZone getTimeZone() { 591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return calendar.getTimeZone(); 592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int hashCode() { 596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return calendar.getFirstDayOfWeek() 597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + calendar.getMinimalDaysInFirstWeek() 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + calendar.getTimeZone().hashCode() 599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + (calendar.isLenient() ? 1231 : 1237) 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + numberFormat.hashCode(); 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Indicates whether the calendar used by this date format is lenient. 605f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the calendar is lenient; {@code false} otherwise. 607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isLenient() { 609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return calendar.isLenient(); 610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses a date from the specified string using the rules of this date 614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * format. 615f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string to parse. 618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code Date} resulting from the parsing. 6199b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * @throws ParseException 6209b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * if an error occurs during parsing. 621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Date parse(String string) throws ParseException { 623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ParsePosition position = new ParsePosition(0); 624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Date date = parse(string, position); 625fe1eba10c5d69e115dfab55d82cc22d42e9fbae5Elliott Hughes if (position.getIndex() == 0) { 62603c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes throw new ParseException("Unparseable date " + string, position.getErrorIndex()); 627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return date; 629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses a date from the specified string starting at the index specified 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * by {@code position}. If the string is successfully parsed then the index 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the {@code ParsePosition} is updated to the index following the parsed 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * text. On error, the index is unchanged and the error index of {@code 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ParsePosition} is set to the index where the error occurred. 637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * By default, parsing is lenient: If the input is not in the form used by 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this object's format method but can still be parsed as a date, then the 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * parse succeeds. Clients may insist on strict adherence to the format by 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * calling {@code setLenient(false)}. 6429b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string to parse. 645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param position 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * input/output parameter, specifies the start index in {@code 647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * string} from where to start parsing. If parsing is successful, 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * it is updated with the index following the parsed text; on 649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * error, the index is unchanged and the error index is set to 650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the index where the error occurred. 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the date resulting from the parse, or {@code null} if there is an 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * error. 653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract Date parse(String string, ParsePosition position); 655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Parses a date from the specified string starting at the index specified 658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * by {@code position}. If the string is successfully parsed then the index 659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the {@code ParsePosition} is updated to the index following the parsed 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * text. On error, the index is unchanged and the error index of 661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code ParsePosition} is set to the index where the error occurred. 662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * By default, parsing is lenient: If the input is not in the form used by 664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this object's format method but can still be parsed as a date, then the 665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * parse succeeds. Clients may insist on strict adherence to the format by 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * calling {@code setLenient(false)}. 6679b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param string 669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the string to parse. 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param position 671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * input/output parameter, specifies the start index in 672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code string} from where to start parsing. If parsing is 673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * successful, it is updated with the index following the parsed 674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * text; on error, the index is unchanged and the error index 675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is set to the index where the error occurred. 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the date resulting from the parsing, or {@code null} if there is 677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * an error. 678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object parseObject(String string, ParsePosition position) { 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return parse(string, position); 682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the calendar used by this date format. 686f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param cal 688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new calendar. 689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setCalendar(Calendar cal) { 691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project calendar = cal; 692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Specifies whether or not date/time parsing shall be lenient. With lenient 696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * parsing, the parser may use heuristics to interpret inputs that do not 697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * precisely match this object's format. With strict parsing, inputs must 698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * match this object's format. 699f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true} to set the calendar to be lenient, {@code false} 702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setLenient(boolean value) { 705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project calendar.setLenient(value); 706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the {@code NumberFormat} used by this date format. 710f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param format 712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new number format. 713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setNumberFormat(NumberFormat format) { 715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project numberFormat = format; 716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the time zone of the calendar used by this date format. 720f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param timezone 722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new time zone. 723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setTimeZone(TimeZone timezone) { 725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project calendar.setTimeZone(timezone); 726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The instances of this inner class are used as attribute keys and values 730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in {@code AttributedCharacterIterator} that the 731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link SimpleDateFormat#formatToCharacterIterator(Object)} method returns. 732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * There is no public constructor in this class, the only instances are the 734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * constants defined here. 735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static class Field extends Format.Field { 737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final long serialVersionUID = 7441350119349544720L; 739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static Hashtable<Integer, Field> table = new Hashtable<Integer, Field>(); 741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the era part of a date. 744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 74503c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field ERA = new Field("era", Calendar.ERA); 746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the year part of a date. 749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 75003c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field YEAR = new Field("year", Calendar.YEAR); 751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the month part of a date. 754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 75503c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field MONTH = new Field("month", Calendar.MONTH); 756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the hour of the day part of a date (0-11). 759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 76003c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field HOUR_OF_DAY0 = new Field("hour of day", Calendar.HOUR_OF_DAY); 761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the hour of the day part of a date (1-12). 764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 76503c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field HOUR_OF_DAY1 = new Field("hour of day 1", -1); 766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the minute part of a time. 769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 77003c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field MINUTE = new Field("minute", Calendar.MINUTE); 771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the second part of a time. 774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 77503c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field SECOND = new Field("second", Calendar.SECOND); 776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the millisecond part of a time. 779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 78003c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field MILLISECOND = new Field("millisecond", Calendar.MILLISECOND); 781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the day of the week part of a date. 784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 78503c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field DAY_OF_WEEK = new Field("day of week", Calendar.DAY_OF_WEEK); 786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the day of the month part of a date. 789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 79003c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field DAY_OF_MONTH = new Field("day of month", Calendar.DAY_OF_MONTH); 791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the day of the year part of a date. 794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 79503c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field DAY_OF_YEAR = new Field("day of year", Calendar.DAY_OF_YEAR); 796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the day of the week in the month part of a date. 799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 80003c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field DAY_OF_WEEK_IN_MONTH = new Field("day of week in month", 80103c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes Calendar.DAY_OF_WEEK_IN_MONTH); 802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the week of the year part of a date. 805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 80603c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field WEEK_OF_YEAR = new Field("week of year", 807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Calendar.WEEK_OF_YEAR); 808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the week of the month part of a date. 811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 81203c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field WEEK_OF_MONTH = new Field("week of month", 813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Calendar.WEEK_OF_MONTH); 814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the time indicator part of a date. 817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 81803c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field AM_PM = new Field("am pm", Calendar.AM_PM); 819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the hour part of a date (0-11). 822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 82303c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field HOUR0 = new Field("hour", Calendar.HOUR); 824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the hour part of a date (1-12). 827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 82803c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field HOUR1 = new Field("hour 1", -1); 829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Marks the time zone part of a date. 832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 83303c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes public final static Field TIME_ZONE = new Field("time zone", -1); 834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The calendar field that this field represents. 837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int calendarField = -1; 839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new instance of {@code DateFormat.Field} with the given 842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * fieldName and calendar field. 8439b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param fieldName 845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the field name. 846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param calendarField 847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the calendar field type of the field. 848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected Field(String fieldName, int calendarField) { 850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(fieldName); 851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.calendarField = calendarField; 852a0a4196cb15480959f053d0ebe6b412bd23c8170Elliott Hughes if (calendarField != -1 && table.get(Integer.valueOf(calendarField)) == null) { 853a0a4196cb15480959f053d0ebe6b412bd23c8170Elliott Hughes table.put(Integer.valueOf(calendarField), this); 854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the Calendar field that this field represents. 859f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the calendar field. 861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getCalendarField() { 863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return calendarField; 864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code DateFormat.Field} instance for the given calendar 868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * field. 869f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param calendarField 871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a calendar field constant. 872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code DateFormat.Field} corresponding to 873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code calendarField}. 874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code calendarField} is negative or greater than the 876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * field count of {@code Calendar}. 877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Field ofCalendarField(int calendarField) { 879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (calendarField < 0 || calendarField >= Calendar.FIELD_COUNT) { 880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalArgumentException(); 881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 883a0a4196cb15480959f053d0ebe6b412bd23c8170Elliott Hughes return table.get(Integer.valueOf(calendarField)); 884adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Resolves instances that are deserialized to the constant 888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code DateFormat.Field} values. 8899b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the resolved field object. 891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws InvalidObjectException 892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs while resolving the field object. 893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 894adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected Object readResolve() throws InvalidObjectException { 89603c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes if (this.getClass() != Field.class) { 89703c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes throw new InvalidObjectException("cannot resolve subclasses"); 8989b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson } 899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (calendarField != -1) { 900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Field result = ofCalendarField(calendarField); 902f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 9039b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson if (result != null && this.getName().equals(result.getName())) { 904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 90703c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes throw new InvalidObjectException("Unknown attribute"); 908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.equals(TIME_ZONE)) { 911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return TIME_ZONE; 912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.equals(HOUR1)) { 914adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return HOUR1; 915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.equals(HOUR_OF_DAY1)) { 917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return HOUR_OF_DAY1; 918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 92003c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes throw new InvalidObjectException("Unknown attribute"); 921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static void checkDateStyle(int style) { 925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(style == SHORT || style == MEDIUM || style == LONG 926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || style == FULL || style == DEFAULT)) { 92703c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes throw new IllegalArgumentException("Illegal date style " + style); 928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static void checkTimeStyle(int style) { 932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(style == SHORT || style == MEDIUM || style == LONG 933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || style == FULL || style == DEFAULT)) { 93403c0a8e681c776fdba0389ab8593282139afc6d6Elliott Hughes throw new IllegalArgumentException("Illegal time style " + style); 935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 938