2013-07-23 39 views
17

在C++ 11中使用與正在使用的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是區域設置的標準日期和時間字符串的格式說明符。結果看起來像我的機器上的「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'; 
+9

我很驚訝沒有*現代*的方式來打印日期時間數據。我們必須使用舊式的C API。但是,'std :: chrono'在日期時間問題上是一個很大的進步。但沒有C++ 11的方式來打印時間? – Manu343726

+5

@ Manu343726 (http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html)沒有標準化(不確定是否由於時間壓力或其他原因)。 –

+0

@RMartinhoFernandes謝謝!我不知道。 – Manu343726