由于在处理游戏服务端时,必须考虑到使用的处理。在此,使用了boost中的时间相关的内容。
用boost的好处很多,下面是项目中对此的一点应用小结:
1) 支持跨平台。
2) 时间的精确度极高。取得毫秒级的绝对没问题。(似乎微秒级的也可以)
3) 用法方便。
using namespace boost::posix_time;
using namespace boost::gregorian;
//using boost::gregorian::date;
#include <boost/date_time/posix_time/posix_time.hpp>
#define BOOST_DATE_TIME_SOURCE
static ptime const epoch(date(1970, 1, 1));//一个基准点。
std::string currtimestamp = CommonHelper::format("%I64u", (WE::uint64)((microsec_clock::universal_time() - epoch).total_milliseconds()));
//提示:
1) microsec_clock::universal_time()是取得格林威治时间。
2) 如果是:microsec_clock::local_time()则取得的是本地时间。
3) 如果想取得北京时间,则只需要加上8小时即可。microsec_clock::universal_time() + hours(8);
4) 上面的语句是计算当前格林威治时间的时间戳。
4) boost::posix_time::ptime 因重载了许多操作符运算。因此,对它的使用就如同基本类型一样。如:可以很方便计算两点时间点的差距。
boost::posix_time::ptime pt1(date(xxxx, x, x), time_duration(10, 1, 23));
//上面也可以这样写:boost::posix_time::ptime pt1(date(xxxx, x, x), time_duration(hours(10), minutes(1), seconds(23)));
//再比如:boost::posix_time::ptime pt1(date(xxxx, x, x), hours(10));如果想要详细了解,请自行研究boost源码。
boost::posix_time::ptime pt2(.....);//这边的构造函数参数就不写了。请自行参考上面的语句。
time_duration td = pt1 - pt2;//注意:ptime是不支持 + 的。因为它没有重载该操作。计算它们的加,是没有意义的。而 - 有意义。所以可如此操作。
5) 取得日期,取得时间都很方便。
此次,就暂时就写这么多吧。