ホーム>source

与えられた日付時刻形式の文字列をエポックからミリ秒に変換する必要があるという要件があります。 Javascriptには日付から時間への変換APIがありますが、C ++ではそのようなものを見つけることができませんでした。

入力は「2016-Mar-15 09:23:58.665068」のようになります。

出力はミリ秒単位で14520000785と表示されます。

ブーストを調べてみましたが、それでも方法を見つける(または理解する)ことができませんでしたか? また、グーグルを通過すると、私は逆の方法、つまりミリ秒を日付形式に変換しますが、私が必要とするものも、同じための役立つ投稿も見つかりません。

どんな助けでも大歓迎です。

あなたの答え
  • 解決した方法 # 1

    最も簡単なのは、単にそれを綴るだけです:

    <前>ウィズウィズ

    ライブオンコリル

    <前>ウィズウィズ

    プリント

    <前>ウィズウィズ

    もちろん、解析をヘルパー関数で抽出します。再利用などのためにロケールを保持します。

  • 解決した方法 # 2

    標準ライブラリ機能のみを使用:

    <前>ウィズウィズ

    プリント: auto pt = boost::lexical_cast<ptime>("2016-Mar-15 09:23:58.665068"); std::cout << (pt - ptime { {1970,0,0}, {} }).total_milliseconds();

    #include <boost/date_time/posix_time/posix_time.hpp> #include <boost/date_time/posix_time/posix_time_io.hpp> #include <boost/date_time.hpp> #include <sstream> int main() { using boost::posix_time::ptime; ptime pt; { std::istringstream iss("2016-Mar-15 09:23:58.665068"); auto* f = new boost::posix_time::time_input_facet("%Y-%b-%d %H:%M:%S%f"); std::locale loc(std::locale(""), f); iss.imbue(loc); iss >> pt; } std::cout << pt << " " << (pt - ptime{{1970,1,1},{}}).total_milliseconds(); } を参照  そして 2016-Mar-15 09:23:58.665068 1458033838665

    #include <ctime> #include <chrono> #include <iostream> int main() { std::tm tm = {}; const char* snext = ::strptime("2016-Mar-15 09:23:58.665068", "%Y-%b-%d %H:%M:%S", &tm); auto time_point = std::chrono::system_clock::from_time_t(std::mktime(&tm)); long long duration_ms = time_point.time_since_epoch() / std::chrono::milliseconds(1) + std::atof(snext) * 1000.0f; std::cout << duration_ms << std::endl; }

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ javascript - 個人用jqueryフロントエンドマイクロフレームワークを縮小する方法