C++中是否有日期时间模块?

3

在C++中有日期时间模块吗?
我在谷歌上做了一些研究,发现了 <ctime>头文件,但是它让我很困惑。

还有其他什么可以完成我的工作吗?


顺便提一下,Boost.Date_Time库可能会有所帮助。 - KaiserKatze
@KaiserKatze:如果我没记错的话,Boost的DateTime库没有在15年内更新过。 - einpoklum
我投票关闭此问题,因为它不属于主题范围:寻求书籍、工具、软件库等方面的建议。 - Trenton McKinney
1个回答

7

C++标准中的:<chrono>

C++11

从C++11开始,标准库包含日期和时间工具,在<chrono>头文件中可用, 其中构造位于std::chrono命名空间内。

其中包括:

  • 时钟
  • 时间点
  • 持续时间
  • 一种灵活的机制,用于从字符串解析日期和时间值

该库是高度模板化的,因此您可以使用自己选择的类型作为原始表示(甚至是浮点类型),并设置自己的分辨率。

使用示例:如何在C++中获取当前时间和日期?

请注意,std::chrono 设施与旧的 <ctime> 标头类型有些兼容。例如,“系统时钟”类具有将时间表示形式time_t转换为<ctime>和从<ctime>转换的方法。如果您正在组合 C 和 C++ 代码或需要在某个地方公开 C 接口,则这对您很有用;否则,请尝试避免基于<ctime>的代码。 C++20 2020年批准的新标准版本增加了:
  • 时区
  • 日历
  • 更多的持续时间类型
  • 更多的时间点类型
  • 更多时钟

超越标准:Howard Hinnant 的日期库

正如评论者@AndyG和@doug所建议的那样,Howard Hinnant是C++日期和时间方面的专家,他的许多工作实际上已经融入了标准——但并非全部。

Howard维护自己的库/一组库,名为“Date”。

它基于C++11的<chrono>,但它的更改并不完全是C++20中新增加的;因此,如果您使用的是C++17或更早版本,它尤为有用。它增加了:

  • 时区
  • 日历,包括儒略和伊斯兰
  • 更多的Duration类型
  • 更多的时间点类型
  • 星期

我假设最终,所有这里的好东西都将被标准化,但这还没有发生。


@KaiserKatze:我认为GNU和LLVM已经实现了所有的C++20功能了吧?例如,根据这个页面,libstdc++从2019年7月开始就已经拥有这些功能了。 - einpoklum
请参阅 https://github.com/HowardHinnant/date/issues/565 以获取 Howard Hinnant 的日期库和 C++20 之间差异列表。 - Howard Hinnant
我很欣赏你为回答这个问题所付出的努力。然而,正是这种类型的回答,也是为什么“寻求书籍、工具、软件库等推荐”的问题是不符合主题的原因。 - Trenton McKinney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接