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

时间:2018-01-10 22:11:36

标签: r date datetime timezone timezone-offset

我从一些传感器获取数据,这些传感器记录各自(本地)时区的值。时间戳不指示传感器所在的时区。我正在呼叫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 practiceshttps://stackoverflow.com/tags/timezone/info的答案,这些答案似乎表明此信息(夏令时)以某种方式包含在"时区"中。

还有其他办法吗?

1 个答案:

答案 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"

这有点违反直觉和混乱,因为夏令时偏移在夏令时没有生效时具有非零值!!

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