提升day_clock :: local_day()难题

时间:2016-05-06 20:42:39

标签: c++ boost

我有这段代码在法兰克福的一台机器上执行:

    //hardcoding for simplicity but these get passed
    int year = 2016;
    int month = 05;
    int day = 6;        

    boost::gregorian::date gdToday (boost::gregorian::day_clock::local_day());
    LOG(DEBUG, 0) << " today=" << gdToday;

    if (boost::gregorian::date(year, month, day) > gdToday)
    {
        // log
        return;
    }

在我的日志中,我看到了这个: 2016-05-06 02:40:40.479057 |调试| 今天= 2016年5月 - 5月

我知道日志时间戳是UTC。我假设day_clock :: local_day()给了我CEST时间。

所以2016-05-06 02:40 UTC将于2016-05-06 04:40。 但为什么gdToday仍然给我2016年5月 - 05年? 因此,if比较失败。

我试图阅读提升文档,但仍然没有太多线索。可能是boost :: gregorian :: date :: operator&lt;&lt;。我不认为使用day_clock :: universal_day()也是有用的。

任何提示或想法? 谢谢!!

1 个答案:

答案 0 :(得分:1)

有趣。如果不知道当前有效的语言环境和时区,我们就看不到任何东西。你的假设不会削减它。

走出困境,因为你实际显示你如何得到日志中显示的local_day,我可以推测你不小心将这一天硬编码为格式化程序而不是使用惰性actor(所有boost格式化程序都是在日志消息格式化时调用的惰性actor)。

这意味着它永远不会进入第二天,除非您的格式重新初始化(例如,重新启动流程)。