我有这段代码在法兰克福的一台机器上执行:
//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()也是有用的。
任何提示或想法? 谢谢!!
答案 0 :(得分:1)
有趣。如果不知道当前有效的语言环境和时区,我们就看不到任何东西。你的假设不会削减它。
走出困境,因为你实际显示你如何得到日志中显示的local_day
,我可以推测你不小心将这一天硬编码为格式化程序而不是使用惰性actor(所有boost格式化程序都是在日志消息格式化时调用的惰性actor)。
这意味着它永远不会进入第二天,除非您的格式重新初始化(例如,重新启动流程)。