Java DateFormat返回错误的日期

时间:2012-09-26 17:09:31

标签: java date date-parsing

我正在尝试使用SimpleDateFormat解析日期,但我遇到了一种奇怪的行为。

此示例在我的计算机上打印"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字符串不正确吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

使用yyyy(小写)代替YYYY(大写)。 Y周年;而y

另请注意,Y模式仅在 Java 7 中引入,这可以解释您看到错误的原因。根据{{​​3}}:

  

如果指定了周年'Y'且日历不支持任何日期   一周,使用日历年('y')代替。支持   可以通过电话测试一周的年份   getCalendar()。isWeekDateSupported()。

使用Java 7和GregorianCalendar,您的代码可以正常运行,正如您在 documentation 中看到的那样。

答案 2 :(得分:0)

问题在于日期解析不是格式化。尝试在解析中传递新的Date(),查看结果并相应地更改格式。