【发布时间】:2017-02-19 04:43:36
【问题描述】:
我正在从事一个机器人项目,该项目具有来自不同位置的传感器数据,精度为毫秒(gps 将 ntp 同步到 1 毫秒内)。
如何将历史日期、时间和 UTC 偏移分量转换为自 unix 纪元以来的毫秒数?也就是说,所有YYYY-mm-dd HH:MM:SS.mS +/-UTC offset 都可以作为单独的整数使用,而不是字符串。
偏移量考虑了夏令时,例如,UTC +1 的时区在夏令时期间的 UTC 偏移量将是 +2。
有一个similar post,但它处理的是字符串格式的日期时间,没有 UTC 偏移信息。
该帖子接受的答案是使用mktime,但在this post 中,一位超过60K 的代表用户评论说:
mktime 将使用您计算机的区域设置将该日期/时间转换为 GMT。如果您不想减去本地时区,请使用 mkgmtime。
我已经确认mktime 确实执行了依赖于夏令时标志tm_isdst 的时区转换。我没有信息是否在夏令时期间进行了观察,只有它们与 UTC 的偏移量。
自 unix 纪元以来,将具有 UTC 偏移量的历史日期时间转换为毫秒的稳健方法是什么?
【问题讨论】:
-
如果您查看您提到的问题的公认答案,它会处理单个整数。它将字符串拆分为部分,将它们转换为整数,然后使用它们。只需删除转换部分。
-
是的。请记住,有半小时的时区。所以 timeZone 不应该以小时为单位。
-
还有刻钟时区。
-
使用库。提升 Date_time 是一种选择。
-
@DirkEddelbuettel 感谢您对 Boost.Date_Time 的建议,我看了看,找不到使用 UTC 偏移量获取 unix 纪元的方法。您是否建议手动从
local_date_time中减去 UTC 偏移量,其中local_date_time是使用未调整的日期时间值设置的?
标签: c++ c linux datetime epoch