关于javascript:Node.js错误地识别夏令时

Daylight Savings Time wrongly identified by Node.js

我遇到了时区,DST和Node.js的问题。 它无法正确识别DST效果。 我的操作系统是Windows 8.1,并且具有时区值和DST设置良好。 我尝试了这两种方法:

1)节点的日期对象

我在Node Prompt中输入以下代码并以斜体显示答案:

1
new Date()

Tue Sep 09 2014 18:42:36 GMT-0200(Horáriobrasileirode ver?o(巴西夏令时))

然而,巴西的DST刚刚在10月19日开始,我们现在不在DST。 因此,小时从现在开始1小时。

2)节点时间

我从npm获得了节点时间包,以便能够更改时区。 在代码中:

1
2
3
4
5
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小时的转移。

难道我做错了什么? 有解决方法吗?


节点时间包在Windows上不起作用。 我甚至无法安装它,所以我不确定你是怎么做的。 你应该卸载它。

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

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

Time Zone Settings

tzutil output

node output

唯一可以解释您的结果的是如果时区注册表设置被修改 - 但是您还会在任务栏上的系统时钟中看到错误的时间。 所以我很抱歉,但我不能复制它的那一部分。