Преобразование между boost::p osix_time::p time и mongo::D ate_t

Существует ли лаконичный способ или общепринятый способ преобразования из boost::p osix_time::p timeв mongo::D ate_tи обратно?

Mongo to Boost

Документация Boostкажется неполной или неправильной. Он документирует функцию date_from_tm, которая строит структуру даты из tm. Однако приведен следующий пример:

tm pt_tm;
/* snip */
ptime pt = ptime_from_tm(pt_tm);

Но документированной функции ptime_from_tmнет. Однако этот заголовочный файлвключаетэту функцию.

Итак, я могу, по крайней мере, перейти от mongo::D ate_tк boost::p osix_time::p time:

mongo::Date_t d = ...;
std::tm t;
d.toTm(&t);
boost::posix_time::ptime pt = ptime_from_tm(t);

Boost to Mongo

Я как бы застрял, когда дело доходит до движения в противоположном направлении. Документация MongoDBдовольно неполная, а связанный с ней заголовочный файл не имеет много полезных комментариев. По сути, структура Date_tпостроена из беззнакового длинногомиллисекундного отсчета. Я могу только предположитьиз эпохи 1970-1-1:00:00.00.

Таким образом, мое текущее решение перейти от boost::p osix_time::p timeк mongo::D ate_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);

Конечно, я, вероятно, могу свернуть это в одну строку, но кажется, что весь круговой путь от одного представления даты/времени к другому и обратно становится запутанным и беспорядочным.

Наконец

Есть ли лучший способ? Знает ли кто-нибудь, кто лучше знает обе библиотеки и хорошо разбирается в программировании даты и времени, краткий, простой способ достичь того, чего я пытаюсь достичь?

7
задан Anthony 11 June 2012 в 23:04
поделиться