我建议确保您运行的是 LTS 或当前版本的最新 Node.js 版本,例如12.13.1+ 或 13.2+
对于 LTS,我相信您想要版本 12.13.1,更新日志在这里:https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V12.md#12.13.1,这显示了巴西 DST 更改的更新。
由于 DST 更改是在 2019 年 4 月进行的(我相信),旧的 Node 版本无法反映它们。
如果我将时区设置为巴西,并执行以下操作(在节点 12.13.1 中):
console.log("Current time:", new Date().toString());
我得到输出:
Current time: Mon Dec 02 2019 11:20:56 GMT-0300 (Brasilia Standard Time)
这是正确的
但是,我使用 Node 12.13.0 获得了 -2 小时的 UTC 偏移量。
我还建议尝试 moment.js 和 moment-timezone 如果这不起作用,它们已经更新以反映巴西 DST 的变化,你可以这样做:
console.log(moment("2019-06-01T00:00:00Z").tz("America/Sao_Paulo").format());
console.log(moment("2019-12-01T00:00:00Z").tz("America/Sao_Paulo").format());
这是给我的结果:
2019-05-31T21:00:00-03:00
2019-11-30T21:00:00-03:00
我认为这是正确的(每个都为 UTC -3:00)
您还可以从
获取 UTC 偏移量
console.log(moment.tz.zone("America/Sao_Paulo").utcOffset(new Date("2019-06-01T00:00:00Z").getTime()));
console.log(moment.tz.zone("America/Sao_Paulo").utcOffset(new Date("2019-12-01T00:00:00Z").getTime()));
这应该为 12 月 1 日和 6 月 1 日提供 180 分钟(这实际上是 UTC 偏移的负数,这是由于 IANA 时区数据库,并且很容易简单地切换符号)。