2012-09-26 77 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(),查看结果并相应地更改格式。

相关问题