【问题标题】:Why we substract the unix epoch from boost::posix_time::ptime to obtain time_t为什么我们从 boost::posix_time::ptime 中减去 unix epoch 得到 time_t
【发布时间】:2014-08-03 07:52:55
【问题描述】:

有人能解释一下为什么我们需要从 boost::posix_time::ptime 中减去 boost::gregorian::date(1970,1,1) 以获得 POSIX 时间表示法(即自 1970,1 以来的微秒, UTC 时区午夜 1 点)

例如此链接提供了明确的说明,但没有说明原因:

How do I convert boost::posix_time::ptime to time_t?

谢谢

【问题讨论】:

  • 该链接描述了如何将特定时间点转换为持续时间。你知道其中的区别吗?
  • 我认为有趣的是 ptime 类包含从 time_t 的转换,它明确记录了 UNIX 纪元的参与:ptime from_time_t(std::time_t) - “从 time_t 参数创建一个 ptime。秒将 time_t 中保存的时间点添加到 1970-Jan-01" 的时间点,但没有反函数。我想知道为什么?

标签: c++ boost unix-timestamp


【解决方案1】:

因为您要将 日期 转换为 时间

来自Boost documentation

Posix 时间

用纳秒/微秒定义非调整时间系统 分辨率和稳定的计算属性 [...] 此时间系统使用公历来实现时间表示的日期部分

所以boost::posix_time::p_time 不仅仅是纪元时间(例如由time() 返回),而是日期和时间,自公历。

因此,如果您想要一个 Posix Epoch 时间(从 1970 年 1 月 1 日午夜 UTC 时区开始),您将需要减去所有这些年份。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-26
    • 2010-11-13
    • 2011-08-02
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多