date_time庫使用date_period類來表示日期區間的概念,它是時間軸上的一個左閉右開區間,端點是兩個date對象。區間的左邊界必須小於右邊界,否則date_period將表示一個無效的日期區間。date_period的類摘要如下:
class date_period
{
public:
period(date,date);//構造函數
period(date,days);
date begin()const;//區間端點操作
date end()const;
date last()const;
days length()const;
bool is_nul1()const;
bool operator==(const period 6)const;//比較操作
bool operator<(const period&)const;
void shift(const days s);//平移
void expand(const days 6);//擴展
boo1 contains(const date 6)const;//區間運算
boo1 contains(const period&)const;
boo1 intersects(const period&)const;
boo1 is adjacent(const period&)const;
boo1 is before(const date&)const;
boo1 is after(const date&)const;
period intersection(const period s)const;
period merge(const period&)const;
period span(const period&)const;
};
成員函數begin()和last()返回日期區間的兩個端點,而end()返回 last()後的第一天,與標準容器中的end()含義相同,是一個「逾尾的位置」。length()返回日期區間的長度,以天為單位。如果日期區間在構造時使用了左大右小的端點或者日期長度是 0,那麼is_null()函數將返回true。例如:
assert(dp. last(). day()==20);
assert(dp, end(), day()==21);
assert(dp. length(). days()==20);
date_period可以進行全序比較運算,但比較不是依據日期區間的長度,而是依據區間的端點,即第一個區間的end()和第二個區間的begin(),判斷兩個區間在時間軸上的位置大小。如果兩個日期區間相交或者包含,那麼比較操作無意義。date_period還支持輸入輸出操作符,默認的輸入輸出格式是一個[YYYY-mmm-DD/YYYY-mmm-DD]形式的字符串。例如:
date period dpl(date(2017,1,1),days(20));
date_period dp2(date(2017,2,19),days(10));
cout<<dp1;//[2017-Jan-01/2017-Jan-20]
assert(dpl<dp2);
date_period可以指定區間的兩個端點構造,也可以指定左端點再加上時長構造,通常後一種方法比較常用,相當於生活中從某天開始的一個周期。以上就是在C++中,date_time庫使用date_period類來表示日期區間的方法。