📄 dateformat.java
字号:
/* DateFormat.java -- Class for formatting/parsing date/times Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.This file is part of GNU Classpath.GNU Classpath is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version. GNU Classpath is distributed in the hope that it will be useful, butWITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNUGeneral Public License for more details.You should have received a copy of the GNU General Public Licensealong with GNU Classpath; see the file COPYING. If not, write to theFree Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA02110-1301 USA.Linking this library statically or dynamically with other modules ismaking a combined work based on this library. Thus, the terms andconditions of the GNU General Public License cover the wholecombination.As a special exception, the copyright holders of this library give youpermission to link this library with independent modules to produce anexecutable, regardless of the license terms of these independentmodules, and to copy and distribute the resulting executable underterms of your choice, provided that you also meet, for each linkedindependent module, the terms and conditions of the license of thatmodule. An independent module is a module which is not derived fromor based on this library. If you modify this library, you may extendthis exception to your version of the library, but you are notobligated to do so. If you do not wish to do so, delete thisexception statement from your version. */package java.text;import java.io.InvalidObjectException;import java.util.Calendar;import java.util.Date;import java.util.Locale;import java.util.MissingResourceException;import java.util.ResourceBundle;import java.util.TimeZone;/** * @author Per Bothner (bothner@cygnus.com) * @date October 25, 1998. *//* Written using "Java Class Libraries", 2nd edition, plus online * API docs for JDK 1.2 beta from http://www.javasoft.com. * Status: Mostly complete; search for FIXME to see omissions. */public abstract class DateFormat extends Format implements Cloneable{ private static final long serialVersionUID = 7218322306649953788L; // Names fixed by serialization spec. protected Calendar calendar; protected NumberFormat numberFormat; // (Values determined using a test program.) public static final int FULL = 0; public static final int LONG = 1; public static final int MEDIUM = 2; public static final int SHORT = 3; public static final int DEFAULT = MEDIUM; /* These constants need to have these exact values. They * correspond to index positions within the localPatternChars * string for a given locale. Each locale may specify its * own character for a particular field, but the position * of these characters must correspond to an appropriate field * number (as listed below), in order for their meaning to * be determined. For example, the US locale uses * the string "GyMdkHmsSEDFwWahKzYeugAZ", where 'G' is the character * for era, 'y' for year, and so on down to 'Z' for time zone. */ /** * Represents the position of the era * pattern character in the array of * localized pattern characters. * For example, 'AD' is an era used * in the Gregorian calendar system. * In the U.S. locale, this is 'G'. */ public static final int ERA_FIELD = 0; /** * Represents the position of the year * pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'y'. */ public static final int YEAR_FIELD = 1; /** * Represents the position of the month * pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'M'. */ public static final int MONTH_FIELD = 2; /** * Represents the position of the date * or day of the month pattern character * in the array of localized pattern * characters. In the U.S. locale, * this is 'd'. */ public static final int DATE_FIELD = 3; /** * Represents the position of the 24 * hour pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'k'. * This field numbers hours from 1 to 24. */ public static final int HOUR_OF_DAY1_FIELD = 4; /** * Represents the position of the 24 * hour pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'H'. * This field numbers hours from 0 to 23. */ public static final int HOUR_OF_DAY0_FIELD = 5; /** * Represents the position of the minute * pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'm'. */ public static final int MINUTE_FIELD = 6; /** * Represents the position of the second * pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 's'. */ public static final int SECOND_FIELD = 7; /** * Represents the position of the millisecond * pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'S'. */ public static final int MILLISECOND_FIELD = 8; /** * Represents the position of the day of the * week pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'E'. */ public static final int DAY_OF_WEEK_FIELD = 9; /** * Represents the position of the day of the * year pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'D'. */ public static final int DAY_OF_YEAR_FIELD = 10; /** * Represents the position of the day of the * week in the month pattern character in the * array of localized pattern characters. * In the U.S. locale, this is 'F'. */ public static final int DAY_OF_WEEK_IN_MONTH_FIELD = 11; /** * Represents the position of the week of the * year pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'w'. */ public static final int WEEK_OF_YEAR_FIELD = 12; /** * Represents the position of the week of the * month pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'W'. */ public static final int WEEK_OF_MONTH_FIELD = 13; /** * Represents the position of the am/pm * pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'a'. */ public static final int AM_PM_FIELD = 14; /** * Represents the position of the 12 * hour pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'h'. * This field numbers hours from 1 to 12. */ public static final int HOUR1_FIELD = 15; /** * Represents the position of the 12 * hour pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'K'. * This field numbers hours from 0 to 11. */ public static final int HOUR0_FIELD = 16; /** * Represents the position of the generic * timezone pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'z'. */ public static final int TIMEZONE_FIELD = 17; /** * Represents the position of the ISO year * pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'Y'. * This is a GNU extension in accordance with * the CLDR data used. This value may * differ from the normal year value. */ public static final int ISO_YEAR_FIELD = 18; /** * Represents the position of the localized * day of the week pattern character in the * array of localized pattern characters. * In the U.S. locale, this is 'e'. * This is a GNU extension in accordance with * the CLDR data used. This value only * differs from the day of the week with * numeric formatting, in which case the * locale's first day of the week is used. */ public static final int LOCALIZED_DAY_OF_WEEK_FIELD = 19; /** * Represents the position of the extended year * pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'u'. * This is a GNU extension in accordance with * the CLDR data used. This value modifies * the year value, so as to incorporate the era. * For example, in the Gregorian calendar system, * the extended year is negative instead of being * marked as BC. */ public static final int EXTENDED_YEAR_FIELD = 20; /** * Represents the position of the modified Julian * day pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'g'. * This is a GNU extension in accordance with * the CLDR data used. This value differs * from the standard Julian day in that days * are marked from midnight onwards rather than * noon, and the local time zone affects the value. * In simple terms, it can be thought of as all * the date fields represented as a single number. */ public static final int MODIFIED_JULIAN_DAY_FIELD = 21; /** * Represents the position of the millisecond * in the day pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'A'. * This is a GNU extension in accordance with * the CLDR data used. This value represents * all the time fields (excluding the time zone) * numerically, giving the number of milliseconds * into the day (e.g. 10 in the morning would * be 10 * 60 * 60 * 1000). Any daylight savings * offset also affects this value. */ public static final int MILLISECOND_IN_DAY_FIELD = 22; /** * Represents the position of the RFC822 * timezone pattern character in the array of * localized pattern characters. * In the U.S. locale, this is 'Z'. * This is a GNU extension in accordance with * the CLDR data used. The value is the offset * of the current time from GMT e.g. -0500 would * be five hours prior to GMT. */ public static final int RFC822_TIMEZONE_FIELD = 23; public static class Field extends Format.Field { static final long serialVersionUID = 7441350119349544720L; private int calendarField; public static final DateFormat.Field ERA = new Field("era", Calendar.ERA); public static final DateFormat.Field YEAR = new Field("year", Calendar.YEAR); public static final DateFormat.Field MONTH = new Field("month", Calendar.MONTH); public static final DateFormat.Field DAY_OF_MONTH = new Field("day of month", Calendar.DAY_OF_MONTH); public static final DateFormat.Field HOUR_OF_DAY1 = new Field("hour of day 1", Calendar.HOUR_OF_DAY); public static final DateFormat.Field HOUR_OF_DAY0 = new Field("hour of day 0", Calendar.HOUR_OF_DAY); public static final DateFormat.Field MINUTE = new Field("minute", Calendar.MINUTE); public static final DateFormat.Field SECOND = new Field("second", Calendar.SECOND); public static final DateFormat.Field MILLISECOND = new Field("millisecond", Calendar.MILLISECOND); public static final DateFormat.Field DAY_OF_WEEK = new Field("day of week", Calendar.DAY_OF_WEEK); public static final DateFormat.Field DAY_OF_YEAR = new Field("day of year", Calendar.DAY_OF_YEAR); public static final DateFormat.Field DAY_OF_WEEK_IN_MONTH = new Field("day of week in month", Calendar.DAY_OF_WEEK_IN_MONTH); public static final DateFormat.Field WEEK_OF_YEAR = new Field("week of year", Calendar.WEEK_OF_YEAR); public static final DateFormat.Field WEEK_OF_MONTH = new Field("week of month", Calendar.WEEK_OF_MONTH); public static final DateFormat.Field AM_PM = new Field("am/pm", Calendar.AM_PM); public static final DateFormat.Field HOUR1 = new Field("hour1", Calendar.HOUR); public static final DateFormat.Field HOUR0 = new Field("hour0", Calendar.HOUR); public static final DateFormat.Field TIME_ZONE = new Field("timezone", Calendar.ZONE_OFFSET); public static final DateFormat.Field ISO_YEAR = new Field("iso year", Calendar.YEAR); public static final DateFormat.Field LOCALIZED_DAY_OF_WEEK = new Field("localized day of week", Calendar.DAY_OF_WEEK); public static final DateFormat.Field EXTENDED_YEAR = new Field("extended year", Calendar.YEAR); public static final DateFormat.Field MODIFIED_JULIAN_DAY = new Field("julian day", -1); public static final DateFormat.Field MILLISECOND_IN_DAY = new Field("millisecond in day", -1); public static final DateFormat.Field RFC822_TIME_ZONE = new Field("rfc822 timezone", Calendar.ZONE_OFFSET); static final DateFormat.Field[] allFields = { ERA, YEAR, MONTH, DAY_OF_MONTH, HOUR_OF_DAY1, HOUR_OF_DAY0, MINUTE, SECOND, MILLISECOND, DAY_OF_WEEK, DAY_OF_YEAR, DAY_OF_WEEK_IN_MONTH, WEEK_OF_YEAR, WEEK_OF_MONTH, AM_PM, HOUR1, HOUR0, TIME_ZONE, ISO_YEAR, LOCALIZED_DAY_OF_WEEK, EXTENDED_YEAR, MODIFIED_JULIAN_DAY, MILLISECOND_IN_DAY, RFC822_TIME_ZONE }; // For deserialization private Field() { super(""); } protected Field(String name, int calendarField) { super(name); this.calendarField = calendarField; } public int getCalendarField() { return calendarField; } public static Field ofCalendarField(int calendarField) { if (calendarField >= allFields.length || calendarField < 0) throw new IllegalArgumentException("no such calendar field (" + calendarField + ")"); return allFields[calendarField]; } protected Object readResolve() throws InvalidObjectException { String s = getName(); for (int i=0;i<allFields.length;i++) if (s.equals(allFields[i].getName())) return allFields[i]; throw new InvalidObjectException("no such DateFormat field called " + s); } } /** * This method initializes a new instance of <code>DateFormat</code>. */ protected DateFormat () { } /** * This method tests this object for equality against the specified object. * The two objects will be considered equal if an only if the specified * object: * <P> * <ul> * <li>Is not <code>null</code>.</li> * <li>Is an instance of <code>DateFormat</code>.</li> * <li>Has equal numberFormat field as this object.</li> * <li>Has equal (Calendar) TimeZone rules as this object.</li> * <li>Has equal (Calendar) isLenient results.</li> * <li>Has equal Calendar first day of week and minimal days in week * values.</li> * </ul> * Note that not all properties of the Calendar are relevant for a * DateFormat. For formatting only the fact whether or not the * TimeZone has the same rules and whether the calendar is lenient * and has the same week rules is compared for this implementation * of equals. Other properties of the Calendar (such as the time) * are not taken into account. * * @param obj The object to test for equality against. * * @return <code>true</code> if the specified object is equal to this object, * <code>false</code> otherwise. */ public boolean equals (Object obj) { if (!(obj instanceof DateFormat)) return false; DateFormat d = (DateFormat) obj; TimeZone tz = getTimeZone(); TimeZone tzd = d.getTimeZone(); if (tz.hasSameRules(tzd)) if (isLenient() == d.isLenient()) { Calendar c = getCalendar(); Calendar cd = d.getCalendar(); if ((c == null && cd == null) || (c.getFirstDayOfWeek() == cd.getFirstDayOfWeek() && c.getMinimalDaysInFirstWeek() == cd.getMinimalDaysInFirstWeek())) return ((numberFormat == null && d.numberFormat == null) || numberFormat.equals(d.numberFormat)); } return false; } /** * This method returns a copy of this object. * * @return A copy of this object. */ public Object clone () { // We know the superclass just call's Object's generic cloner. return super.clone ();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -