2013-07-23 90 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