Java日期解析器关闭了两年

时间:2012-10-15 21:44:04

标签: java date

我真的不知道从哪里开始调试这个。

代码:

String date = "Mon, 15 Oct 2012 20:32:12 +0000 (GMT)";

        SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:MM:ss Z");

        try {
            Date date2 = format.parse(date);
            System.err.println("parsed: " + date2);
        }
        catch (ParseException e) {
            System.err.println("Failed to parse: " + format);
        }

输出:

parsed: Fri Aug 15 16:00:12 EDT 2014

为什么这会在两年零两个月后结束?

2 个答案:

答案 0 :(得分:9)

使用小mm分钟

EEE, dd MMM yyyy HH:mm:ss Z

答案 1 :(得分:4)

Jigar Joshi已经回答了主要问题 - 但只是提示设置DateFormat.setLenient(false)(参见JavaDoc)将避免很多像这样的解析问题,因为格式不会默默接受无意义的价值观。

第二个提示(因为我最近这一点)是要始终用a.m.和p.m来测试你的DateFormats。时间戳,因为很容易混合hhHH格式(12小时和24小时格式)。否则,您可以发现您的测试数据工作正常,但实际数据会因错误混乱而失败。