【问题标题】:Google Time Zone API incorrect number of hours?Google Time Zone API 小时数不正确?
【发布时间】:2019-10-02 05:17:46
【问题描述】:

我正在尝试比较网站访问者位置和设定位置之间的小时数,方法是获取他们的当前时间,然后将其插入到带有该位置的 Google Time Zone API 中。但是,无论我如何扭动它,似乎都是 1 小时或 2 小时不正确。

我读错了吗?

请求:

https://maps.googleapis.com/maps/api/timezone/json?location=40.7127753,-74.0059728&timestamp=1569956387&key=API_KEY

输出:

{
   "dstOffset" : 3600,
   "rawOffset" : -18000,
   "status" : "OK",
   "timeZoneId" : "America/New_York",
   "timeZoneName" : "Eastern Daylight Time"
}

请求的第一部分是纽约市的经度和纬度(从 Google Places API 检索),第二个值(时间戳)是自 1970 年 1 月 1 日以来的秒数。这是我使用以下 JavaScript 从访问者那里得到的:

+ new Date()
if (!Date.now) {
    Date.now = function() { return new Date().getTime(); }
}
Math.floor(Date.now() / 1000)

..这对我来说导致: 1569956387(秒)

Date.now() 返回自 1970 年 1 月 1 日以来的毫秒数,因此我需要通过除以 1000 转换为秒数,因为 Google 时区 API 使用自 1970 年 1 月 1 日以来的秒数。

根据 Google Time Zone API 文档:

rawOffset:给定位置与 UTC 的偏移量(以秒为单位)。这不会影响夏令时。

..rawOffset 是 JSON 输出

timestamp 将所需时间指定为自 UTC 1970 年 1 月 1 日午夜以来的秒数。 Time Zone API 使用时间戳来根据位置的时区确定是否应应用夏令时。请注意,API 不考虑历史时区。也就是说,如果您指定过去的时间戳,API 不会考虑该位置之前处于不同时区的可能性。

..timestamp 是请求链接中指定的自 1970 年 1 月 1 日以来的秒数

我的当地时间目前是晚上 9:59 (1569956387)。计算 (18000/60)/60 或 (21600/60)/60 告诉我纽约市应该分别有 5 或 6 个小时的路程,而事实是 7 个小时的路程。

【问题讨论】:

    标签: javascript api timezone


    【解决方案1】:

    一些事情:

    • 你不需要为Date.now 制作函数,除非你还必须支持 IE8,这在当今很少见。 IE9+ 和所有主流浏览器都内置了该功能。

    • Date.now()new Date().getTime() 返回基于 UTC 的时间戳,而不是您的本地时间。您从哪个时区运行它并不重要,重要的是您的计算机时钟是否同步。

    • Google 时区 API 还采用 UTC 形式的时间戳,因此您正在做正确的事情来传递它(将毫秒调整为秒)。

    • 对于给定的时间戳,Google 正确地告诉您:

      • 给定的纬度/经度坐标位于以America/New_York IANA 时区 ID 标识的时区中
      • 要显示的英文长格式名称是Eastern Daylight Time
      • rawOffset-18000 秒,或 UTC-5。此字段不包括 DST,因此如果 东部标准时间 有效(它不是给定的时间戳)将使用的偏移量
      • dstOffset 的作用是 3600 秒(或 1 小时),当添加到原始偏移量时会得到 (-18000 + 3600 == -14400) 或 UTC-4
    • Google 只告诉您与 UTC 的偏移量,而不是您当地时区的偏移量。如果您想包含它,您可以调用 new Date().getTimezoneOffset()(基于当前时间)并将其添加到结果中。

    【讨论】:

      猜你喜欢
      • 2013-04-12
      • 2018-10-20
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 2021-11-12
      • 2011-03-14
      相关资源
      最近更新 更多