Boost.DateTime库提供了时间日期相关的计算、格式化、转换、输入输出等等功能,为C++的编程提供了便利。不过它有如下特点:
1. Boost.DateTime 只支持1400年以后的任何Gregorian日历日期。如果你需要计算再早的日期,则需要寻求其他库来支持。
日期和时间是编程过程中常用的操作。在C标准库中,<time.h>提供了time_t类型、和tm结构类型的时间日期相关函数。Windows API也提供了FILETIME类型的相关函数。由于这里是介绍boost,就不比较这几种之间的优劣了,感兴趣的朋友可以深究一下,相信你会根据自己的需要进行选择。那么,下面我将根据不同情形大概介绍一下Boost.DateTime中的主要功能。如果你需要严格的时间精度计算,请参看Boost.DateTime稳定度和精度的讨论。
*基本概念:
时间点(Time Point)- 某一个时间,例如上午11点钟。
时间段(Time Duration)- 一段时间,不特指起止时间,例如1小时。
时间窗口(Time Interval、Time Period)- 一段时间,从某个时间点到另一时间点,例如下午2点到3点。
时间系统(Time System)- 特定的时间表示、计算规则的体系。
日历系统(Calendar System)- 以一天为基础的时间系统。Gregorian Calender是一个标准的日历系统。
UTC时间(Coordinated Universal Time),支持闰秒的标准时间系统。类似的有格林威治时间GMT。
DST时间(Daylight Savings Time - 夏令时冬令时)很多国家地区在夏天会调整本地时间。
时区(Time Zone) - 使用特定DST规则和与标准时之间时间偏差规则的地区或国家。
Epoch - 日期系统和时钟系统的起点。不同的时间系统起点不一样,通常UTC起点为1970年1月1号0点。
TAI Time - 高精度的时间系统,使用原子时,这个太深奥了,没有具体研究过。
注:下列关于Boost.DateTime输入输出的操作,请参看另一篇介绍:Boost.DateTime的IO操作。
头文件:
#include <boost/date_time/posix_time/posix_time.hpp>
例1. 日期计算:打印今天日期;今年感恩节(11月的第4个星期四)的日期;如果还没有到今年感恩节,打印今天到感恩节还有多少天。