[補充] [轉] http://stackoverflow.com/questions/2603638/why-cant-this-simpledateformat-parse-this-date-stringhtml
you'll need to supply a Locale.ENGLISH
, else it won't work properly in machines with a different default locale.java
1 SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy h:mm:ss:SSSa", Locale.ENGLISH); 2 System.out.println(sdf.parse("Mar 30 2010 5:27:40:140PM"));
----------------------------------------git
[轉] http://www.apihome.cn/api/java/SimpleDateFormat.htmlapi
public class SimpleDateFormatextends DateFormat
SimpleDateFormat
是一個以與語言環境有關的方式來格式化和解析日期的具體類。它容許進行格式化(日期 -> 文本)、解析(文本 -> 日期)和規範化。app
SimpleDateFormat
使得能夠選擇任何用戶定義的日期-時間格式的模式。可是,仍然建議經過 DateFormat
中的 getTimeInstance
、getDateInstance
或 getDateTimeInstance
來建立日期-時間格式器。每個這樣的類方法都可以返回一個以默認格式模式初始化的日期/時間格式器。能夠根據須要使用 applyPattern
方法來修改格式模式。有關使用這些方法的更多信息,請參閱 DateFormat。this
日期和時間格式由日期和時間模式 字符串指定。在日期和時間模式字符串中,未加引號的字母 'A'
到 'Z'
和 'a'
到 'z'
被解釋爲模式字母,用來表示日期或時間字符串元素。文本能夠使用單引號 ('
) 引發來,以避免進行解釋。"''"
表示單引號。全部其餘字符均不解釋;只是在格式化時將它們簡單複製到輸出字符串,或者在解析時與輸入字符串進行匹配。spa
定義瞭如下模式字母(全部其餘字符 'A'
到 'Z'
和 'a'
到 'z'
都被保留):線程
字母 日期或時間元素 表示 示例 G
Era 標誌符 Text AD
y
年 Year 1996
;96
M
年中的月份 Month July
;Jul
;07
w
年中的週數 Number 27
W
月份中的週數 Number 2
D
年中的天數 Number 189
d
月份中的天數 Number 10
F
月份中的星期 Number 2
E
星期中的天數 Text Tuesday
;Tue
a
Am/pm 標記 Text PM
H
一天中的小時數(0-23) Number 0
k
一天中的小時數(1-24) Number 24
K
am/pm 中的小時數(0-11) Number 0
h
am/pm 中的小時數(1-12) Number 12
m
小時中的分鐘數 Number 30
s
分鐘中的秒數 Number 55
S
毫秒數 Number 978
z
時區 General time zone Pacific Standard Time
;PST
;GMT-08:00
Z
時區 RFC 822 time zone -0800
模式字母一般是重複的,其數量肯定其精確表示:code
SimpleDateFormat
必須相對於某個世紀來解釋縮寫的年份。這經過將日期調整爲 SimpleDateFormat
實例建立以前的 80 年和以後 20 年範圍內來完成。例如,在 "MM/dd/yy" 模式下,若是 SimpleDateFormat
實例是在 1997 年 1 月 1 日建立的,則字符串 "01/11/12" 將被解釋爲 2012 年 1 月 11 日,而字符串 "05/04/64" 將被解釋爲 1964 年 5 月 4 日。在解析時,只有剛好由兩位數字組成的字符串(如 Character.isDigit(char) 所定義的)被解析爲默認的世紀。其餘任何數字字符串將照字面意義進行解釋,例如單數字字符串,3 個或更多數字組成的字符串,或者不都是數字的兩位數字字符串(例如"-1")。所以,在相同的模式下, "01/02/3" 或 "01/02/003" 解釋爲公元 3 年 1 月 2 日。一樣,"01/02/-3" 解析爲公元前 4 年 1 月 2 日。GMTOffsetTimeZone: Sign Hours Minutes Sign: one of Hours: Digit Digit Digit Minutes: Digit Digit Digit: one of GMT:+ -0 1 2 3 4 5 6 7 8 9Hours 必須在 0 到 23 之間,Minutes 必須在 00 到 59 之間。格式是與語言環境無關的,而且數字必須取自 Unicode 標準的 Basic Latin 塊。
對於解析來講,RFC 822 time zones 也是可接受的。component
RFC822TimeZone: Sign TwoDigitHours Minutes TwoDigitHours: Digit DigitTwoDigitHours 必須在 00 和 23 之間。其餘定義請參閱 general time zones。
對於解析來講,general time zones 也是可接受的。
SimpleDateFormat
還支持本地化日期和時間模式 字符串。在這些字符串中,以上所述的模式字母能夠用其餘與語言環境有關的模式字母來替換。SimpleDateFormat
不處理除模式字母以外的文本本地化;而由類的客戶端來處理。
如下示例顯示瞭如何在美國語言環境中解釋日期和時間模式。給定的日期和時間爲美國太平洋時區的本地時間 2001-07-04 12:08:56。
日期和時間模式 結果 "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
日期格式是不一樣步的。建議爲每一個線程建立獨立的格式實例。若是多個線程同時訪問一個格式,則它必須是外部同步的。
嵌套類摘要 |
---|
從類 java.text.DateFormat 繼承的嵌套類/接口 |
---|
DateFormat.Field |
字段摘要 |
---|
從類 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 |
構造方法摘要 | |
---|---|
SimpleDateFormat() 用默認的模式和默認語言環境的日期格式符號構造 SimpleDateFormat 。 |
|
SimpleDateFormat(String pattern) 用給定的模式和默認語言環境的日期格式符號構造 SimpleDateFormat 。 |
|
SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols) 用給定的模式和日期符號構造 SimpleDateFormat 。 |
|
SimpleDateFormat(String pattern, Locale locale) 用給定的模式和給定語言環境的默認日期格式符號構造 SimpleDateFormat 。 |
方法摘要 | |
---|---|
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 年週期內被解釋的兩位數字年份的開始日期。 |
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() 返回描述此日期格式的模式字符串。 |
從類 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 |
從類 java.text.Format 繼承的方法 |
---|
format, parseObject |
從類 java.lang.Object 繼承的方法 |
---|
finalize, getClass, notify, notifyAll, toString, wait, wait, wait |
構造方法詳細信息 |
---|
public SimpleDateFormat()
SimpleDateFormat
。
注:此構造方法可能不支持全部語言環境。要覆蓋全部地區,請使用 DateFormat 類中的工廠方法。
public SimpleDateFormat(String pattern)
SimpleDateFormat
。
注:此構造方法可能不支持全部語言環境。要覆蓋全部語言環境,請使用 DateFormat 類中的工廠方法。
pattern
- 描述日期和時間格式的模式
NullPointerException
- 若是給定的模式爲 null
IllegalArgumentException
- 若是給定的模式無效
public SimpleDateFormat(String pattern, Locale locale)
SimpleDateFormat
。
注:此構造方法可能不支持全部語言環境。要覆蓋全部語言環境,請使用 DateFormat 類中的工廠方法。
pattern
- 描述日期和時間格式的模式
locale
- 其日期格式符號要被使用的語言環境
NullPointerException
- 若是給定的模式或語言環境爲 null
IllegalArgumentException
- 若是給定的模式無效
public SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)
SimpleDateFormat
。
pattern
- 描述日期和時間格式的模式
formatSymbols
- 要用來格式化的日期格式符號
NullPointerException
- 若是給定的模式或 formatSymbols 爲 null
IllegalArgumentException
- 若是給定的模式無效
方法詳細信息 |
---|
public void set2DigitYearStart(Date startDate)
startDate
- 在解析時,兩位數年份將被置於
startDate
和
startDate + 100 years
之間的範圍內。
public Date get2DigitYearStart()
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos)
Date
格式化爲日期/時間字符串,並將結果添加到給定的
StringBuffer
。
DateFormat
中的
format
date
- 要被格式化爲日期-時間字符串的日期-時間值。
toAppendTo
- 新的日期-時間文本被添加的位置。
pos
- 格式化的位置。輸入時:若是須要,是一個對齊字段。輸出時:爲對齊字段的偏移量。
NullPointerException
- 若是給定的日期爲 null
public AttributedCharacterIterator formatToCharacterIterator(Object obj)
AttributedCharacterIterator
的對象。能夠使用返回的
AttributedCharacterIterator
來生成所得的字符串,以及肯定關於所得字符串的信息。
AttributedCharacterIterator 的每一個屬性鍵都是 DateFormat.Field
類型的,對應的屬性值與屬性鍵相同。
Format
中的
formatToCharacterIterator
obj
- 要格式化的對象
NullPointerException
- 若是 obj 爲 null。
IllegalArgumentException
- 若是 Format 不能格式化給定的對象,或者 Format 的模式字符串無效。
public Date parse(String text, ParsePosition pos)
Date
。
此方法試圖解析從 pos
給定的索引處開始的文本。若是解析成功,則將 pos
的索引更新爲所用最後一個字符後面的索引(沒必要對直到字符串結尾的全部字符進行解析),並返回解析獲得的日期。更新後的 pos
能夠用來指示下次調用此方法的起始點。若是發生錯誤,則不更改 pos
的索引,並將 pos
的錯誤索引設置爲發生錯誤處的字符索引,而且返回 null。
DateFormat
中的
parse
text
- 應該解析其中一部分的
String
。
pos
- 具備以上所述的索引和錯誤索引信息的
ParsePosition
對象。
Date
。若是發生錯誤,則返回 null。
NullPointerException
- 若是
text
或
pos
爲 null。
public String toPattern()
public String toLocalizedPattern()
public void applyPattern(String pattern)
pattern
- 此日期格式的新的日期和時間模式
NullPointerException
- 若是給定的模式爲 null
IllegalArgumentException
- 若是給定的模式無效
public void applyLocalizedPattern(String pattern)
pattern
- 要被映射到此格式的新的日期和時間格式模式的字符串
NullPointerException
- 若是給定的模式爲 null
IllegalArgumentException
- 若是給定的模式無效
public DateFormatSymbols getDateFormatSymbols()
public void setDateFormatSymbols(DateFormatSymbols newFormatSymbols)
newFormatSymbols
- 新的日期和時間格式符號
NullPointerException
- 若是給定的 newFormatSymbols 爲 null
public Object clone()
SimpleDateFormat
的一個副本。此副本也將複製格式的日期格式符號。
DateFormat
中的
clone
SimpleDateFormat
的一個副本
public int hashCode()
SimpleDateFormat
對象的哈希碼值。
DateFormat
中的
hashCode
SimpleDateFormat
對象的哈希碼值。
public boolean equals(Object obj)
SimpleDateFormat
的相等性。
DateFormat
中的
equals
obj
- 要與之比較的引用對象。
SimpleDateFormat
相等