[補充] [轉] http://stackoverflow.com/questions/2603638/why-cant-this-simpledateformat-parse-this-date-string
you'll need to supply a Locale.ENGLISH
, else it won't work properly in machines with a different default locale.
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"));
----------------------------------------
[轉] http://www.apihome.cn/api/java/SimpleDateFormat.html
java.text
類 SimpleDateFormat
- 所有已實現的接口:
- Serializable, Cloneable
public class SimpleDateFormatextends DateFormat
SimpleDateFormat
是一個以與語言環境有關的方式來格式化和解析日期的具體類。它允許進行格式化(日期 -> 文本)、解析(文本 -> 日期)和規范化。
SimpleDateFormat
使得可以選擇任何用戶定義的日期-時間格式的模式。但是,仍然建議通過 DateFormat
中的 getTimeInstance
、getDateInstance
或 getDateTimeInstance
來創建日期-時間格式器。每一個這樣的類方法都能夠返回一個以默認格式模式初始化的日期/時間格式器。可以根據需要使用 applyPattern
方法來修改格式模式。有關使用這些方法的更多信息,請參閱 DateFormat。
日期和時間模式
日期和時間格式由日期和時間模式 字符串指定。在日期和時間模式字符串中,未加引號的字母 'A'
到 'Z'
和 'a'
到 'z'
被解釋為模式字母,用來表示日期或時間字符串元素。文本可以使用單引號 ('
) 引起來,以免進行解釋。"''"
表示單引號。所有其他字符均不解釋;只是在格式化時將它們簡單復制到輸出字符串,或者在解析時與輸入字符串進行匹配。
定義了以下模式字母(所有其他字符 '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
模式字母通常是重復的,其數量確定其精確表示:
- Text: 對於格式化來說,如果模式字母的數量大於等於 4,則使用完全形式;否則,在可用的情況下使用短形式或縮寫形式。對於解析來說,兩種形式都是可接受的,與模式字母的數量無關。
- Number: 對於格式化來說,模式字母的數量是最小的數位,如果數位不夠,則用 0 填充以達到此數量。對於解析來說,模式字母的數量被忽略,除非必須分開兩個相鄰字段。
- Year: 如果格式器的 Calendar 是格里高利歷,則應用以下規則。
- 對於格式化來說,如果模式字母的數量為 2,則年份截取為 2 位數,否則將年份解釋為 number。
- 對於解析來說,如果模式字母的數量大於 2,則年份照字面意義進行解釋,而不管數位是多少。因此使用模式 "MM/dd/yyyy",將 "01/11/12" 解析為公元 12 年 1 月 11 日。
- 在解析縮寫年份模式("y" 或 "yy")時,
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 日。
- Month: 如果模式字母的數量為 3 或大於 3,則將月份解釋為 text;否則解釋為 number。
- General time zone: 如果時區有名稱,則將它們解釋為 text。對於表示 GMT 偏移值的時區,使用以下語法:
GMTOffsetTimeZone:
Hours 必須在 0 到 23 之間,Minutes 必須在 00 到 59 之間。格式是與語言環境無關的,並且數字必須取自 Unicode 標准的 Basic Latin 塊。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-digit 時區格式:
RFC822TimeZone: Sign TwoDigitHours Minutes TwoDigitHours: Digit Digit
TwoDigitHours 必須在 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 Tutorial, Calendar, TimeZone, DateFormat, DateFormatSymbols, 序列化表格
嵌套類摘要 |
---|
從類 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 |
構造方法詳細信息 |
---|
SimpleDateFormat
public SimpleDateFormat()
-
用默認的模式和默認語言環境的日期格式符號構造
SimpleDateFormat
。 注:此構造方法可能不支持所有語言環境。要覆蓋所有地區,請使用 DateFormat 類中的工廠方法。
SimpleDateFormat
public SimpleDateFormat(String pattern)
-
用給定的模式和默認語言環境的日期格式符號構造
SimpleDateFormat
。 注:此構造方法可能不支持所有語言環境。要覆蓋所有語言環境,請使用 DateFormat 類中的工廠方法。- 參數:
-
pattern
- 描述日期和時間格式的模式 - 拋出:
-
NullPointerException
- 如果給定的模式為 null -
IllegalArgumentException
- 如果給定的模式無效
SimpleDateFormat
public SimpleDateFormat(String pattern, Locale locale)
-
用給定的模式和給定語言環境的默認日期格式符號構造
SimpleDateFormat
。 注:此構造方法可能不支持所有語言環境。要覆蓋所有語言環境,請使用 DateFormat 類中的工廠方法。- 參數:
-
pattern
- 描述日期和時間格式的模式 -
locale
- 其日期格式符號要被使用的語言環境 - 拋出:
-
NullPointerException
- 如果給定的模式或語言環境為 null -
IllegalArgumentException
- 如果給定的模式無效
SimpleDateFormat
public SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)
-
用給定的模式和日期符號構造
SimpleDateFormat
。- 參數:
-
pattern
- 描述日期和時間格式的模式 -
formatSymbols
- 要用來格式化的日期格式符號 - 拋出:
-
NullPointerException
- 如果給定的模式或 formatSymbols 為 null -
IllegalArgumentException
- 如果給定的模式無效
方法詳細信息 |
---|
set2DigitYearStart
public void set2DigitYearStart(Date startDate)
-
設置 100 年周期的兩位數年份,該年份將被解釋為從用戶指定的日期開始。
-
- 參數:
-
startDate
- 在解析時,兩位數年份將被置於startDate
和startDate + 100 years
之間的范圍內。 - 從以下版本開始:
- 1.2
- 另請參見:
- get2DigitYearStart()
get2DigitYearStart
public Date get2DigitYearStart()
-
返回在 100 年周期內被解釋的兩位數字年份的開始日期。
-
- 返回:
- 在 100 年周期內被解析的兩位數字年份的開始日期
- 從以下版本開始:
- 1.2
- 另請參見:
- set2DigitYearStart(java.util.Date)
format
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos)
-
將給定的
Date
格式化為日期/時間字符串,並將結果添加到給定的StringBuffer
。 -
- 指定者:
-
類
DateFormat
中的format
-
- 參數:
-
date
- 要被格式化為日期-時間字符串的日期-時間值。 -
toAppendTo
- 新的日期-時間文本被添加的位置。 -
pos
- 格式化的位置。輸入時:如果需要,是一個對齊字段。輸出時:為對齊字段的偏移量。 - 返回:
- 格式化的日期-時間字符串。
- 拋出:
-
NullPointerException
- 如果給定的日期為 null
formatToCharacterIterator
public AttributedCharacterIterator formatToCharacterIterator(Object obj)
-
格式化生成
AttributedCharacterIterator
的對象。可以使用返回的AttributedCharacterIterator
來生成所得的字符串,以及確定關於所得字符串的信息。AttributedCharacterIterator 的每個屬性鍵都是
DateFormat.Field
類型的,對應的屬性值與屬性鍵相同。 -
- 覆蓋:
-
類
Format
中的formatToCharacterIterator
-
- 參數:
-
obj
- 要格式化的對象 - 返回:
- 描述格式化的值的 AttributedCharacterIterator。
- 拋出:
-
NullPointerException
- 如果 obj 為 null。 -
IllegalArgumentException
- 如果 Format 不能格式化給定的對象,或者 Format 的模式字符串無效。 - 從以下版本開始:
- 1.4
parse
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。 - 另請參見:
- DateFormat.setLenient(boolean)
toPattern
public String toPattern()
-
返回描述此日期格式的模式字符串。
-
- 返回:
- 描述此日期格式的模式字符串。
toLocalizedPattern
public String toLocalizedPattern()
-
返回描述此日期格式的本地化模式字符串。
-
- 返回:
- 描述此日期格式的本地化模式字符串。
applyPattern
public void applyPattern(String pattern)
-
將給定模式字符串應用於此日期格式。
-
- 參數:
-
pattern
- 此日期格式的新的日期和時間模式 - 拋出:
-
NullPointerException
- 如果給定的模式為 null -
IllegalArgumentException
- 如果給定的模式無效
applyLocalizedPattern
public void applyLocalizedPattern(String pattern)
-
將給定的本地化模式字符串應用於此日期格式。
-
- 參數:
-
pattern
- 要被映射到此格式的新的日期和時間格式模式的字符串 - 拋出:
-
NullPointerException
- 如果給定的模式為 null -
IllegalArgumentException
- 如果給定的模式無效
getDateFormatSymbols
public DateFormatSymbols getDateFormatSymbols()
-
獲取此日期格式的日期和時間格式符號的一個副本。
-
- 返回:
- 此日期格式的日期和時間格式符號
- 另請參見:
- setDateFormatSymbols(java.text.DateFormatSymbols)
setDateFormatSymbols
public void setDateFormatSymbols(DateFormatSymbols newFormatSymbols)
-
設置此日期格式的日期和時間格式符號。
-
- 參數:
-
newFormatSymbols
- 新的日期和時間格式符號 - 拋出:
-
NullPointerException
- 如果給定的 newFormatSymbols 為 null - 另請參見:
- getDateFormatSymbols()
clone
public Object clone()
-
創建此
SimpleDateFormat
的一個副本。此副本也將復制格式的日期格式符號。 -
- 覆蓋:
-
類
DateFormat
中的clone
-
- 返回:
-
此
SimpleDateFormat
的一個副本 - 另請參見:
- Cloneable
hashCode
public int hashCode()
-
返回此
SimpleDateFormat
對象的哈希碼值。 -
- 覆蓋:
-
類
DateFormat
中的hashCode
-
- 返回:
-
此
SimpleDateFormat
對象的哈希碼值。 - 另請參見:
- Object.equals(java.lang.Object), Hashtable
equals
public boolean equals(Object obj)
-
比較給定對象與此
SimpleDateFormat
的相等性。 -
- 覆蓋:
-
類
DateFormat
中的equals
-
- 參數:
-
obj
- 要與之比較的引用對象。 - 返回:
-
true 如果給定對象與此
SimpleDateFormat
相等 - 另請參見:
- Object.hashCode(), Hashtable