C 中是否有标准的日期/时间类?

新手上路,请多包涵

C++ stl 有标准的时间类吗?或者我是否必须在写入流之前转换为 c 字符串。例如,我想将当前日期/时间输出到字符串流:

time_t tm();
ostringstream 南;
sout << tm << 结束;

在这种情况下,我将当前日期/时间写成没有任何格式的数字。我可以使用c-运行时函数 strftime 首先格式化tm,但如果stl有一个可以从time_t值实例化的时间类,这似乎不是必需的

原文由 Farid Z 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 987
1 个回答

好吧,这个问题被问到已经有十几年了。现在(在 C++20 中)它终于有了更好的答案。

是的,C++20 中有几个标准的日期/时间类(不仅仅是一个)。在强类型系统中,每一个都有不同的用途。例如 std::chrono::zoned_time 表示 std::chrono::time_zonestd::chrono::time_point<system_clock, SomeDuration> 的配对,并表示某些地理区域的当地时间。以下是您可以如何创建和打印当前时区的本地时间,以达到操作系统允许的最佳亚秒精度。

 cout << zoned_time{current_zone(), system_clock::now()} << '\n';

如果您需要其他地方的当地时间,这很容易获得:

 cout << zoned_time{"Africa/Casablanca", system_clock::now()} << '\n';

与以前的 C++ 标准不同,基于 time_pointsystem_clock 现在 保证 代表 UTC,忽略闰秒(又名 Unix Time )。因此,要获得 UTC 中的当前时间,只需:

 cout << system_clock::now() << '\n';

虽然如果您真的想使用 zoned_time 代替(例如代码可能是通用的),这也可以:

 cout << zoned_time{"UTC", system_clock::now()} << '\n';

有关更多标准日期/时间类,请参阅 https://en.cppreference.com/w/cpp/chrono 。它们都是线程安全的。而且您不再局限于秒精度。

原文由 Howard Hinnant 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题