如何在C++ 11中打印当前时间?

Kno*_*abe 23 c++ locale c++11 c++-chrono

在C++ 11中是否有一种简单的方法可以使用与正在使用的ostream相关联的语言环境的相应格式规则来打印当前的挂起时间?

我真正想做的是这样的事情:

myStream << std::chrono::system_clock::now();
Run Code Online (Sandbox Code Playgroud)

并根据与之相关的任何区域设置打印日期和时间myStream.C++ 11提供put_time,但它需要格式化字符串,我希望格式由与流关联的语言环境确定.还有time_puttime_put_byname,但基于在cppreference.com的例子中,这些功能配合使用put_time.

有没有简单的方法来打印时间点值而不手动格式化它?

R. *_*des 21

您可以使用put_time格式字符串"%c".%c是区域设置的标准日期和时间字符串的格式说明符.结果看起来像我的机器上的"Tue Jul 23 19:32:18 CEST 2013"​​(POSIX en_US locale,在德国时区).

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';
Run Code Online (Sandbox Code Playgroud)

  • 我很惊讶,没有*现代*的方式来打印日期时间数据.我们必须使用旧式C API.但是,好吧,`std :: chrono`是日期时间的重大进步.但没有C++ 11方式打印时间? (11认同)
  • @ Manu343726 <chrono_io>(http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html)未标准化(不确定是由于时间压力还是其他原因). (5认同)
  • 注意:gcc <5.0不支持`std :: put_time`,请参阅http://stackoverflow.com/a/14137287/209882 (3认同)
  • 不是这个问题的答案,但以下是我相信与此问题相关的更多信息:http://home.roadrunner.com/~hinnant/date_algorithms.html.此链接开发的算法可以转换为年/月/日三元组以及`system_clock :: time_point`的所有实现.这些算法可以帮助开发OP所需的I/O. (2认同)