1 回答

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個贊
避免java.util.Date
Ajava.util.Date
代表 UTC 中的某個時刻。無需將其作為文本進(jìn)行操作。注意:該方法Date::toString
說謊了,在生成文本時動態(tài)應(yīng)用 JVM 當(dāng)前的默認(rèn)時區(qū)。
相反,使用java.time.Instant
首先從那個可怕的遺留類轉(zhuǎn)換為它的現(xiàn)代替代品,java.time.Instant
.?注意添加到舊類的新轉(zhuǎn)換方法。
Instant?instant?=?myDate.toInstant()?;
ZonedDateTime
AnInstant
也是 UTC 中的時刻。要通過某個地區(qū)的人們使用的距 UTC 的偏移量查看同一時刻,請應(yīng)用 aZoneId
來獲取ZonedDateTime
對象。
ZoneId?z?=?ZoneId.of(?"America/Montreal"?)?; ZonedDateTime?zdt?=?instant.atZone(?z?)?;
請明確:這個zdt
對象和這個instant
對象都代表同一時刻,時間軸上的同一點(diǎn)。它們僅在掛鐘時間上有所不同。想象一下,冰島的某人(始終采用 UTC)給魁北克的某人打電話,他們都抬頭看著各自墻上的時鐘。
從現(xiàn)代到傳統(tǒng)
如果您ZonedDateTime
手頭有一個對象,并且必須獲得一個java.util.Date
用于與尚未更新到java.time的舊代碼進(jìn)行互操作的對象,則可以進(jìn)行轉(zhuǎn)換。通過從對象中提取 aInstant
來從 an 轉(zhuǎn)到 a?。Date
Instant
ZonedDateTime
Instant?instant?=?zdt.toInstant()?; java.util.Date?date?=?java.util.Date.from?(?instant?)?;
如果您需要 aCalendar
而不是Date
,則轉(zhuǎn)換更直接。
Calendar?cal?=?GregorianCalendar.from(?zdt?)?;
添加回答
舉報