有没有一种简洁的方式,或者一种普遍接受的方式来从 a 转换boost::posix_time::ptime
为 amongo::Date_t
并再次转换回来?
Mongo 提升
Boost 文档似乎不完整或不正确。它记录了一个从 adate_from_tm
构造结构的函数。但是,给出了以下示例:date
tm
tm pt_tm;
/* snip */
ptime pt = ptime_from_tm(pt_tm);
但是没有记录功能ptime_from_tm
。但是,此头文件 确实包含该功能。
所以,我至少可以从mongo::Date_t
到boost::posix_time::ptime
:
mongo::Date_t d = ...;
std::tm t;
d.toTm(&t);
boost::posix_time::ptime pt = ptime_from_tm(t);
提升到 Mongo
当涉及到相反的方向时,我有点卡住了。MongoDB 文档相当不完整,相关的头文件也没有很多有用的注释。基本上,该Date_t
结构是从unsigned long long
毫秒计数构造的。我只能假设从 1970-1-1:00:00.00 时代开始。
所以我目前从 aboost::posix_time::ptime
到 a的解决方案mongo::Date_t
是:
boost::posix_time::ptime pt = ...;
std::tm pt_tm = boost::posix_time::to_tm(pt);
std::time_t t = mktime(pt_tm);
mongo::Date_t d(t);
当然,我可能可以将其折叠成一行,但似乎从一个日期/时间表示到另一个然后再返回的整个往返过程变得令人费解和混乱。
最后
有没有更好的办法?是否有人对这两个库有更好的了解并且对日期/时间编程有很好的理解,是否知道一种简洁、简单的方法来实现我想要实现的目标?