gpt4 book ai didi

javascript - 如何设置 Node 进程的时区?

转载 作者:行者123 更新时间:2023-12-03 18:34:37 25 4
gpt4 key购买 nike

我正在使用 12.14.1,在我看来,node 忽略了 TZ env。许多情况下是可变的:

$ TZ=GMT-4 node -e 'console.log(new Date().getTimezoneOffset(), new Date().toString())'
-120 Mon Mar 30 2020 10:10:12 GMT+0200 (Central European Summer Time)

这是完全错误的。要么它都应该是 GMT+4(是的,+,奇怪的 POSIX 东西),要么返回的时间不能与我的本地时间匹配(时区 GMT+2 和 GMT+4 的同一时间是无稽之谈)。

不同时区的时间在转换为相同时区进行打印时应该不同:

$ TZ=GMT-2 node -e 'console.log(new Date().getTimezoneOffset(), new Date().toString())'
-120 Mon Mar 30 2020 10:10:14 GMT+0200 (Central European Summer Time)

然而 Node 坚持认为它是相同的。

如何可靠且跨平台(Linux、Windows、Mac)设置 Node 进程的任意(不仅是 UTC 和等效时间)时区?

编辑:
这是一个正确选项的示例,它的行为方式:

$ TZ=GMT-4 date
Po 30. března 2020, 12:06:04 GMT
$ TZ=GMT-2 date
Po 30. března 2020, 10:06:09 GMT

当转换为相同的时区时,来自不同时区的时间必须不同(GMT+4 和 GMT+2 相差 2 小时)。

最佳答案

TZ=GMT 后跟 +/- 并且数字自版本 10 起不再有效。例如 GMT+4 可以使用 TZ=Europe/Samara 代替。在搜索合适的时区时,请注意选择没有夏令时 (DST) 的时区。

主要 Node 版本 6-13 的测试打印 new Date().getTimezoneOffset(), new Date().toString():

current date         : Po 30. března 2020, 14:32:31 CEST
with TZ=GMT-4 : Po 30. března 2020, 16:32:31 GMT
with TZ=UTC : Po 30. března 2020, 12:32:31 UTC
with TZ=GET : Po 30. března 2020, 16:32:31 +04
with TZ=Europe/Samara: Po 30. března 2020, 12:32:31 GET

v6.17.1
with TZ=GMT-4 : -240 'Mon Mar 30 2020 16:32:31 GMT+0400 (GMT)'
with TZ=UTC : 0 'Mon Mar 30 2020 12:32:31 GMT+0000 (UTC)'
with TZ=GET : 0 'Mon Mar 30 2020 12:32:31 GMT+0000 (GET)'
with TZ=Europe/Samara: -240 'Mon Mar 30 2020 16:32:31 GMT+0400 (+04)'

v7.10.1
with TZ=GMT-4 : -240 'Mon Mar 30 2020 16:32:32 GMT+0400 (GMT)'
with TZ=UTC : 0 'Mon Mar 30 2020 12:32:32 GMT+0000 (UTC)'
with TZ=GET : 0 'Mon Mar 30 2020 12:32:32 GMT+0000 (GET)'
with TZ=Europe/Samara: -240 'Mon Mar 30 2020 16:32:32 GMT+0400 (+04)'

v8.17.0
with TZ=GMT-4 : -240 'Mon Mar 30 2020 16:32:32 GMT+0400 (GMT)'
with TZ=UTC : 0 'Mon Mar 30 2020 12:32:33 GMT+0000 (UTC)'
with TZ=GET : 0 'Mon Mar 30 2020 12:32:33 GMT+0000 (GET)'
with TZ=Europe/Samara: -240 'Mon Mar 30 2020 16:32:33 GMT+0400 (+04)'

v9.11.2
with TZ=GMT-4 : -240 'Mon Mar 30 2020 16:32:33 GMT+0400 (GMT)'
with TZ=UTC : 0 'Mon Mar 30 2020 12:32:33 GMT+0000 (UTC)'
with TZ=GET : 0 'Mon Mar 30 2020 12:32:33 GMT+0000 (GET)'
with TZ=Europe/Samara: -240 'Mon Mar 30 2020 16:32:33 GMT+0400 (+04)'

v10.19.0
with TZ=GMT-4 : -120 'Mon Mar 30 2020 14:32:34 GMT+0200 (Central European Summer Time)'
with TZ=UTC : 0 'Mon Mar 30 2020 12:32:34 GMT+0000 (Coordinated Universal Time)'
with TZ=GET : 0 'Mon Mar 30 2020 12:32:34 GMT+0000 (GMT)'
with TZ=Europe/Samara: -240 'Mon Mar 30 2020 16:32:34 GMT+0400 (Samara Standard Time)'

v11.15.0
with TZ=GMT-4 : -120 'Mon Mar 30 2020 14:32:35 GMT+0200 (Central European Summer Time)'
with TZ=UTC : 0 'Mon Mar 30 2020 12:32:35 GMT+0000 (Coordinated Universal Time)'
with TZ=GET : 0 'Mon Mar 30 2020 12:32:35 GMT+0000 (GMT)'
with TZ=Europe/Samara: -240 'Mon Mar 30 2020 16:32:35 GMT+0400 (Samara Standard Time)'

v12.16.1
with TZ=GMT-4 : -120 Mon Mar 30 2020 14:32:35 GMT+0200 (Central European Summer Time)
with TZ=UTC : 0 Mon Mar 30 2020 12:32:35 GMT+0000 (Coordinated Universal Time)
with TZ=GET : 0 Mon Mar 30 2020 12:32:35 GMT+0000 (GMT)
with TZ=Europe/Samara: -240 Mon Mar 30 2020 16:32:35 GMT+0400 (Samara Standard Time)

v13.12.0
with TZ=GMT-4 : -120 Mon Mar 30 2020 14:32:36 GMT+0200 (Central European Summer Time)
with TZ=UTC : 0 Mon Mar 30 2020 12:32:36 GMT+0000 (Coordinated Universal Time)
with TZ=GET : 0 Mon Mar 30 2020 12:32:36 GMT+0000 (GMT)
with TZ=Europe/Samara: -240 Mon Mar 30 2020 16:32:36 GMT+0400 (Samara Standard Time)

更多详情见工单:https://github.com/nodejs/node/issues/32564

关于javascript - 如何设置 Node 进程的时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60926255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com