2013-07-23 16 views
17

Czy istnieje prosty sposób w C++ 11 do drukowania aktualnego czasu ściany przy użyciu odpowiednich reguł formatowania ustawień narodowych związanych z ostream?Jak wydrukować bieżący czas w C++ 11?

Co naprawdę chcę zrobić coś takiego:

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

i mają datę i czas drukowane w zgodzie z tym, co jest związane z locale myStream. C++ 11 oferuje put_time, ale zajmuje ciąg formatowania i chcę, aby format był określany przez locale powiązane ze strumieniem. Istnieje również time_put i time_put_byname, ale na podstawie przykładów pod adresem cppreference.com funkcje te są używane w połączeniu z put_time.

Czy nie ma prostego sposobu na wydrukowanie wartości punktualnej bez ręcznego jej formatowania?

Odpowiedz

16

Można użyć put_time z ciągiem formatującym, takim jak "%c". %c to specyfikator formatu dla standardowego ciągu daty i czasu dla ustawień narodowych. Wynik wygląda jak "Tue Jul 23 19:32:18 CEST 2013" na moim komputerze (POSIX en_US locale, w niemieckiej strefie czasowej).

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

Jestem zaskoczony, że nie ma * nowoczesnego * sposobu drukowania datetime danych. Musimy korzystać ze starego C API. Ale, cóż, 'std :: chrono' to wielki postęp w kwestiach datetime. Ale nie ma sposobu na wydrukowanie czasu w C++ 11? – Manu343726

+5

@ Manu343726 (http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html) nie był ustandaryzowany (nie jestem pewien, czy było to spowodowane presją czasu, czy z innych powodów). –

+0

@RMartinhoFernandes Dzięki! Nie wiedziałem o tym. – Manu343726