【发布时间】:2016-02-24 21:56:58
【问题描述】:
谷歌文档说:
给定位置的本地时间是时间戳参数与结果中的 dstOffset 和 rawOffset 字段的总和。
timestamp + dstOffset + rawOffset = UTC 的本地时间,以秒为单位
问题
我正在尝试获取正确时区的当地时间。 我认为 new Date(timestamp + dstOffset + rawOffset *1000) 会以UTC返回本地时间,但我发现实际数值确实是本地时间,在错误的时区(UTC)中。
示例:
时间戳: 1456349190
可读时间戳: new Date(1456349190*1000).toGMTString()(格林威治标准时间 2016 年 2 月 24 日星期三 21:26:30)
https://maps.googleapis.com/maps/api/timezone/json?location=39.2079206,-84.5274616&timestamp=1456349190&key=${googleApiKey}
返回:
- dstOffset:0
- rawOffset:-18000
- timeZoneId:美国/纽约
数据:
总和以秒为单位 = 1456349190 + 0 + (-18000) = 1456331190
总和以毫秒为单位 = 1456331190*1000 = 1456331190000
假定的本地日期 = new Date(1456331190000).toGMTString()(格林威治标准时间 2016 年 2 月 24 日星期三 16:26:30)
问题
可读时间戳和假定的本地日期不应该相同,因为两者都是 UTC 吗? Supposed Local Date 似乎真的应该是 Wed, 24 Feb 2016 16:26:30 EST
这对吗?
如果是这样,我似乎只需要从 Supposed Local Date 中提取我需要的值(本地时间)并应用从 google api timeZoneId 返回的正确时区(America/New_York) 因为 16:26:30 是我需要的正确当地时间。
实用提示
这些是帮助我更好地理解时间戳的一些准则:
【问题讨论】:
-
“UTC 本地时间”是荒谬的。时间要么是本地时间,要么是 UTC。不可能两者兼而有之。如果您住在像冰岛这样的地方,那么您的本地时间恰好与 UTC 全年对齐,但从概念上讲,这仍然是 本地 时间。如果您居住在英国,那么您的当地时间在冬季与 UTC 对齐,在夏季与 UTC 偏移一小时,这也是您的当地时间。 UTC 对地球上的每个人都有相同的价值。
标签: javascript google-maps date time timezone