在boost :: posix_time :: ptime和mongo :: Date_t之间转换

Ant*_*ony 7 c++ datetime boost mongodb

是否有一种简洁的方式,或者一种普遍接受的方式从a转换boost::posix_time::ptime为a mongo::Date_t再返回?

Mongo to Boost

Boost文档似乎不完整或不正确.它记录了date_from_tm一个date从a 构造结构的函数tm.但是,给出以下示例:

tm pt_tm;
/* snip */
ptime pt = ptime_from_tm(pt_tm);
Run Code Online (Sandbox Code Playgroud)

但是没有记录的功能ptime_from_tm.但是,此头文件 确实包含该函数.

所以,我至少可以去mongo::Date_tboost::posix_time::ptime:

mongo::Date_t d = ...;
std::tm t;
d.toTm(&t);
boost::posix_time::ptime pt = ptime_from_tm(t);
Run Code Online (Sandbox Code Playgroud)

提升到Mongo

当涉及到相反的方向时,我有点卡住了.在MongoDB的文档是相当不完整的,和相关的头文件并没有很多有益的意见.基本上,Date_t结构由unsigned long long毫秒计数构成.我只能假设从1970-1-1:00:00.00时代.

所以我目前从a boost::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);
Run Code Online (Sandbox Code Playgroud)

当然,我可能会将其折叠成一行,但似乎从一个日期/时间表示到另一个并且再次返回的整个往返变得令人费解和混乱.

最后

有没有更好的办法?有没有更好的图书馆知识和对日期/时间编程的理解的人知道一种简洁,简单的方法来实现我想要实现的目标吗?

kri*_*ina 2

基本上,Date_t 结构是根据 unsigned long long 毫秒计数构造的。我只能假设从 1970-1-1:00:00.00 纪元开始。

你是对的。

我认为您的代码与您将获得的一样好。你必须以某种方式得到一个 time_t 类似的秒数,因为 ptime 似乎有点复杂