Boost(十)——日期和時間

結合Boost官網

該庫的發明是根據教皇 Gregory XIII 在1582年頒發的格里曆。這個曆法也是當前使用最廣泛的。

庫名字就是這麼來的:boost::gregorian::...

獲取當前時間

boost::gregorian::date d = boost::gregorian::day_clock::universal_day();//universal_time() 方法返回 UTC 時間
boost::gregorian::date d = boost::gregorian::day_clock::local_day();//local_day() 方法返回本地時間

兩天日子之差

利用operator - 得到。

定義時間區間

boost::gregorian::date d1(2018,11,1);
boost::gregorian::date d2(2018,11,22);
boost::gregorian::date_period(d1,d2);//區間是1-21(不包括22號)

得到當前時刻

boost::posix_time::ptime pt = boost::posix_time::second_clock::local_time();
cout << pt.time_of_day().hours() << endl;        //時
cout << pt.time_of_day().minutes() << endl;      //分  
cout << pt.time_of_day().seconds() << endl;      //秒

練習題:

1、創建一個程序,打印下一個 Christmas Eve, Christmas Day 及其後一天是星期幾到標準輸出流。

#include <boost\date_time\gregorian\gregorian.hpp>
#include <boost\date_time\posix_time\posix_time.hpp>
#include <iostream>
using namespace std;

void main()
{
    boost::gregorian::date d1 = boost::gregorian::day_clock::local_day();
    boost::gregorian::greg_month month(12);
    boost::gregorian::greg_day day(25);
    boost::gregorian::greg_year year(d.year());
    boost::gregorian::date d2(year, month, day);//今年的聖誕節
    boost::gregorian::date_duration dd = d2 - d1;
    if (dd.days() <= 0)    //如過超過今年的聖誕節,下一次就變成明年聖誕節
    { 
	boost::gregorian::year_iterator year_it(d2);
	d2 = *++year_it;
    }
    cout << "Next Christmas Day >> " <<  d2 << endl;
    boost::gregorian::day_iterator day_it(d2);
    d2 = *++day_it; //聖誕節第二天是星期幾
    cout << "Next Christmas Day Next Day is  >> " << d2.day_of_week() << endl;
}

2、以天數計算你的年齡。 該程序應該自動根據當前日期來計算。

#include <boost\date_time\gregorian\gregorian.hpp>
#include <boost\date_time\posix_time\posix_time.hpp>
#include <iostream>
using namespace std;   

void main()
{
    boost::gregorian::date d1 = boost::gregorian::day_clock::local_day();
    boost::gregorian::date birth_day(1982, 9, 20); //我歌的生日,嘻嘻
    cout << "day" << d1 - birth_day << endl;
    cout << "year" << (d1 - birth_day).days() / 365 << endl;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章