Boost C++ 库

...世界上最受推崇和设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

PrevUpHomeNext

第 11 章。Boost.Date_Time

Jeff Garland

受 Boost 软件许可,版本 1.0 约束。(请参阅随附文件 LICENSE_1_0.txt 或复制于 https://boost.ac.cn/LICENSE_1_0.txt)

目录

概念
动机
领域概念
设计概念
通用用法示例
公历
日期
日期持续时间(又名天数)
日期期间
日期迭代器
日期生成器/算法
公历
Posix 时间
Ptime
时间持续时间
时间期间
时间迭代器
本地时间
时区(抽象)
Posix 时区
时区数据库
自定义时区
本地日期时间
本地时间期间
日期时间输入/输出
格式标志
日期 Facet
日期输入 Facet
时间 Facet
时间输入 Facet
日期时间格式化器/解析器对象
日期时间 IO 教程
序列化
详细信息
计算
设计目标
权衡:稳定性、可预测性和近似值
术语
参考文献
构建-编译器信息
测试
更改历史
致谢
示例
作为字符串的日期
生存天数
新年之间的天数
每个月的最后一天
本地化演示
日期期间计算
打印假期
打印月份
月份添加
时间数学
打印小时
本地时间到 UTC 转换
时间期间
简单时区
夏令时计算规则
飞行时间示例
自纪元以来的秒数
库参考
日期时间参考
公历参考
Posix 时间参考
本地时间参考

简介

一组基于泛型编程概念的日期时间库。

本文档也有 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)调整,以在夏季转移日照时间。

时钟设备是一个软件组件(与某些硬件相关联),它提供相对于时间系统的当前日期或时间。时钟可以以已知的分辨率测量当前时间,该分辨率可能高于或低于特定的时间表示。

该库提供对使用日期和时间进行计算的支持。但是,时间计算与使用整数进行计算并不完全相同。如果您对时间计算的准确性很认真,则需要阅读有关稳定性、可预测性和近似值的内容。

设计概念

该库的大部分起源在于观察到很少有日期时间库以允许自定义和扩展的方式构建。一个典型的例子是,日历逻辑直接构建到日期类中。或者,时钟检索功能直接构建到时间类中。这些设计决策通常使得无法扩展或更改库的行为。在更基础的层面上,通常会对时间表示的分辨率或公历做出假设。

通常,结果是项目必须因为高分辨率时间表示的要求或与其他与库的实现不匹配的假设而选择不完整的库。这非常不幸,因为开发这种库绝非易事。

虽然设计远非完美,但当前的设计比作者所知的任何日期时间库都灵活得多。预计在未来版本中将更好地记录可扩展性的各个方面。有关库的设计目标的信息在此处总结


PrevUpHomeNext