C++ 11で、使用されているostreamに関連付けられているロケールの適切なフォーマット規則を使用して、現在の実時間を印刷する簡単な方法はありますか?
私が本当にやりたいのは次のようなものです。
myStream << std::chrono::system_clock::now();
また、日付と時刻は、myStream
に関連付けられているロケールに応じて出力されます。 C++ 11はput_time
を提供しますが、フォーマット文字列が必要であり、ストリームに関連付けられたロケールによってフォーマットを決定する必要があります。 time_put
とtime_put_byname
もありますが、cppreference.comの例に基づいて、これらの関数はput_time
と組み合わせて使用されます。
手動でフォーマットせずにタイムポイント値を印刷する簡単な方法はありませんか?
put_time
は"%c"
のようなフォーマット文字列で使用できます。 %c
は、ロケールの標準の日付と時刻の文字列の形式指定子です。結果は、私のマシン(POSIX en_USロケール、ドイツのタイムゾーン)では「TueJul 23 19:32:18CEST2013」のようになります。
auto now = std::chrono::system_clock::now();
auto now_c = std::chrono::system_clock::to_time_t(now);
std::cout << std::put_time(std::localtime(&now_c), "%c") << '\n';