R语言 在给定当前时区的情况下获取 UTC 的当前偏移量(包括夏令时)



我正在从一些传感器获取数据,这些数据记录了各自(本地)时区的值。时间戳不指示传感器所在的时区。我调用googleway::google_timezone()来使用谷歌时区 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 小时。我已经阅读了夏令时和时区最佳实践的答案,https://stackoverflow.com/tags/timezone/info 这些答案似乎表明此信息(夏令时)以某种方式包含在"时区"中。

还有其他方法可以做到这一点吗?

终于想通了 - 这只是 API 报告值的方式。我预计输出将报告四个小时的标准原始偏移,冬季(夏令时生效时)为一小时偏移,夏季为零小时偏移。Google API则以相反的方式做到这一点:

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

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"

这有点违反直觉和令人困惑,因为当夏令时无效时,夏令时偏移量具有非零值!!

无论如何,我希望这可以帮助其他人,并且有一天我们会摆脱夏令时的祸害。

相关内容

  • 没有找到相关文章

最新更新