boost 日期與時間相關庫

2021-06-28 03:34:40 字數 4262 閱讀 8742

1.timer類:

#include "stdafx.h"

#include

#include

using namespace std;

using namespace boost;

int _tmain(int argc, _tchar* argv)

2.boost::progress_timer t類

自動列印輸出流逝的時間

#include

int _tmain(int argc, _tchar* argv)

3.new_progress_timer 繼承boost::progress_timer的自定義類,可自定義精度

#include "stdafx.h"

#include

#include

#include

#include

using namespace std;

template

class new_progress_timer:public boost::timer

~new_progress_timer(void)

catch(...){}}

private:

std::ostream & m_os;

};int _tmain(int argc, _tchar* argv)

return 0;

}4.progress_display類:可以在控制台上顯示程式的執行進度

#include

#include

#include

#include

using namespace std;

int _tmain(int argc, _tchar* argv)

return 0;

}5.date類 表示年月日的日期類 以天為單位表示時間點概念

簡單構造

#include

using namespace boost;

using namespace boost::gregorian;

date d1; //乙個無效的日期

date d2(2010,1,1);//使用數字構造日期

date d3(2010,jan,1);//也可以使用英文制定月份

date d4(d2); //date之初拷貝構造

assert(d1 == date(not_a_date_time));//not_a_date_time代表無效日期

assert(d2 == d4);//datetime支援比較操作

assert(d3< d4);

工廠函式構造date

from_string() 、from_undelimited_string、day_clock::local_day()、day_clock::universal_day()

呼叫示例:

date d1 =from_string("1999-12-31");

date d2(from_string("2005/1/1"));

date d3 = from_undelimited_string("20111118");

date d1 =from_string("1999-12-31");

date d2(from_string("2005/1/1"));

date d3 = from_undelimited_string("20111118");

date d4 = day_clock::local_day();//返回本地日期

date d5 = day_clock::universal_day();//返回utc日期

6.特殊日期

date d1(neg_infin); //負無限日期

date d2(pos_infin); //正無限日期

date d3(not_a_date_time);//無效日期

date d4(max_date_time);//最大可能日期 9999-12-31

date d5(min_date_time);//最小可能日期1400-01-01

7.訪問日期

date d(2010,4,1);

assert(d.year()==2010);//返回年

assert(d.month()==4);//返回月

assert(d.day()==1);//返回日

date::ymd_type ymd = d.year_month_day();//一次性獲得年月日資料

assert(d.day_of_week()==4);//返回date的星期數

assert(d.day_of_year() == 91);//返回date是當年的第幾天

assert(d.end_of_month() == date(2010,4,30));//返回當月最後一天的date物件

assert(date(2010,1,10).week_number() ==1);//返回date所在的週是當年的第幾周,範圍是0至53,如果年初的幾天位於去年的周那麼週數為53,即第0周

assert(date(pos_infin).is_infinity());//是否是乙個無限日期

assert(date(pos_infin).is_pos_infinity());//是否是乙個負無限日期

assert(date(neg_infin).is_neg_infinity());//是否是乙個正無限日期

assert(date(not_a_date_time).is_not_a_date());//是否是乙個正無限日期

assert(date(not_a_date_time).is_special());//是否是乙個無效日期

assert(!date(2010,10,1).is_special());//是否是任意乙個特殊日期

8.日期的輸出

to_******_string(date d);//轉換為yyyy-mmm-dd格式的字串,其中mmm為3字元的英文月份名

to_iso_string(date d);//轉換為yyyymmdd格式的數字字串

to_iso_extended_string(date d);//轉換為yyyy-mm-dd格式的數字字串

9.與tm結構的轉換

to_tm(date):date轉換到tm,tm的時分秒成員(tm_hour,tm_min,tm_sec)均置為0,夏令時標誌tm_isdst置為-1(表示未知).

date_from_tm(tm datetm): tm轉換到date。只使用年、月、日三個成員(tm_year,tm_mon,tm_mday),其他成員均被忽略。

示例:date d(2010,2,1);

tm t = to_tm(d);

assert(t.tm_hour ==0 && t.tm_min ==0);

assert(t.tm_year == 110 && t.tm_mday ==1);

date d2 = date_from_tm(t);

assert(d == d2);

10,日期長度(date_duration)

支援 + -  / 運算,並支援(== 、!= 、<、<=等)運算

datetime庫為date_duration定義了常用的巨集:typedef:days

days示例:

days dd1(10),dd2(-100),dd3(225);

assert(dd1>dd2 && dd2assert(dd1 + dd2 == days(-90));

assert((dd2 +dd3).days() == 265);

assert(dd3/5 == days(51));

month、years、weeks示例

weeks w(3); //三個星期

assert(w.days() ==21);

months m(5);//5個月

years y(2);//2年

month m2 = y +m;//2年零5個月

assert(m2.number_of_months() == 29);

assert((y*2).number_of_years() ==4);

11.日期運算

Boost庫時間日期學習

學習內容見 boost程式庫完全開發指南 第2章 時間與日期 學習三個類的使用timer progress timer date。boost庫的配置可參照 開發環境 winxp vs2005 boost 1 49 0。以下所有示例程式均為控制台程式。1 timer類 timer類是乙個小型的計時器,...

boost 時間和日期

include boost posix time microsec clock universal time 格林威治時間 和上面的應該是精度不一樣 date tod boost gregorian day clock local day 當前日期 tod years 1 加1年.ptime p b...

boost 時間與日期

timer include using namespace boost progress timer p36 繼承自timer,析構時自動輸出時間 include using namespace boost 將progress timer的輸出轉移到時stringstream,轉換為其他字串 str...