Copyright © 2001-2005 CrystalClear Software, Inc
受 Boost Software License, Version 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++ 库设计技术应用于日期时间领域。实际上,是为了构建一个用于创建时间类型的框架。例如,通过提供迭代器和特征类来控制库的基本属性。据作者所知,该库是应用现代 C++ 于日期时间库的唯一实质性尝试。
日期时间领域术语和问题丰富。以下是对您将在库中找到的概念的简要介绍。
该库支持 3 种基本时间类型:
这些时间类型中的每一种都有一个由最小可表示时长定义的 分辨率。一个 时间系统 提供了所有这些类别的时态类型以及标记和计算时间点的规则。日历系统 仅仅是分辨率最大为一天的时态系统。格里高利 系统是当今使用最广泛的日历系统(ISO 系统基本上是它的派生)。然而,还有许多其他日历系统。UTC(协调世界时) 是一个广泛使用的民用时间系统。UTC 通过闰秒(这不可预测,只在需要时发生)进行调整以适应经度 0 处的地球自转。大多数 本地时间 系统都基于 UTC,但也根据地球自转进行调整,以便在各地白昼时间相似。此外,一些本地时间还包括 夏令时 (DST) 调整,以便在夏季移动白昼时间。
一个 时钟设备 是一个与某些硬件关联的软件组件,它提供相对于某个时间系统的当前日期或时间。时钟可以以已知分辨率测量当前时间,该分辨率可能高于或低于特定的时间表示。
该库支持日期和时间的计算。然而,时间计算与整数计算并不完全相同。如果您对时间计算的准确性非常重视,则需要阅读有关 稳定性、可预测性和近似值 的内容。
这个库起源很大程度上源于这样一个观察:很少有日期时间库的构建方式允许定制和扩展。一个典型的例子是,日历逻辑直接构建在日期类中。或者时钟检索函数直接构建在时间类中。这些设计决策通常使得扩展或更改库行为变得不可能。在更基础的层面上,通常存在关于时间表示分辨率或格里高利历的假设。
结果往往是,由于需要高分辨率的时间表示或其他与库实现不符的假设,一个项目必须接受一个不那么完整的库。这非常令人遗憾,因为开发此类库绝非易事。
虽然设计远非完美,但当前的设计比作者所知的任何日期时间库都要灵活得多。预计在未来的版本中将对各种可扩展性方面进行更好的文档记录。关于库的设计目标的 设计目标 在此处进行了总结。