23

在 C++11 中是否有一种简单的方法可以使用与正在使用的 ostream 关​​联的区域设置的适当格式规则来打印当前的挂钟时间?

我真正想做的是这样的:

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

并根据与 . 关联的任何语言环境打印日期和时间myStream。C++11 提供put_time,但它需要一个格式化字符串,我希望格式由与流关联的语言环境确定。还有time_puttime_put_byname,但根据 cppreference.com 上的示例,这些函数与 . 一起使用put_time

有没有简单的方法可以在不手动格式化的情况下打印时间点值?

4

1 回答 1

21

您可以使用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';
于 2013-07-23T17:30:08.407 回答