簡潔な方法、またはaからaに変換し、また元に戻す一般的に受け入れられている方法はboost::posix_time::ptime
ありmongo::Date_t
ますか?
ブーストするMongo
Boostのドキュメントが不完全または正しくないようです。から構造体date_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エポックからしか推測できません。
したがって、aからaに移行するための現在の解決策boost::posix_time::ptime
は次の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);
もちろん、それを1行にまとめることはできますが、ある日付/時刻の表現から別の表現への往復全体が複雑で厄介になっているようです。
ついに
もっと良い方法はありますか?両方のライブラリについての知識があり、日付/時刻プログラミングについてよく理解している人は、私が達成しようとしていることを達成するための簡潔で簡単な方法を知っていますか?