代码之家  ›  专栏  ›  技术社区  ›  Gautam

根据当前时区,从UTC获取当前偏移量(包括夏令时)

  •  1
  • Gautam  · 技术社区  · 6 年前

    我从一些传感器获取数据,这些传感器记录各自(本地)时区的值。时间戳不指示传感器所在的时区。我在打电话 googleway::google_timezone() 使用Google时区API并获取与传感器地理位置相对应的时区。

    输出如下(示例):

    google_timezone(latlon, key = mykey)
    $dstOffset
    [1] 0
    
    $rawOffset
    [1] -18000
    
    $status
    [1] "OK"
    
    $timeZoneId
    [1] "America/Toronto"
    
    $timeZoneName
    [1] "Eastern Standard Time"
    

    这个 dstOffset 字段为0,这似乎不正确(位置位于加拿大东部的夏令时)。我需要在服务器上以UTC格式保存数据。使用 attr 将本地时区转换为UTC无法解决夏令时问题-无论一年中的什么时间,时差都保持不变。对于北美地区,由于夏令时的原因,一年中的时差应改变1小时。我已经阅读了 Daylight saving time and time zone best practices https://stackoverflow.com/tags/timezone/info 这似乎表明这些信息(夏令时)某种程度上包含在“时区”中。

    还有其他方法吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Gautam    6 年前

    终于找到了答案——这就是API报告值的方式。我希望输出报告四小时的标准原始偏移量,冬季为一小时偏移量(当夏令时生效),夏季为零小时偏移量。Google API的做法正好相反:

    以下是谷歌地图时区API的原始输出(绕过 googleway::google_timezone() )2018年1月11日(夏令时生效):

    dstOffset:  0
    rawOffset:  -18000
    status: "OK"
    timeZoneId: "America/Toronto"
    timeZoneName:   "Eastern Daylight Time"
    

    以下是2018年4月21日的产量(夏令时未生效):

    dstOffset:  3600
    rawOffset:  -18000
    status: "OK"
    timeZoneId: "America/Toronto"
    timeZoneName:   "Eastern Daylight Time"
    

    这有点违反直觉,令人困惑,因为当夏令时不生效时,夏令时偏移量的值不是零值!!

    无论如何,我希望这能帮助其他人,也希望有一天我们能摆脱夏令时的祸害。