[英]SimpleDateFormat date being parsed incorrectly?
所以我有一些代碼:
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之后,我希望它能夠解析為true ...但事實並非如此。
我正在查看announcementDate的fastTime值,它似乎遠大於當前系統時間,即使現在(33分鍾后)
當我在調試器中查看已解析的announceDate時,我看到:
2014-08-25T12:00:00.000+0100
在我看來這是錯誤的。 我確定時區存在一些問題或類似問題,但我無法完全解決。
知道為什么我的日期解析不正確嗎?
我知道這些事情在很多情況下都不是瑣碎的問題,所以我希望有人會熟悉這些實用程序並發現我的問題(並為我節省了半天的瘋狂搜索時間)
您顯然生活在愛爾蘭,夏令時為+1小時。
也就是說,您的時間12:00h IST對應於格林尼治標准時間11:00h。 因此,這意味着:您的假設將在當地時間12:00h變為正確。
我用這個小程序對它進行了測試,並且在德國格林威治標准時間(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上運行該命令將得到以下輸出:
真正
假
可能是您的格林尼治標准時間前一年,您的simpledateformat模式應為("EEE, dd-MMM-yyyy HH:mm:ss yyyy z")
@paul您的系統具有什么時間限制? 如果是格林尼治標准時間,則只有您的比較有效。 否則,您也必須在比較中考慮時區偏移。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.