- 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 G
Era designator Text AD
y
Year Year 1996
;96
Y
Week year Year 2009
;09
M
Month in year (context sensitive) Month July
;Jul
;07
L
Month in year (standalone form) Month July
;Jul
;07
w
Week in year Number 27
W
Week in month Number 2
D
Day in year Number 189
d
Day in month Number 10
F
Day of week in month Number 2
E
Day name in week Text Tuesday
;Tue
u
Day number of week (1 = Monday, ..., 7 = Sunday) Number 1
a
Am/pm marker Text PM
H
Hour in day (0-23) Number 0
k
Hour in day (1-24) Number 24
K
Hour in am/pm (0-11) Number 0
h
Hour in am/pm (1-12) Number 12
m
Minute in hour Number 30
s
Second in minute Number 55
S
Millisecond Number 978
z
Time zone General time zone Pacific Standard Time
;PST
;GMT-08:00
Z
Time zone RFC 822 time zone -0800
X
Time 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标准的基本拉丁方块。GMT
Sign 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 Digit
TwoDigitHours必须介于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相同 。Z
TwoLetterISO8601TimeZone: Sign TwoDigitHours MinutesZ
ThreeLetterISO8601TimeZone: 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-3
Synchronization
日期格式不同步。 建议为每个线程创建单独的格式实例。 如果多个线程同时访问格式,则必须在外部进行同步。
- 从以下版本开始:
- 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 方法 描述 void
applyLocalizedPattern(String pattern)
将给定的本地化模式字符串应用于此日期格式。void
applyPattern(String pattern)
将给定的模式字符串应用于此日期格式。Object
clone()
创建一个这个SimpleDateFormat
的副本。boolean
equals(Object obj)
将给定对象与此SimpleDateFormat
进行比较以获得相等性。StringBuffer
format(Date date, StringBuffer toAppendTo, FieldPosition pos)
将给定的Date
为日期/时间字符串,并将结果追加到给定的StringBuffer
。AttributedCharacterIterator
formatToCharacterIterator(Object obj)
格式化产生一个AttributedCharacterIterator
的对象。Date
get2DigitYearStart()
返回100年期间的开始日期,2位数年份被解释为在内。DateFormatSymbols
getDateFormatSymbols()
获取此日期格式的日期和时间格式符号的副本。int
hashCode()
返回此SimpleDateFormat
对象的哈希码值。Date
parse(String text, ParsePosition pos)
从字符串中解析文本以产生一个Date
。void
set2DigitYearStart(Date startDate)
设置100年期间,两位数年份将被解释为在用户指定的日期开始。void
setDateFormatSymbols(DateFormatSymbols newFormatSymbols)
设置此日期格式的日期和时间格式符号。String
toLocalizedPattern()
返回描述此日期格式的本地化模式字符串。String
toPattern()
返回描述此日期格式的模式字符串。-
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
-
-