2

我正在尝试用 a 解析日期,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 字符串不正确吗?

4

3 回答 3

10

年份使用小型股y

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

根据 javadoc ,大盘Y是“周年” 。

于 2012-09-26T17:12:50.050 回答
2

使用yyyy(小写)而不是YYYY(大写)。Y周年;而是y_

另请注意,该Y模式仅在Java 7中引入,这可以解释您看到错误的原因。根据文档

如果指定了周年“Y”并且日历不支持任何周年,则使用日历年 ('y')。可以通过调用 getCalendar().isWeekDateSupported() 来测试对周年的支持。

使用 Java 7 和 a ,您的代码可以正常工作,如您在此演示GregorianCalendar中所见。

于 2012-09-26T17:12:51.630 回答
0

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

于 2012-09-26T17:13:52.473 回答