提问者:小点点

node.js错误地标识了夏令时


我对时区,DST和Node.js有问题。 它不能正确识别DST效应。 我的操作系统是Windows8.1,并且有很好的时区值和DST设置。 我尝试了这两种方法:

1)节点的日期对象

我在Node Prompt中键入了以下代码,并收到了斜体的答案:

new Date()

2014年9月9日星期二18:42:36 GMT-0200(Horário brasileiro de Verão(巴西夏令时))

然而,巴西DST将于10月19日开始,我们现在不在DST中。 因此,时点从现在起偏移1小时。

2)节点时间

我从npm获得了node-time包,以便能够更改时区。 在代码中:

time = require('time');
dateFormat = require('dateformat');

now = time.Date();
console.log(dateFormat(now.setTimezone('America/Sao_Paulo').getTime(), "yyyy-mm-dd HH:MM:ss Z"))

结果,我得到了

2014-09-09 18:42:36 GMT-0200

巴西正常时区是GMT-0300。 小时也会移动1小时。

我是不是做错了什么? 有解决办法吗?


共1个答案

匿名用户

节点时间包在Windows上不工作。 我连安装都装不上,所以我不知道你是怎么做的。 你应该卸载它。

如果您需要在Node(或浏览器)中支持非本地时区,我建议使用moment.js和moment-timezone插件。

在Windows上运行new Date(),时区设置为巴西,我会得到正确的输出。

唯一能解释结果的是,如果时区注册表设置被修改了,那么您也会看到任务栏上的系统时钟中出现了错误的时间。 所以很抱歉,但我不能再现这部分。