我从一些传感器获取数据,这些传感器记录各自(本地)时区的值。时间戳不指示传感器所在的时区。我正在呼叫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的答案,这些答案似乎表明此信息(夏令时)以某种方式包含在"时区"中。
还有其他办法吗?
答案 0 :(得分:1)
最终弄清楚了 - 它只是API报告价值的方式。我预计输出报告的标准原始偏移量为4小时,冬季(夏令时有效)和夏季零小时偏移量相差一小时。 Google API反过来说:
以下是2018年1月11日Google地图时区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"
这有点违反直觉和混乱,因为夏令时偏移在夏令时没有生效时具有非零值!!
无论如何,我希望这可以帮助别人,并且有一天我们将摆脱夏令时的祸害。