Node.js 错误地识别夏令时
Posted
技术标签:
【中文标题】Node.js 错误地识别夏令时【英文标题】:Daylight Savings Time wrongly identified by Node.js 【发布时间】:2014-11-03 09:37:27 【问题描述】:我遇到了时区、DST 和 Node.js 的问题。它不能正确识别 DST 效果。我的操作系统是 Windows 8.1,并且设置了时区值和 DST。我尝试了这两种方法:
1) 节点的日期对象
我在 Node Prompt 中输入了以下代码并收到了斜体的答案:
new Date()
2014 年 9 月 9 日星期二 18:42:36 GMT-0200(Horário brasileiro de verão(巴西夏令时))
不过,巴西的夏令时刚从 10 月 19 日开始,我们现在不在夏令时。因此,小时从现在开始偏移 1 小时。
2) 节点时间
我从 npm 获得了节点时间包,以便能够更改时区。在代码中:
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】:节点时间包does not work on Windows。我什至无法安装它,所以我不确定你是怎么做的。你应该卸载它。
如果您需要在 Node(或浏览器)中支持非本地时区,我建议使用 moment.js 和 moment-timezone 插件。
在设置为巴西的时区的 Windows 上运行 new Date()
,我得到了正确的输出。
唯一可以解释您的结果的是,如果修改了时区注册表设置 - 但是您还会在任务栏上的系统时钟中看到错误的时间。所以很抱歉,我无法重现其中的那部分。
【讨论】:
嗨,马特!非常感谢。实际上,时区在 node-time 包中没有任何影响(虽然安装成功)。我得到的错误是由于我设置了一个 TZ 环境变量而忘记删除。在 Node 中安装 moment-timezone 就足够了,现在它运行良好。以上是关于Node.js 错误地识别夏令时的主要内容,如果未能解决你的问题,请参考以下文章
Swift DateFormatter 错误地转换字符串日期/时间