gpt4 book ai didi

c++ - 序列化日期时间

转载 作者:搜寻专家 更新时间:2023-10-31 00:42:22 26 4
gpt4 key购买 nike

执行日期/时间对的二进制序列化的最佳方法是什么?

到目前为止,我最好的猜测是存储自纪元以来的秒数,由 POSIX time() 和 mktime() 函数返回,然后在检索时使用 localtime() 将其转换回“人类可读”结构.

请注意,时间戳将由不同时区的计算机存储和检索。

最佳答案

这取决于您对哪些数据感兴趣:

  • 您需要亚秒级精度吗? POSIX time_t 通常不提供,显然,除非您使用某种浮点类型(这会引入其自身的问题)。其他语言和库的时间格式(例如 JavaScript 和 Java)使用自固定日期以来的毫秒数而不是固定纪元以来的秒数来解决此问题。
  • 如果要跨时区存储和检索时间戳,那么使用定义为相对于纪元的格式(如 POSIX time_tJavaScript Data )可能比存储本地时间更好 +一个时区。
  • 如果您需要知道原来的时区,那么您也需要存储它。
  • 因为 year 2038 problem ,如果您使用类似 POSIX time_t 的东西,您将希望将其存储为 64 位数字,而不是 32 位数字。 (即使您将其存储为 64 位数字,请记住您的 C 运行时的 mktimelocaltime 实现可能不支持 64 位 time_t 值。)

特别是关于 2038 年问题:我不知道有任何 POSIX API 可以保证处理它。如果您想要一个保证能够处理它的库,您最好使用类似 boost::date_time 的东西。 Project 2038 FAQ有关于测试 C 运行时以支持 2038 的信息。根据该页面,现代 64 位 Linux 系统应该不会受到影响。最新版本的 Visual C++ 也不受影响。 ( See here 。)即使您的库当前不支持 64 位 time_t 值,您也可以序列化 64 位 int 并将其转换为 32 位以进行处理;这样,您的磁盘数据结构至少会合规,并且您的库有望在 2038 年成为问题之前得到更新。

关于c++ - 序列化日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12096071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com