Unix格式的GMT/UTC(非本地)时间
GMT/UTC (not local) time in Unix format
我正在使用JavaScript,并试图获得Unix格式的GMT+0/UTC+0时间(也称为祖鲁时间)。
我已经设法用Unix格式获取了我的本地时间,如下所示:
var datetime = new Date()
var unixtime = Math.floor(Number(datetime/1000));
但当我尝试用UTC时间做同样的事情时。。。
var datetime = new Date()
var year = datetime.getUTCFullYear()
var month = datetime.getUTCMonth()
var day = datetime.getUTCDate()
var hours = datetime.getUTCHours()
var minutes = datetime.getUTCMinutes()
var seconds = datetime.getUTCSeconds()
var unixtime = (Date.UTC(year,month,day,hours,minutes,seconds,00)/1000);
它失败了。我只是用Unix格式获取本地时间。
你可以在这里直播:http://jsfiddle.net/wC8XH/1/(同样在粘贴箱上:http://pastebin.com/uDD5zUah)
这是一个输出示例:
2012-01-30 23:15:19 = 1327958119
2012-01-30 21:15:19 = 1327958119
操作:
date -d "2012-01-30 21:15:19" +%s
在Linux上给我的是1327950919,而不是1327958119。时差是7200秒,也就是2小时,这是我的时区(+0200)。
因此,如果我只是想以人类可读的格式获得UTC+0时间,但当我请求Date.UTC将其转换为Unix格式时,它会选择转换我的本地时间。
我是不是错过了什么?
是的,问题颠倒了。
Javascript总是以UTC或GMT的形式告诉您"Unix格式"中的秒数。因为Unix总是在UTC或GMT内部工作。如果不使用UTC来谈论"Unix时间"是没有意义的。
因此,您的两个Javascript代码片段以一种简单的方式和一种冗长复杂的方式找到了相同的正确答案(当前的"unix时间"是多少?),这就是为什么它们给出了相同的结果。
并且date命令是区域设置敏感的。在您的区域设置中,您有一个2小时的偏移量,因此它假设您的日期字符串有一个两小时的偏移。您可以通过使用-u标志来告诉它不要这样做,这意味着您承诺您的字符串使用UTC时间。
以下是一些示例,通过设置TZ环境变量,可以更改所提供字符串的明显时区(显示的TZ值适用于通用Unix时区文件,特定系统上可用的名称可能会有所不同)。
$ TZ="America/New_York" date -d "2012-01-30 21:15:19" +%s
1327976119
$ TZ="Europe/Paris" date -d "2012-01-30 21:15:19" +%s
1327954519
$ date -u -d "2012-01-30 21:15:19" +%s
1327958119
首先,正如@tialaramex所述,两个JavaScript代码片段都是正确的,因此您应该更喜欢短得多的一个。
问题出在Linux date
命令上。当你通过一个日期时,它会在你当前的时区而不是UTC中解释它!外观:
$ date -d "2012-01-30 21:15:19" +%s
1327954519
$ scala
scala> new java.util.Date(1327954519 * 1000L)
res0: java.util.Date = Mon Jan 30 21:15:19 CET 2012
我住在CET,注意date
的输出与你的不同。
更新:遵循下面评论中@derobert的伟大建议,您可以在调用date
:时显式指定时区
$ date -d "2012-01-30 21:15:19+0000" +%s
1327958119
$ scala
scala> new java.util.Date(1327958119 * 1000L)
res0: java.util.Date = Mon Jan 30 22:15:19 CET 2012
协调世界时21:15是欧洲中部时间22:15,一切正常。
- 将日期和时间转换为UTC格式的日期-Javascript
- javascript/jquery将utc转换为短格式的本地时间
- 将时间转换为UTC时出现故障
- 将日期和时间转换为UTC
- 如何在时间标签和相同的类中以UTC格式重新格式化ISO 8601时间戳,并通过JavaScript根据用户区域设置和时区
- 如何将 UTC 日期时间(字符串)转换为访问者时区
- 如何在javascript中获取正确的UTC时间
- 如何使用javascript在网络上仅将UTC时间戳转换为本地时间?从 http://openweathermap.or
- 时刻.js + 实时戳时间前基于 UTC 来自服务器的日期时间
- 如何转换SalesForce Api提供的UTC日期格式,并使用Google Apps脚本将其转换为本地日期和时间格式
- JavsScript:如何将UTC时间戳转换为人类可读时间
- 正在读取UTC时间字符串
- 在mirth connect中,将本地时间的hl7日期时间转换为UTC的iso日期
- javascript使jquery倒计时与UTC时间一起工作
- 将时区格式的日期显示为UTC时间
- Angularjs:带日期助手的格式化UTC时间的时间戳
- 用javascript将精度为17位的unix时间(UTC)转换为日期fromat
- 检查当前时间(UTC)是否在范围内
- 确定当天的开始和结束时间(UTC) (JAVASCRIPT)
- 从开始 - 结束日期和时间 (UTC) 计算出日期范围