2012-09-26 70 views
2

我想解析一個日期與SimpleDateFormat,我遇到了一個奇怪的行爲。Java DateFormat返回不正確的日期

這個例子打印我的機器上"Sun Jan 01 19:00:32 CET 2012"

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Locale; 

public class Test { 
    public static void main(String[] args) throws ParseException { 
     System.out.println(new SimpleDateFormat("MMM dd HH:mm:ss YYYY", Locale.ENGLISH).parse("Sep 26 19:00:32 2012")); 
    } 
} 

我希望有"Wed Sep 26 19:00:32 CET 2012"返回代替。

我的DateFormat字符串不正確?

回答

10

年使用小型股y

System.out.println(new SimpleDateFormat("MMM dd HH:mm:ss yyyy", Locale.ENGLISH). 
      parse("Sep 26 19:00:32 2012")); 

大帽Y是 「週刊年度」 according to javadoc

+0

非常感謝你,那就是答案。愚蠢的監督真的。只要SO會允許我,我會立即給出答案。 – mercutio

+0

今天打破了Twitter API。 – Kiril

2

使用yyyy(小寫)而不是YYYY(大寫)。 Y週年;而y

另請注意,Y模式僅在Java 7中引入,這可以解釋您爲什麼看到錯誤。按照documentation

如果本週年被指定「Y」和日曆不支持任何 星期裏,歷年(「Y」)來代替。可以通過調用 getCalendar()。isWeekDateSupported()來測試 週年的支持。

使用Java 7,並用GregorianCalendar,你的代碼工作得很好,你可以在這個demo看到。

0

問題出在日期解析不格式化。嘗試在解析中傳遞新的Date(),查看結果並相應地更改格式。

相關問題