如果我們有包含時區信息的時間戳,如2017-07-03T17:30:00-04:00,並將其解析爲java.Date或者joda.DateTime。解析後timestamp包含timezone日期對象,Date對象是否包含時區信息
它是否包含時區信息? 我在問這個,因爲我想比較兩個不同的日期實例。因此,如果它不包含時區信息,則日差將在不同時區出錯
更新: 我運行快速單元測試來驗證,首先將日期實例轉換爲毫秒,然後在減去這兩毫秒後轉換回TimeUnit 。營業時間是不同的時區不同
如果我們有包含時區信息的時間戳,如2017-07-03T17:30:00-04:00,並將其解析爲java.Date或者joda.DateTime。解析後timestamp包含timezone日期對象,Date對象是否包含時區信息
它是否包含時區信息? 我在問這個,因爲我想比較兩個不同的日期實例。因此,如果它不包含時區信息,則日差將在不同時區出錯
更新: 我運行快速單元測試來驗證,首先將日期實例轉換爲毫秒,然後在減去這兩毫秒後轉換回TimeUnit 。營業時間是不同的時區不同
java.util.Date
和Joda-Time都已被java.time類取代。
你輸入的字符串2017-07-03T17:30:00-04:00
是標準的ISO 8601格式,並具有在結束偏移從-UTC。 -04:00
表示該字符串表示UTC後四小時的時間。
此偏移量不是時區。時區是特定區域偏移的歷史。例如,America/Barbados
或America/New_York
。
解析你的字符串作爲java.time.OffsetDateTime
對象。
OffsetDateTime odt = OffsetDateTime.parse("2017-07-03T17:30:00-04:00");
odt.toString():2017-07-03T17:30:00-04:00
您可以通過調用方法IsEqual
,isBefore
和isAfter
比較OffsetDateTime
實例。
要查看UTC同一時刻同時,提取Instant
。
Instant instant = odt.toInstant() ;
instant.toString():2017-07-03T21:30:00Z
在端的Z
是短期的和Zulu
裝置UTC。
這是要取決於你使用什麼類型的DateTime
,因爲Java 8中,你有以下選擇:
LocalDate
或LocalDateTime
。它將放棄時區信息,只有當地時區纔會有「有效」值。如果沒有關於產生該值的服務器進程的特定時區的上下文,該值是不明確的。ZonedDate
或ZonedDateTime
。這一個保留了時區。比較仍然不明確:您遇到類似DST或日曆更改的問題(取決於您需要兼容的日期時間範圍)。爲了排序/比較的目的,您可能需要將其轉換爲參考時標,這就是爲什麼:Instant
表示UTC的絕對時間刻度上的特定時刻。任何Instant
都可以與其他Instant
直接比較,並且任何值的不確定性都可以通過Instant
的定義來解決。輸入值將被轉換爲UTC中匹配的對應值,因此即使絕對時間值將被正確保存,原始時區(如果有)也將丟失。因此,例如,如果您依賴時區來決定位置或區域設置,則Instant
不是一個好選擇。
這兩個類的javadoc說什麼? –
我認爲這應該基於計算日差的方式,首先將其轉換爲毫秒,並將這兩個日期與毫秒進行比較。但是,我運行了一個快速單元測試,它給了我不同時區的不同時間 – Cheng