web-dev-qa-db-ja.com

C ++ 11で現在の時刻を出力するにはどうすればよいですか?

C++ 11で、使用されているostreamに関連付けられているロケールの適切なフォーマット規則を使用して、現在の実時間を印刷する簡単な方法はありますか?

私が本当にやりたいのは次のようなものです。

myStream << std::chrono::system_clock::now();

また、日付と時刻は、myStreamに関連付けられているロケールに応じて出力されます。 C++ 11はput_timeを提供しますが、フォーマット文字列が必要であり、ストリームに関連付けられたロケールによってフォーマットを決定する必要があります。 time_puttime_put_bynameもありますが、cppreference.comの例に基づいて、これらの関数はput_timeと組み合わせて使用​​されます。

手動でフォーマットせずにタイムポイント値を印刷する簡単な方法はありませんか?

23

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';
21