所以我有一些代码:
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
这对我来说不对。我确定时区或某些问题存在一些问题,但我无法理解它。
知道为什么我的日期被错误地解析了吗?
我知道这些事情在很多情况下都远非微不足道的问题,所以我希望有人会熟悉这些实用程序并发现我的问题无法控制(并且疯狂地节省了半天谷歌搜索)
答案 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您的系统有什么时间? 如果是格林威治标准时间,那么只有你的比较是有效的。否则你也必须考虑比较中的时区偏移。