亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java ZonedDateTime.toInstant() 行為

Java ZonedDateTime.toInstant() 行為

慕少森 2021-09-11 13:40:42
我在2018年12 月 7 日運行以下表達式。我看到了一個差異:ZonedDateTime.now(ZoneId.of("America/New_York")).minusDays(30)返回(正確):2018-11-07T22:44:11.242576-05:00[America/New_York]而轉換為瞬間:ZonedDateTime.now(ZoneId.of("America/New_York")).minusDays(30).toInstant()似乎通過添加額外的一天來弄亂結果:2018-11-08T03:58:01.724728Z我需要立即轉換以在以下代碼中使用其結果作為日期:... = Date.from(t.toInstant()) 等效的 Python 代碼 (Django) 可以正常工作:datetime.datetime.now('America/New_York')+datetime.timedelta(days=-30)評估為: datetime: 2018-11-07 20:13:55.063888-05:00造成差異的原因是什么?我應該使用什么來使 Java 轉換為 Date 導致返回11 月 7 日,就像在 Python 的情況下一樣?基本上,我正在尋找該 Python 代碼到 Java 或偽代碼的等效翻譯:`datetime.X = datetime.now(deployment_zone) - (N_days)`,where `deployment_zone` is configurable (i.e. `America/New_York`)`N_days` is configurable (i.e. 30)
查看完整描述

2 回答

?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

那個“額外的一天”并不是真正的額外一天。2018-11-07T22:44:11在紐約相當于2018-11-08T03:58:01在UTC(這是同一時間點)。區別只是5幾個小時,而不是一天(當我用谷歌搜索時,我看到紐約是GMT-5)。


ZonedDateTime#toInstant返回Instant表示同一時間點(UTC)的實例:


將此日期時間轉換為 Instant。這將返回一個 Instant 表示時間線上與此日期時間相同的點。該計算結合了本地日期時間和偏移量。


如果你想不使用轉換為即時當偏移,那么你或許應該使用LocalDateTime:


ZonedDateTime.now(ZoneId.of("America/New_York"))

      .toLocalDateTime()

      .toInstant(ZoneOffset.UTC) 

這告訴它轉換,好像它已經是 UTC 時間(但這里有一個警告:這會更改日期/時間值)


查看完整回答
反對 回復 2021-09-11
  • 2 回答
  • 0 關注
  • 690 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號