2013-07-23 24 views
17

使用されているostreamに関連付けられているロケールの適切な書式設定規則を使用して現在の壁の時刻を出力する簡単な方法はありますか?私は本当に何をしたいのかC++ 11で現在の時刻を印刷する方法は?

は次のようなものです:

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

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

手動で書式を設定せずにタイムポイント値を印刷する簡単な方法はありませんか?

答えて

16

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

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'; 
+9

驚くべきことに、日時データを印刷する現代的な方法はありません。古いスタイルのC APIを使用する必要があります。しかし、まあ、 'std :: chrono'は日時計の重要な進歩です。しかし、C++ 11の方法で時間を印刷することはできませんか? – Manu343726

+5

@ Manu343726 (http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html)は標準化されていません(時間的な圧力やその他の理由によるものかどうかは不明です)。 –

+0

@RMartinhoFernandesありがとう!私はそれを知らなかった。 – Manu343726

関連する問題