2013-07-23 19 views
17

Gibt es in C++ 11 einen einfachen Weg, um die aktuelle Wandzeit mit den entsprechenden Formatierungsregeln des mit dem verwendeten Ostream verbundenen Gebiets zu drucken?Wie aktuelle Uhrzeit in C++ 11 drucken?

Was will ich wirklich etwas zu tun, wie folgt aus:

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

und haben das Datum und die Uhrzeit in Übereinstimmung gedruckt mit locale, was auch immer mit myStream verbunden ist. C++ 11 bietet put_time, aber es dauert eine Formatierungszeichenfolge, und ich möchte, dass das Format von der mit dem Stream verknüpften Ländereinstellung bestimmt wird. Es gibt auch time_put und time_put_byname, aber basierend auf den Beispielen auf cppreference.com werden diese Funktionen in Verbindung mit put_time verwendet.

Gibt es keine einfache Möglichkeit, einen Zeitpunktwert ohne manuelle Formatierung zu drucken?

Antwort

16

Sie können put_time mit einer Formatzeichenfolge wie "%c" verwenden. %c ist der Formatbezeichner für die standardmäßige Datums- und Uhrzeitzeichenfolge für das Gebietsschema. Das Ergebnis sieht wie "Tue Jul 23 19:32:18 CEST 2013" auf meinem Rechner aus (POSIX en_US locale, in einer deutschen Zeitzone).

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

Ich bin überrascht, dass es keine * moderne * Möglichkeit gibt, Datetime-Daten zu drucken. Wir müssen die alten C-APIs verwenden. Aber, 'std :: chrono' ist ein großer Fortschritt in Sachen Datetime. Aber keine C++ 11 Möglichkeit, Zeit zu drucken? – Manu343726

+5

@ Manu343726 (http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html) war nicht standardisiert (nicht sicher, ob es wegen Zeitdruck oder aus anderen Gründen war). –

+0

@RMartinhoFernandes Danke! Das wusste ich nicht. – Manu343726

Verwandte Themen