
[code]

    std::chrono::steady_clock::time_point now = std::chrono::steady_clock::now();
    
[/code]

で表されるnowをミリセカンド単位で出力したいのですがどの様に記述すれば良いでしょうか。

[code]

    std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(now) << std::endl;
    
[/code]

ではエラーが出てしまい、出力できませんでした。


CC BY-SA 4.0
2022-12-16T02:27:07.700
92811
2022-12-16T03:55:02.197
55686
question
c++
std::chrono::steady_clock::time_point型をミリセカンドで表したい


C++コンパイラがC++20標準ライブラリに正しく対応していれば(※)、下記コードで期待通りの出力が得られます。  
※: 2022年12月現在は、最新のMicosoft Visual C++でしか動作しません。

[code]

    #include <iostream>
    #include <chrono>
    
    int main()
    {
      auto now = std::chrono::system_clock::now();
      auto now_ms = std::chrono::time_point_cast<std::chrono::milliseconds>(now);
      std::cout << now_ms << std::endl;
    }
    
[/code]

Demo: <https://godbolt.org/z/oWdY5eK59>

* * *

質問文中では[`std::chrono::steady_clock`](https://cpprefjp.github.io/reference/chrono/steady_clock.html)を利用されていますが、このClockは「絶対に逆行しない時計」保証を与える代償として、実世界における時計と直接リンクしていません。2点間の経過時間(`duration`)を計算するための道具と考えた方がよいです。

通常の意味で「現在時刻」が必要であれば[`std::chrono::system_clock`](https://cpprefjp.github.io/reference/chrono/system_clock.html)を用いて、動作環境のシステム時刻における現在時刻を取得します。


CC BY-SA 4.0
2022-12-16T02:56:42.667
92812
2022-12-16T02:56:42.667
49
92811
answer


[この質問](https://ja.stackoverflow.com/questions/91865/backlog%e3%82%92%e8%b6%85%e3%81%88%e3%82%8b%e3%83%aa%e3%82%af%e3%82%a8%e3%82%b9%e3%83%88%e3%81%a7%e8%ac%8e%e3%81%ae1%e7%a7%92%e5%be%85%e3%81%a1)で使った
**非推奨** の泥臭いコードも置いておきます。

[code]

    #include <iostream>
    #include <sstream>
    #include <iomanip>
    #include <chrono>
    #include <ctime>
    
    using namespace std;
    using namespace std::chrono;
    
    string timestr() {
        system_clock::time_point scp = system_clock::now();
        time_t t = system_clock::to_time_t(scp);
        tm lt;
        stringstream ss;
    #ifdef _WIN32
        localtime_s(&lt, &t);
    #else
        localtime_r(&t, &lt);
    #endif
        ss << put_time(&lt, "%Y-%m-%e %H:%M:%S") << "." << setw(3) << setfill('0') << duration_cast<milliseconds>(scp - system_clock::from_time_t(t)).count();
        return ss.str();
    }
    
    int main() {
        cout << timestr() << endl;
        return 0;
    }
    
[/code]

<https://godbolt.org/z/Y7c7f9z3f>


CC BY-SA 4.0
2022-12-16T03:40:22.850
92813
2022-12-16T03:55:02.197
2022-12-16T03:55:02.197
54957
54957
92811
answer