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

标签 c++ boost-date-time

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

但是我对“Posix Time”和“Local Time”之间有点困惑。唯一的区别是本地时间还包括时区吗?似乎可以通过提供要使用的时区将 ptime 对象转换为 local_date_time 对象。

我是否正确地认为我应该使用ptime来存储时间戳,并让客户端/调用者自行决定是否要在需要时转换为local_date_time

最佳答案

简短回答:

是的,boost ptime 将最接近 time_t;两者都是自纪元/记录时间开始以来的秒数表示形式。并且 Boost ptime 可以在给定时区的情况下自由转换为 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 上标准化)

但在某些情况下,如果地理部分具有某种含义,您可能会直接存储本地日期时间。您可能会想象世界各地有许多事件源,并且了解这些事件是本地的白天还是夜间可能会很有趣。您可以通过两种方法之一恢复。直接存储本地日期时间/struct tm/或保留原始时区和本地时间的其他日期时间偏移/时区类型,例如14:00 PST(白天)或 03:05 CET(夜间)。

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

关于C++:我应该使用 Boost.Date_Time Posix 时间还是本地时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9252209/

相关文章:

c++ - 有没有办法以编程方式查找当前使用的 GPU(C、C++)?

c++ - 按位小于或等于

c++ - 在类中声明类型别名的替代方法

c++ - boost::date_time::days_until_weekday 的编译错误

c++ - 在 C++ 中创建队列 - 什么是 malloc 错误?

c++ - 如何获取两个 boost ptime 之间的每个单独日期

C++:你会选择 boost::date_time 还是 icu::date/time 库?

c++ - boost::local_time 未读取正确的 iso_extended_format

c++ - boost::posix_time::from_iso_string 允许错误输入

c++ - CreateProcess() 编译错误?