23

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

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

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

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

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

4

1 に答える 1

21

put_timeのようなフォーマット文字列で使用できます"%c"%cロケールの標準の日付と時刻の文字列の書式指定子です。結果は、私のマシンでは "Tue Jul 23 19:32:18 CEST 2013" のようになります (POSIX en_US ロケール、ドイツのタイムゾーン)。

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';
于 2013-07-23T17:30:08.407 に答える