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