版权所有 © 2001-2005 CrystalClear Software, Inc
遵循 Boost 软件许可协议 1.0 版。(请参阅随附文件 LICENSE_1_0.txt
或访问 https://boost.ac.cn/LICENSE_1_0.txt 获取副本)
一组基于泛型编程概念的日期时间库。
此文档也提供 PDF 格式。可以在以下位置找到:
http://www.crystalclearsoftware.com/libraries/date_time/date_time.pdf |
此外,完整的 doxygen 参考文档可以在以下位置找到:
http://www.crystalclearsoftware.com/libraries/date_time/ref_guide/index.html |
最新版本的文档可以在以下位置找到:
http://www.crystalclearsoftware.com/libraries/date_time/index.html |
此库的动机来自于在多个项目中工作和帮助构建多个日期时间库的经验。日期时间库为大多数开发项目提供了基础架构。但是,它们中的大多数在计算、格式化、转换或执行某些其他功能方面存在局限性。例如,大多数库无法正确处理闰秒,不提供诸如无限之类的概念,或者不提供使用高分辨率或网络时间源的能力。这些库在日期和时间的表示方面也往往很僵化。因此,不可能为项目或子项目制定自定义策略。
使用日期和时间进行编程应该几乎像使用字符串和整数进行编程一样简单自然。具有大量时间逻辑的应用程序可以通过拥有一组强大的运算符和计算功能而得到 радикально 简化。类应提供比较日期和时间、添加长度或时间持续时间、从时钟检索日期和时间以及自然地处理日期和时间间隔的能力。
开发该库的另一个动机是将现代 C++ 库设计技术应用于日期时间领域。真正构建一个用于构建时间类型的框架。例如,通过提供迭代器和 traits 类来控制库的基本属性。据作者所知,这个库是唯一一个将现代 C++ 应用于日期时间库的实质性尝试。
日期时间域在术语和问题方面都很丰富。以下是对您将在库中反映的概念的简要介绍。
该库支持 3 种基本的时间类型
这些时间类型中的每一种都具有 分辨率,分辨率由最小可表示的持续时间定义。时间系统 提供所有这些时间类型类别,以及使用时间点进行标记和计算的规则。日历系统 只是最大分辨率为一天的时间系统。格里高利 系统是当今使用最广泛的日历系统(ISO 系统基本上是它的衍生系统)。但是,还有许多其他日历系统。UTC(协调世界时) 是一种广泛使用的民用时间系统。UTC 通过使用闰秒(这是不可预测的,仅在必要时)在经度 0 处针对地球自转进行调整。大多数 本地时间 系统都基于 UTC,但也针对地球自转进行了调整,以便白天时间在各地相似。此外,一些本地时间包括 夏令时 (DST) 调整,以在夏季移动白天时间。
时钟设备 是一种软件组件(与某些硬件相关联),它提供相对于时间系统的当前日期或时间。时钟可以测量当前时间到已知的分辨率,该分辨率可能高于或低于特定的时间表示。
该库提供对日期和时间进行计算的支持。但是,时间计算与整数计算不太相同。如果您认真对待时间计算的准确性,则需要阅读有关 稳定性、可预测性和近似值 的内容。
这个库的很大一部分起源于观察到,很少有日期时间库以允许自定义和扩展的方式构建。一个典型的例子是,日历逻辑直接构建到日期类中。或者,时钟检索函数直接构建到时间类中。这些设计决策通常使得扩展或更改库行为变得不可能。在更基本的层面上,通常对时间表示的分辨率或格里高利历存在假设。
通常,结果是项目必须接受一个不太完整的库,因为需要高分辨率时间表示或其他与库的实现不匹配的假设。这是非常不幸的,因为开发这种库绝非易事。
虽然设计远非完美,但当前的设计比作者所知的任何日期时间库都要灵活得多。预计在未来的版本中,可扩展性的各个方面将得到更好的文档化。有关库的设计目标的信息 在此处进行了总结。