节点使用2019年巴西夏令时

保罗27

我正在尝试使用NodeJS Date,但它返回的日期是巴西夏季时间(-2),而不是正常的日期(-3)。今年巴西将没有夏令时,所以应该是-3。

我尝试了:new Date().toString()在Node REPL中,输出为:'Mon Dec 02 2019 11:22:28 GMT-0200 (Brasilia Summer Time)'我尝试使用ENV将TZ设置为America/Sao_Paulo,结果是相同的。

我在计算机上的时间应该是-3:如果我date在终端中运行Mon 2 Dec 10:23:15 -03 2019并且在Python REPL中运行,结果也是正确的。

特里·伦诺克斯

我建议确保您正在为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时,UTC偏移为-2小时。

如果不起作用我也建议尝试一下moment.jsmoment-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)

您还可以从

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时区数据库的原因,并且很容易切换符号)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章