- java.lang.Object
-
- java.text.Format
-
- java.text.DateFormat
-
- java.text.SimpleDateFormat
-
- All Implemented Interfaces:
-
Serializable,Cloneable
public class SimpleDateFormat extends DateFormat
SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。 它允许格式化(日期文本),解析(文本日期)和规范化。SimpleDateFormat允许您从选择日期时间格式化的任何用户定义的模式开始。 不过,建议您创建一个日期-时间格式有两种getTimeInstance,getDateInstance,或getDateTimeInstance在DateFormat。 这些类方法中的每一个都可以返回使用默认格式模式初始化的日期/时间格式化程序。 您可以根据需要使用applyPattern方法修改格式模式。 有关使用这些方法的更多信息,请参阅DateFormat。日期和时间模式
日期和时间格式由日期和时间模式字符串指定。 在日期和时间模式字符串中,从
'A'到'Z'以及从'a'到'z'引号的字母被解释为表示日期或时间字符串的组件的模式字母。 可以使用单引号(')引用文本,以避免解释。"''"代表单引号。 所有其他字符不被解释; 在格式化过程中,它们只是复制到输出字符串中,或者在解析过程中与输入字符串匹配。定义了以下图案字母(所有其他字符从
'A'到'Z'和从'a'到'z'被保留):
模式字母通常重复,因为它们的数字确定了准确的表示:Letter Date or Time Component Presentation Examples GEra designator Text ADyYear Year 1996;96YWeek year Year 2009;09MMonth in year (context sensitive) Month July;Jul;07LMonth in year (standalone form) Month July;Jul;07wWeek in year Number 27WWeek in month Number 2DDay in year Number 189dDay in month Number 10FDay of week in month Number 2EDay name in week Text Tuesday;TueuDay number of week (1 = Monday, ..., 7 = Sunday) Number 1aAm/pm marker Text PMHHour in day (0-23) Number 0kHour in day (1-24) Number 24KHour in am/pm (0-11) Number 0hHour in am/pm (1-12) Number 12mMinute in hour Number 30sSecond in minute Number 55SMillisecond Number 978zTime zone General time zone Pacific Standard Time;PST;GMT-08:00ZTime zone RFC 822 time zone -0800XTime zone ISO 8601 time zone -08;-0800;-08:00- Text:对于格式化,如果模式字母数为4以上,则使用完整形式; 否则,如果有的话,使用简短或缩写形式。 对于解析,两种形式都是接受的,与模式字母的数量无关。
- Number:对于格式化,模式字母的数量是最小位数,较短的数字被填充到该数量。 对于解析,模式字母的数量将被忽略,除非需要分隔两个相邻的字段。
- Year:如果格式化程序的
Calendar是公历,则应用以下规则。
- 对于格式化,如果模式字母数为2,那么年份将被截断为2位数; 否则解释为number 。
- 对于解析,如果模式字母的数量大于2,则年份将按字面解释,而不管数字的数量。 所以使用模式“MM / dd / yyyy”,“01/11/12”解析为公元12年1月11日
- 要使用缩写年份模式(“y”或“yy”)进行解析,
SimpleDateFormat必须解释相对于某个世纪的缩写年份。 这样做是通过将日期调整为在创建SimpleDateFormat实例之后的80年之前和20年之后。 例如,使用1997年1月1日创建的“MM / dd / yy”和SimpleDateFormat实例的模式,字符串“01/11/12”将被解释为2012年1月11日,而字符串“05/04 / 64“将被解释为1964年5月4日。在解析期间,只有由Character.isDigit(char)定义的两个数字组成的字符串将被解析为默认世纪。 任何其他数字字符串,例如一位数字字符串,三位或三位以上数字字符串,或两位数字字符串(全部不是全部数字)(例如“-1”),均按字面解释。 所以“01/02/3”或“01/02/003”的解析方式与公元3年1月2日相同。 同样,“01/02 / -3”在公元前4年1月2日被解析。
如果本周年'Y'了规定,并且calendar不支持任何week years ,历年('y')来代替。 可以通过致电getCalendar()测试一周的支持。isWeekDateSupported()。 - Month:如果模式字母数为3以上,则该月份被解释为text ; 否则,它被解释为number 。
- 字母M产生上下文相关的月份名称,例如嵌入的名称形式。 字母M是上下文敏感的,因为当它在独立模式中使用时,例如“MMMM”,它给出了一个月份名称的独立形式,并且当它在包含其他字段的模式中使用时,例如,“d MMMM”,它给出了一个月份名称的格式。 例如,加泰罗尼亚语的1月是格式形式的“de gener”,而它们是独立形式的“gener”。 在这种情况下,“MMMM”会产生“一般”,“d MMMM”的月份将产生“通用”。 如果已经使用构造函数
SimpleDateFormat(String,DateFormatSymbols)或方法setDateFormatSymbols(DateFormatSymbols)明确设置了一个DateFormatSymbols,则使用由DateFormatSymbols给出的月份名称。 - L字母生成独立形式的月份名称。
- 字母M产生上下文相关的月份名称,例如嵌入的名称形式。 字母M是上下文敏感的,因为当它在独立模式中使用时,例如“MMMM”,它给出了一个月份名称的独立形式,并且当它在包含其他字段的模式中使用时,例如,“d MMMM”,它给出了一个月份名称的格式。 例如,加泰罗尼亚语的1月是格式形式的“de gener”,而它们是独立形式的“gener”。 在这种情况下,“MMMM”会产生“一般”,“d MMMM”的月份将产生“通用”。 如果已经使用构造函数
- General time zone:如果他们有姓名,时区将被解释为text 。 对于表示GMT偏移值的时区,使用以下语法:
GMTOffsetTimeZone:小时数必须在0到23之间, 分钟必须介于00和59之间。格式与区域设置无关,数字必须取自Unicode标准的基本拉丁方块。GMTSign Hours:Minutes Sign: one of+ -Hours: Digit Digit Digit Minutes: Digit Digit Digit: one of0 1 2 3 4 5 6 7 8 9对于解析, RFC 822 time zones也被接受。
- RFC 822 time zone:格式化时,使用RFC 822 4位数时区格式:
RFC822TimeZone: Sign TwoDigitHours Minutes TwoDigitHours: Digit DigitTwoDigitHours必须介于00和23之间。其他定义与general time zones相同 。对于解析, general time zones也被接受。
- ISO 8601 Time zone:模式字母的数量指定格式和解析的格式如下:
ISO8601TimeZone: OneLetterISO8601TimeZone TwoLetterISO8601TimeZone ThreeLetterISO8601TimeZone OneLetterISO8601TimeZone: Sign TwoDigitHours其他定义与general time zones或RFC 822 time zones相同 。ZTwoLetterISO8601TimeZone: Sign TwoDigitHours MinutesZThreeLetterISO8601TimeZone: Sign TwoDigitHours:MinutesZ对于格式化,如果GMT的偏移值为0,则产生
"Z"。 如果模式字母的数量为1,则忽略小时数。 例如,如果模式是"X",而时区是"GMT+05:30",则产生"+05"。对于解析,
"Z"被解析为UTC时区指示符。 General time zones 不被接受。如果模式字母的数目是4或更多,
IllegalArgumentException被构建时抛出SimpleDateFormat或applying a pattern 。
SimpleDateFormat还支持本地化的日期和时间模式字符串。 在这些字符串中,上述的图案字母可以被替换为其他与区域相关的图案字母。SimpleDateFormat不处理除了图案字母之外的文本的本地化; 这取决于课堂的客户。例子
以下示例显示如何在美国地区中解释日期和时间模式。 给定的日期和时间是2001-07-04 12:08:56当地时间在美国太平洋时间时区。Date and Time Pattern Result "yyyy.MM.dd G 'at' HH:mm:ss z"2001.07.04 AD at 12:08:56 PDT"EEE, MMM d, ''yy"Wed, Jul 4, '01"h:mm a"12:08 PM"hh 'o''clock' a, zzzz"12 o'clock PM, Pacific Daylight Time"K:mm a, z"0:08 PM, PDT"yyyyy.MMMMM.dd GGG hh:mm aaa"02001.July.04 AD 12:08 PM"EEE, d MMM yyyy HH:mm:ss Z"Wed, 4 Jul 2001 12:08:56 -0700"yyMMddHHmmssZ"010704120856-0700"yyyy-MM-dd'T'HH:mm:ss.SSSZ"2001-07-04T12:08:56.235-0700"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"2001-07-04T12:08:56.235-07:00"YYYY-'W'ww-u"2001-W27-3Synchronization
日期格式不同步。 建议为每个线程创建单独的格式实例。 如果多个线程同时访问格式,则必须在外部进行同步。
- 从以下版本开始:
- 1.1
- 另请参见:
-
Java Tutorial ,
Calendar,TimeZone,DateFormat,DateFormatSymbols, Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class java.text.DateFormat
DateFormat.Field
-
-
Field Summary
-
Fields inherited from class java.text.DateFormat
AM_PM_FIELD, calendar, DATE_FIELD, DAY_OF_WEEK_FIELD, DAY_OF_WEEK_IN_MONTH_FIELD, DAY_OF_YEAR_FIELD, DEFAULT, ERA_FIELD, FULL, HOUR_OF_DAY0_FIELD, HOUR_OF_DAY1_FIELD, HOUR0_FIELD, HOUR1_FIELD, LONG, MEDIUM, MILLISECOND_FIELD, MINUTE_FIELD, MONTH_FIELD, numberFormat, SECOND_FIELD, SHORT, TIMEZONE_FIELD, WEEK_OF_MONTH_FIELD, WEEK_OF_YEAR_FIELD, YEAR_FIELD
-
-
构造方法摘要
构造方法 Constructor 描述 SimpleDateFormat()构造一个SimpleDateFormat使用默认模式和日期格式符号为默认的FORMAT区域设置。SimpleDateFormat(String pattern)使用给定模式构建一个SimpleDateFormat,默认日期格式符号为默认的FORMAT区域设置。SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)使用给定的模式和日期格式符号构造一个SimpleDateFormat。SimpleDateFormat(String pattern, Locale locale)使用给定的模式构建一个SimpleDateFormat,并为给定的区域设置默认的日期格式符号。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 voidapplyLocalizedPattern(String pattern)将给定的本地化模式字符串应用于此日期格式。voidapplyPattern(String pattern)将给定的模式字符串应用于此日期格式。Objectclone()创建一个这个SimpleDateFormat的副本。booleanequals(Object obj)将给定对象与此SimpleDateFormat进行比较以获得相等性。StringBufferformat(Date date, StringBuffer toAppendTo, FieldPosition pos)将给定的Date为日期/时间字符串,并将结果追加到给定的StringBuffer。AttributedCharacterIteratorformatToCharacterIterator(Object obj)格式化产生一个AttributedCharacterIterator的对象。Dateget2DigitYearStart()返回100年期间的开始日期,2位数年份被解释为在内。DateFormatSymbolsgetDateFormatSymbols()获取此日期格式的日期和时间格式符号的副本。inthashCode()返回此SimpleDateFormat对象的哈希码值。Dateparse(String text, ParsePosition pos)从字符串中解析文本以产生一个Date。voidset2DigitYearStart(Date startDate)设置100年期间,两位数年份将被解释为在用户指定的日期开始。voidsetDateFormatSymbols(DateFormatSymbols newFormatSymbols)设置此日期格式的日期和时间格式符号。StringtoLocalizedPattern()返回描述此日期格式的本地化模式字符串。StringtoPattern()返回描述此日期格式的模式字符串。-
Methods inherited from class java.text.DateFormat
format, format, getAvailableLocales, getCalendar, getDateInstance, getDateInstance, getDateInstance, getDateTimeInstance, getDateTimeInstance, getDateTimeInstance, getInstance, getNumberFormat, getTimeInstance, getTimeInstance, getTimeInstance, getTimeZone, isLenient, parse, parseObject, setCalendar, setLenient, setNumberFormat, setTimeZone
-
Methods inherited from class java.text.Format
format, parseObject
-
-
-
-
构造方法详细信息
-
SimpleDateFormat
public SimpleDateFormat()
-
SimpleDateFormat
public SimpleDateFormat(String pattern)
构造一个SimpleDateFormat使用给定的模式和默认的日期格式符号为默认的FORMAT区域设置。 注意:此构造函数可能不支持所有区域设置。 要完整覆盖,请使用DateFormat类中的工厂方法。这相当于调用
SimpleDateFormat(pattern, Locale.getDefault(Locale.Category.FORMAT))。- 参数
-
pattern- 描述日期和时间格式的模式 - 异常
-
NullPointerException- 如果给定的模式为空 -
IllegalArgumentException- 如果给定的模式无效 - 另请参见:
-
Locale.getDefault(java.util.Locale.Category),Locale.Category.FORMAT
-
SimpleDateFormat
public SimpleDateFormat(String pattern, Locale locale)
- 参数
-
pattern- 描述日期和时间格式的模式 -
locale- 应使用日期格式符号的区域设置 - 异常
-
NullPointerException- 如果给定的模式或区域设置为空 -
IllegalArgumentException- 如果给定的模式无效
-
SimpleDateFormat
public SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)
使用给定的模式和日期格式符号构造一个SimpleDateFormat。- 参数
-
pattern- 描述日期和时间格式的模式 -
formatSymbols- 要用于格式化的日期格式符号 - 异常
-
NullPointerException- 如果给定的模式或formatSymbols为空 -
IllegalArgumentException- 如果给定的模式无效
-
-
方法详细信息
-
set2DigitYearStart
public void set2DigitYearStart(Date startDate)
设置100年期间,两位数年份将被解释为在用户指定的日期开始。- 参数
-
startDate- 在解析期间,两位数年份将放置在startDate到startDate + 100 years的范围内。 - 异常
-
NullPointerException- 如果startDate是null。 - 从以下版本开始:
- 1.2
- 另请参见:
-
get2DigitYearStart()
-
get2DigitYearStart
public Date get2DigitYearStart()
返回100年期间的开始日期,2位数年份被解释为在内。- 结果
- 开始解读两位数年的100年期间
- 从以下版本开始:
- 1.2
- 另请参见:
-
set2DigitYearStart(java.util.Date)
-
format
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos)
将给定的Date成日期/时间字符串,并将结果追加到给定的StringBuffer。- Specified by:
-
format在DateFormat - 参数
-
date- 要格式化为日期时间字符串的日期时间值。 -
toAppendTo- 要附加新的日期时间文本。 -
pos- 格式化位置。 在输入:对齐字段,如果需要。 输出:对齐字段的偏移量。 - 结果
- 格式化的日期时间字符串。
- 异常
-
NullPointerException- 如果任何参数是null。
-
formatToCharacterIterator
public AttributedCharacterIterator formatToCharacterIterator(Object obj)
格式化一个对象,生成一个AttributedCharacterIterator。 您可以使用返回的AttributedCharacterIterator构建生成的String,以及确定有关生成的String的信息。AttributedCharacterIterator的每个属性键将是类型为
DateFormat.Field,对应的属性值与属性键相同。- 重写:
-
formatToCharacterIterator在Format - 参数
-
obj- 要格式化的对象 - 结果
- AttributedCharacterIterator描述格式化的值。
- 异常
-
NullPointerException- 如果obj为空。 -
IllegalArgumentException- 如果格式不能格式化给定的对象,或格式的模式字符串无效。 - 从以下版本开始:
- 1.4
-
parse
public Date parse(String text, ParsePosition pos)
从字符串中解析文本,产生一个Date。该方法尝试从
pos给出的索引开始解析文本。 如果解析成功,则pos的索引将更新为使用最后一个字符后的索引(解析不一定使用字符串末尾的所有字符),并返回解析的日期。 更新的pos可用于指示下一次调用此方法的起始点。 如果发生错误,则pos的索引不改变,则将错误索引pos设置为发生错误的字符的索引,返回null。此解析操作使用
calendar生成Date。 所有的calendar的日期时间字段cleared解析之前,与calendar“被用于任何丢失的日期时间信息S日期时间字段的默认值。 例如,如果解析操作没有给出年值,则解析的Date的年值为1970,为GregorianCalendar。TimeZone值可能会被覆盖,这取决于给定的模式和时区值在text。 以前通过调用setTimeZone设置的任何TimeZone值都可能需要恢复进一步操作。- Specified by:
-
parse在DateFormat - 参数
-
text- AString,其中一部分应该被解析。 -
pos- 具有上述索引和错误索引信息的ParsePosition对象。 - 结果
-
A
Date从字符串中解析。 万一出错,返回null。 - 异常
-
NullPointerException- 如果text或pos为空。
-
toPattern
public String toPattern()
返回描述此日期格式的模式字符串。- 结果
- 描述此日期格式的模式字符串。
-
toLocalizedPattern
public String toLocalizedPattern()
返回描述此日期格式的本地化模式字符串。- 结果
- 描述此日期格式的本地化模式字符串。
-
applyPattern
public void applyPattern(String pattern)
将给定的模式字符串应用于此日期格式。- 参数
-
pattern- 此日期格式的新日期和时间模式 - 异常
-
NullPointerException- 如果给定的模式为空 -
IllegalArgumentException- 如果给定的模式无效
-
applyLocalizedPattern
public void applyLocalizedPattern(String pattern)
将给定的本地化模式字符串应用于此日期格式。- 参数
-
pattern- 要映射到此格式的新日期和时间格式模式的字符串 - 异常
-
NullPointerException- 如果给定的模式为空 -
IllegalArgumentException- 如果给定的模式无效
-
getDateFormatSymbols
public DateFormatSymbols getDateFormatSymbols()
获取此日期格式的日期和时间格式符号的副本。- 结果
- 该日期格式的日期和时间格式符号
- 另请参见:
-
setDateFormatSymbols(java.text.DateFormatSymbols)
-
setDateFormatSymbols
public void setDateFormatSymbols(DateFormatSymbols newFormatSymbols)
设置此日期格式的日期和时间格式符号。- 参数
-
newFormatSymbols- 新的日期和时间格式符号 - 异常
-
NullPointerException- 如果给定的newFormatSymbols为空 - 另请参见:
-
getDateFormatSymbols()
-
clone
public Object clone()
创建一个这个SimpleDateFormat的副本。 这也克隆了格式的日期格式符号。- 重写:
-
clone在DateFormat - 结果
-
这个
SimpleDateFormat的克隆 - 另请参见:
-
Cloneable
-
hashCode
public int hashCode()
返回此SimpleDateFormat对象的哈希码值。- 重写:
-
hashCode在DateFormat - 结果
-
这个
SimpleDateFormat对象的哈希码值。 - 另请参见:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
-
equals
public boolean equals(Object obj)
将给定对象与此SimpleDateFormat进行比较以获得相等性。- 重写:
-
equals在DateFormat - 参数
-
obj- 与之比较的参考对象。 - 结果
-
如果给定的对象等于这个
SimpleDateFormat - 另请参见:
-
Object.hashCode(),HashMap
-
-