2015-04-07 58 views
0

我這樣做代碼:SimpleDataFormat是限制predefiend日期

SimpleDateFormat df = new SimpleDateFormat("MMMM dd, yyyy hh:mmaa"); 
df.setTimeZone(TimeZone.getTimeZone("America/New_York")); 
Date parsedDate = df.parse("Dec 19, 2011 2:37pm"); 

結果:

java.text.ParseException: Unparseable date: "Dec 19, 2011 2:37pm" 

據我所知:

Dec 19, 2011 2:37pm 

year -> yyyy -> 2011 
month -> MMM -> Dec 
day in month -> d -> 2 
a -> AM/PM -> pm 
minute -> mm -> 37 
Hour (1-12, AM/PM) -> h -> 3 

什麼是錯的格式化?

+4

你的格式有'MMMM',而不是'MMM'。另外,當你指定「一小時或兩位數小時」的「h」時,你已經指定了「hh」,意思是「2位小時」。 (否則它會是02:37)你可能想'd'而不是'dd'以及... –

+0

好的,是否有任何問題設置dd:mmaa並使用例如下午2:37?因爲它以這種方式工作... – felipe

+0

你的意思是'hh:mmaa'?好吧,我有點驚訝它的作用,但我會改變它,因此你的代碼反映你的意圖 - 你不*實際*需要兩位數,所以你不應該指定它們。只需使用'h'。 –

回答

3

您必須指定一個區域:

SimpleDateFormat df = new SimpleDateFormat("MMMM dd, yyyy hh:mmaa", Locale.US); 

因爲該月的名稱取決於它。

+0

好吧......我正在考慮刪除帖子....我對這個問題收到了否定的回答:-OI試圖尋找問題,但格式化的結果都是「正確的」。但區域設置是必要的。 – felipe

+0

@Orochi如果你的問題得到解答,你不能刪除它。 – Jens

+0

這並不反映所要求的格式,它有一個縮寫的月份名稱和1或2位數的小時;我懷疑OP應該使用'「MMM d,yyyy h:mmaa」'。指定語言環境也很重要,此解決方案不會*工作*,但實際上並不適合數據。 –

2

MMMM - 全月( 「臘」)

MMM - 短月( 「DEC」)

h - 12H格式的短小時(2)

hh - 2- 12小時格式的兩位數小時(02)

而且總是使用的語言環境,當您創建SimpleDateFormat實例:

SimpleDateFormat df = new SimpleDateFormat("MMM d, yyyy h:mmaa", Locale.US); 
+0

是的,這是問題... Locale – felipe

+2

我懷疑OP確實需要'd'而不是'dd'。但這至少比目前接受的答案更接近:) –

+0

@JonSkeet我相信問題值得評論,而不是回答...但是我想要2000. –