2012-02-12 55 views
2

我正在对现有的多平台库进行更改。该库目前使用time_ttime(NULL)来存储重要事件的“时间戳”,但秒分辨率已不够。该库已经为不同的事情使用了Boost,所以我正在考虑将所有time_t时间戳转换为Boost.Date_Time对象之一。C++:我应该使用Boost.Date_Time Posix时间还是本地时间?

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

我是否认为我应该使用ptime来存储时间戳,并让客户/来电者自己决定是否要在需要时将其转换为local_date_time

回答

4

简短回答:

是的,boost ptime将与time_t最接近;两者都是自纪元/记录时间开始以来的秒数。并且在给定时区的情况下,Boost ptime可以自由转换为Boost local_date_time。

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

东海岸的服务器可能记录了一些事件,在当地时间2012-02-12 17:05 EST,这转换成自从Epoch以来的秒/ time_t内部表示形式为2012年2月13日00: 05 UTC并将其放入数据库。然后,巴黎客户端可以转换为local_date_time/struct tm 2012-02-13 01:05 CET和旧金山客户端2012-02-12 13:05 PST。

较长的答案:

但在某些场合(可能不是你的应用程序,它已经标准化了time_t的相关),你可能会存储在本地日期时间直接如果地理成分有一定的意义。你可以想象世界各地的许多事件源,并且知道这些事件是在本地的白天还是夜晚可能很有趣。你可能会恢复2种方式中的1种。既可以直接存储本地日期时间/结构tm,也可以存储保留起始时区和本地时间的其他日期时间偏移/时区类型,例如,太平洋时间14:00(白天)或03:05 CET(夜间)。

或者将事件与一些ref一起存储到始发源,以便可以恢复时区。但是考虑到可能会删除源代码的维护或者缺乏任何简单的加入,通常比尝试对可能保存回时区的任何地理信息进行反向工程更容易。

相关问题