Boost date_time 库处理日期和时间
在游戏服务器端的开发工作中,很多时候我们不得不面对繁琐的日期和日期处理。比如说一个运营活动的开始和结束时间处理,还有一个限时道具的到期时间处理等等。如果恰好程序的开发语言是 C++,并且框架并没有对时间处理进行过合理的封装,那么这项工作看起来就不是那么轻松愉快了。这个时候使用 time_t 类型和 tm 结构体,进行原始的时间和日期的比较和计算,就俨然成了程序员的梦魇。不过好在写 Boost 的前辈们已经帮我们做了复杂的工作,然后封装成了这个date_time 库。用来真是爽歪歪啊~ date_time 概述 在使用 date_time 库之间,我们首先要明确三个基本概念:时间点(Time Point)、时长(Time Duration)、时段(Time Interval)。所谓时间点就是时间轴上的一个特定的点;时长就是两个时间点的差值,不属于时间轴;时段是两个特定时间点之间确定的区间。基本上所有的时间处理都是围绕的这三个概念进行的。这三者可以进行相互运算,例如时间点+时长=时间点,时长+时长=时长等。 处理日期 date_time 库的日期处理基于格里高利历, 支持从 1400-01-01 到 9999-12-31 之间的日期计算。为了使用 date_time 库的日期功能需要包含头文件 <boost/date_time/gregorian/gregorian.hpp>,即: #include <boost/date_time/gregorian/gregorian.hpp>using namespace boost::gregorian; date date 是 date_time 库处理日期的核心类,以天为单位表示时间点概念。 date d1(2001, 1, 1); //使用数字构造日期 date d2(2000, Jan, 1); //使用英文指定月份 date d3(d1); //date 支持拷贝构造 assert(d1 == d3); //date 支持比较操作 assert(d2 < d1); date 也可以从一个字符串产生: date d1 = from_string("1999-12-31"); date d2 = from_string("1999/12/31"); date d3 = from_undelimited_string("19991231"); day_clock day_clock 是一个天级别的时钟,它也是一个工厂类,调用它的静态成员函数 local_day() 或 universal_day() 会返回一个当天的时间对象,分别是本地日期和 UTC 日期。...