2 回答

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
您應(yīng)該在 now() 語(yǔ)句中使用區(qū)域偏移量。
例如要獲取我使用的 UTC 時(shí)間LocalDateTime.now(ZoneOffset.UTC);
在您的情況下,您可以直接使用時(shí)區(qū)的 ZoneId
LocalDateTime.now(ZoneId.of("Asia/Kolkata"));

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
如果你看一下LocalDateTime::now
方法的實(shí)現(xiàn),它看起來(lái)像:
public static LocalDateTime now() { return now(Clock.systemDefaultZone()); }
因此它將使用Clock
您系統(tǒng)的實(shí)現(xiàn)默認(rèn)值??赡苣谌萜髦惺褂貌煌牟僮飨到y(tǒng),這就是為什么會(huì)使用不同的默認(rèn)時(shí)鐘。
因此LocalDateTime::now
,在您的情況下,方法調(diào)用將根據(jù)系統(tǒng)默認(rèn)值返回不同的值Clock
。然后,如果您想將其轉(zhuǎn)換為ZonedDateTime
usingatZone
方法 - 您將在同一區(qū)域有不同的時(shí)間 - 因?yàn)?code>LocalDateTime::now在不同的操作系統(tǒng)中為不同的默認(rèn)時(shí)鐘返回不同的值。
為了克服這個(gè)問(wèn)題,您可以ZonedDateTime
直接使用類(lèi)并將區(qū)域傳遞給now
方法:
ZonedDateTime.now(ZoneId.of("Asia/Kolkata")).toInstant().toEpochMilli();
添加回答
舉報(bào)