SimpleDateFormat日期被错误地解析?

时间:2014-08-25 10:38:57

标签: java date-format simpledateformat date-formatting

所以我有一些代码:

String ANNOUNCEMENT_DATE = "Sat, 25-Aug-2014 11:00:00 GMT"; 

DateFormat df = new SimpleDateFormat("EEE, dd-MMM-yyyy HH:mm:ss z");

Date announcementDate = null;

try {
    announcementDate = df.parse(announcementDateString);
} catch (ParseException e) {
    e.printStackTrace();
}

announcementEpochTime = announcementDate.getTime()/1000;

因此,正如我所料,直到今天11:00:00,以下表达式解析为false:

System.currentTimeMillis()/1000 >= announcementEpochTime

然而,在11:00:00之后,我预计它会解决为真......但它并没有。

我正在查看announcementDate的fastTime值,它似乎远远大于当前的系统时间,即使是现在(33分钟后)

当我在调试器中查看已解析的announcementDate时,我看到:

 2014-08-25T12:00:00.000+0100

这对我来说不对。我确定时区或某些问题存在一些问题,但我无法理解它。

知道为什么我的日期被错误地解析了吗?

我知道这些事情在很多情况下都远非微不足道的问题,所以我希望有人会熟悉这些实用程序并发现我的问题无法控制(并且疯狂地节省了半天谷歌搜索)

3 个答案:

答案 0 :(得分:3)

你显然居住在爱尔兰,夏季夏令时为+1小时。

这意味着,你的时间12:00h IST对应格林尼治标准时间11:00h。因此,这意味着:您的假设将在当地时间12:00成为现实。

我用这个小程序测试了它,并且对GMT(在德国)的日照时间为+2小时:

public class Time {
    public static void main(String[] args) {
        String ANNOUNCEMENT_DATE1 = "Mon, 25-Aug-2014 10:00:00 GMT";
        String ANNOUNCEMENT_DATE2 = "Mon, 25-Aug-2014 11:00:00 GMT";

        DateFormat df = new SimpleDateFormat("EEE, dd-MMM-yyyy HH:mm:ss z", Locale.ENGLISH);

        Date announcementDate1 = null;
        Date announcementDate2 = null;
        try {
            announcementDate1 = df.parse(ANNOUNCEMENT_DATE1);
            announcementDate2 = df.parse(ANNOUNCEMENT_DATE2);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        long now = System.currentTimeMillis();
        System.out.println(now >= announcementDate1.getTime());
        System.out.println(now >= announcementDate2.getTime());
    }
}

在12:54(当地时间)运行该操作会产生以下输出:

  

     

答案 1 :(得分:1)

可能是你的简单格式模式应该是("EEE, dd-MMM-yyyy HH:mm:ss yyyy z"),就像你在GMT前一年那样

答案 2 :(得分:0)

@paul您的系统有什么时间? 如果是格林威治标准时间,那么只有你的比较是有效的。否则你也必须考虑比较中的时区偏移。