我正在对现有的多平台库进行更改。该库目前使用time_t
和time(NULL)
来存储重要事件的“时间戳”,但秒分辨率已经不够了。该库已经将Boost用于不同的事情,所以我正在考虑将所有time_t
时间戳转换为Boost.Date_Time对象之一。
但我在“Posix Time”和“Local Time”之间有点困惑。 Local Time还包括时区的唯一区别是什么?似乎可以通过提供要使用的时区将ptime
对象转换为local_date_time
对象。
我是否正确地认为我应该使用ptime
来存储时间戳,并让客户/来电者自己决定是否要在需要时转换为local_date_time
?
答案 0 :(得分:4)
简短回答:
是的,提升ptime将是与time_t最接近的等价物;从纪元/开始记录时间开始表示两者都是秒。并且在给定时区的情况下,Boost可以自由地转换为Boost local_date_time。
正常使用将存储通用时间戳并将其转换为本地有意义的时间以便按需显示。所以,
东海岸服务器可能会记录一些事件,在当地时间2012-02-12 17:05 EST,这转换为自纪元以来的秒数的prime / time_t内部表示为2012-02-13 00:05 UTC和把它放到数据库中。然后巴黎客户可以转换为local_date_time / struct tm作为2012-02-13 01:05 CET和旧金山客户转换为2012-02-12 13:05 PST。
更长的答案:(可能与您的应用程序无关,该应用程序已在time_t上标准化)
但在某些情况下,您可以直接存储本地日期时间如果地理组件具有某种含义。您可以想象世界各地的许多事件来源,了解这些事件是白天还是夜晚本地可能会很有趣。你可以恢复2种方法之一。或者直接存储本地日期时间/结构tm,或者保留原始时区和本地时间的其他日期时间偏移/时区类型,例如,太平洋标准时间14:00(白天)或中欧时间03:05(夜间)。
或者使用一些引用将事件存储到原始源,以便可以恢复时区。但是,如果维护可能会删除源,或者缺少任何简单的连接,那么通常比尝试对任何可能保存回时区的地理信息进行逆向工程更容易。