在具有 timezone 的 Docker-Container 內部Etc/UTC,我需要將表示Europe/Berlin-timezone 中的 Date 的 Date-String 轉換為 UTC 時間戳。
所以可以說Europe/Berlin-Date 是2022-04-20T00:00:00.
現在 UTC-Timestamp 應該等于2022-04-19T22:00:00.
但是當我這樣做時
console.log(new Date("2022-04-20").getTime())
我得到1650412800000這相當于2022-04-20T02:00:00在Europe/Berlin-timezone 中。
我該怎么做?
編輯:
我嘗試了各種庫,但仍然無法管理
const { DateTime } = require("luxon")
var f = DateTime.fromISO("2022-04-20").setZone('Europe/Berlin').toUTC()
console.log(f)
中的等效標記 f也是2022-04-20T02:00:00:/
uj5u.com熱心網友回復:
我需要將代表歐洲/柏林時區日期的日期字串轉換為 UTC 時間戳。
從根本上說,只有日期的值不能轉換為時間戳,除非您任意將時間與該日期相關聯。聽起來您打算使用當地時間午夜 (00:00 02:00),但您看到的是午夜 UTC (00:00Z)。
這是由于您構建Date物件的方式。您指定new Date("2022-04-20"),根據ECMASCript 規范,它將被視為午夜 UTC。規范說:
...當 UTC 偏移表示不存在時,僅日期形式被解釋為 UTC 時間,而日期時間形式被解釋為本地時間。
是的,這與 ISO 8601 不一致,并且已經討論過了。
要解決此問題,請附加T00:00到您的輸入字串,以便您專門詢問當地時間。換句話說,new Date("2022-04-20T00:00").
也就是說,如果您需要它不是“本地時間”,而是確切地說 Europe/Berlin,那么是的 - 您需要使用庫。在luxon中是這樣的:
DateTime.fromISO('2022-04-20T00:00', {zone: 'Europe/Berlin'}).toUTC()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/479582.html
