版权所有 © 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)调整,以在夏季转移日照时间。
时钟设备是一个软件组件(与某些硬件相关联),它提供相对于时间系统的当前日期或时间。时钟可以以已知的分辨率测量当前时间,该分辨率可能高于或低于特定的时间表示。
该库提供对使用日期和时间进行计算的支持。但是,时间计算与使用整数进行计算并不完全相同。如果您对时间计算的准确性很认真,则需要阅读有关稳定性、可预测性和近似值的内容。
该库的大部分起源在于观察到很少有日期时间库以允许自定义和扩展的方式构建。一个典型的例子是,日历逻辑直接构建到日期类中。或者,时钟检索功能直接构建到时间类中。这些设计决策通常使得无法扩展或更改库的行为。在更基础的层面上,通常会对时间表示的分辨率或公历做出假设。
通常,结果是项目必须因为高分辨率时间表示的要求或与其他与库的实现不匹配的假设而选择不完整的库。这非常不幸,因为开发这种库绝非易事。
虽然设计远非完美,但当前的设计比作者所知的任何日期时间库都灵活得多。预计在未来版本中将更好地记录可扩展性的各个方面。有关库的设计目标的信息在此处总结。