我正在尝试使用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.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)
您还可以从
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] 删除。
我来说两句