C++:我应该使用Boost.Date_Time Posix时间还是本地时间



我正在对现有的多平台库进行更改。库当前使用time_ttime(NULL)来存储重要事件的"时间戳",但秒分辨率已不够。该库已经将Boost用于不同的事情,所以我正在考虑将所有time_t时间戳转换为其中一个Boost.Date_Time对象。

但我有点混淆了"Posix时间"one_answers"本地时间"。唯一的区别是本地时间也包括时区吗?似乎可以通过提供要使用的时区将ptime对象转换为local_date_time对象。

我认为应该使用ptime来存储时间戳,并让客户端/呼叫者自己决定是否要转换为local_date_time(如果需要),这是对的吗?

简短回答:

是的,boost ptime将最接近于time_t;两者都是自Epoch/记录时间开始以来的一秒钟的表示。在给定时区的情况下,Boost ptime可以自由转换为Boost local_date_time。

通常的用途是存储通用时间戳,并将其转换为本地有意义的时间,以便按需显示。所以,

东海岸服务器可能会在当地时间2012-02-12 17:05(美国东部时间)记录一些事件,将其转换为自2012-02-13 00:05 UTC大纪元以来的prime/time_t内部秒表示,并将其放入数据库。然后巴黎客户端可以转换为local_date_time/struct tm,时间为2012-02-13 01:05 CET,旧金山客户端转换为2012-02-12 13:05 PST。

更长的答案:(可能与您的应用程序无关,该应用程序已在time_t上标准化)

但在某些情况下,如果地理组件具有某种意义,则可以直接存储本地日期时间。你可以想象世界各地的许多事件来源,了解这些事件是当地的白天还是晚上可能会很有趣。你可以通过两种方式中的一种来恢复。直接存储本地日期时间/结构tm,或其他日期时间偏移量/时区类型,保留原始时区和本地时间,例如太平洋标准时间14:00(白天)或欧洲中部时间03:05(夜间)。

或者将事件存储为对原始源的某些引用,以便可以恢复时区。但是,考虑到可能会删除源的维护,或者缺乏任何直接的连接,这通常比试图对可能保存回时区的任何地理信息进行逆向工程更容易。

相关内容

  • 没有找到相关文章

最新更新