Существует ли лаконичный способ или общепринятый способ преобразования из boost::p osix_time::p time
в mongo::D ate_t
и обратно?
Документация 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);
Я как бы застрял, когда дело доходит до движения в противоположном направлении. Документация 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);
Конечно, я, вероятно, могу свернуть это в одну строку, но кажется, что весь круговой путь от одного представления даты/времени к другому и обратно становится запутанным и беспорядочным.
Есть ли лучший способ? Знает ли кто-нибудь, кто лучше знает обе библиотеки и хорошо разбирается в программировании даты и времени, краткий, простой способ достичь того, чего я пытаюсь достичь?