簡體   English   中英

SimpleDateFormat日期被錯誤地解析?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM