posix_time類date_time庫在格里高利曆的基礎上提供微秒級別的時間系統,但如果需要,它最高可以達到納秒級別的精確度。
用它需要包含以下標頭檔案
#include using namespace boost::posix_time;
1.時間長度
與日期長度date_duration類似,使用time_duration度量時間長度。
它可以精確到微秒,如果需要精確到納秒,則需要定義巨集boost_date_posix_time_std_config。
time_duration有幾個子類,可以度量不同的時間解析度,分別是:
hours、minutes、seconds、millisec/milliseconds、microsec/microseconds和nanosec/nanoseconds。
time_duration支援全序比較操作和輸入輸出,而且比date_duration要支援更多的算術運算,可以進行加減乘除運算。
//基本建立
//建立乙個1小時10分30秒1毫秒(1000微秒)的時間長度
time_duration td(1,10,30,1000);
//時、分、秒等值可以是任意的數量,不一定必須在它們的限度裡,超出的時間會自動進製或借位
//例如,下面表示2小時01分06.001秒
time_duration td(1,60,60,1000*1000*6+1000);
//使用time_duration的子類可以直觀的建立時間長度
hours h(1); //1小時
minutes m(10); //10分鐘
seconds s(30); //30秒鐘
millisec ms(1); //1毫秒
time_duration td = h + m + s + ms; //可以賦值給time_duration
time_duration td2 = hours(2) + seconds(10); //也可以直接賦值
//time_duration也可以從乙個字串建立
time_duration td = duration_from_string("1:10:30:001");
//time_duration裡的時分秒可以用hours()、minutes()、seconds()成員函式訪問
time_duration td(1,10,30,1000);
td.hours();
td.minutes();
td.seconds();
td.total_seconds(); //返回時間長度總秒數
td.total_milliseconds(); //返回時間長度總毫秒數
td.total_microseconds(); //返回時間長度總微秒數
//time_duration可以取負值,專門有乙個成員函式判斷它的正負號
hours h(-1);
h.is_negative();
h.invert_sign(); //將時間長度改變符號後生成乙個新的時間長度
//時間長度用字串表示
to_******_string(time_duration);
to_iso_string(time_duration); //hhmmss,fffffffff
2.時間長度精確度
預設精確到微秒,納秒相關的類和函式 nanosec和成員函式nanoseconds()、total_nanoseconds()都不可用。
如果需要精確到納秒,則需要定義巨集boost_date_posix_time_std_config。
定義巨集之後,建構函式會發生一些變化,秒以下的時間度量單位也會變成納秒。
#define boost_date_posix_time_std_config
time_duration td(1,10,30,1000); //1000納秒,即1微秒
//靜態成員函式unit()返回乙個time_duration物件,它是time_duration計量
//的最小單位,相當於time_duration(0,0,0,1);預設是微秒,定義了上面巨集,則是納秒
time_duration::unit() * 1000 * 1000 * 1000 //1秒等於10的9次方納秒
time_duration::resolution(); //返回時間長度的解析度,是個列舉值。
time_duration::num_fractional_digits(); //返回秒的小數部分的位數(微秒6位,納秒9位)
3.時間點
相當於乙個日期加上乙個小於一天的時間長度。我們使用ptime類處理。
ptime p(date(2014,6,8),hours(1)); //2023年6月8日凌晨1時
ptime p1 = time_from_string("2014-6-8 01:00:00"); //2023年6月8日凌晨1時
ptime p2 = from_iso_string("20140608t010000"); //2023年6月8日凌晨1時
date_time庫為ptime也提供了時鐘類,也可以從時鐘產生當前時間,分別是second_clock和microsec_clock類,分別提供秒級和微秒級的解析度。local_time()獲得本地當前時間,universal_time()獲得utc()當前時間
ptime p1 = second_clock::local_time();
ptime p2 = microsec_clock::universal_time();
4.操作時間點物件
由於ptime相當於date + time_duration,因此對它的操作可以分解為對這兩個組成部分的操作
使用date()和time_of_day()兩個成員函式獲得時間點中的日期和時間長度。
ptime p(date(2010,3,20),hours(12) + minutes(30));
date d = p.date();
time_duration td = p.time_of_day();
5.時間區間
與日期區間date_period對應,叫做time_period,使用ptime作為區間的兩個端點,同樣是左閉右開的區間。
用法與date_period基本相同,可以用begin()和last()返回區間的兩個端點,length()返回區間的長度,shift()和expand()變動區間。
ptime p(date(2014,1,1),hours(12));
//乙個8小時的區間
time_period tp1(p,hours(8));
//一小時的區間
time_period tp2(p + hours(8),hours(1));
//平移1小時
tp1.shift(hours(1));
//向兩端擴充套件10個小時
tp2.expand(hours(10));
6.時間迭代器
不同於日期迭代器,時間迭代器只有乙個time_iterator,它在構造時傳入乙個起始時間點ptime物件和乙個步長time_duration物件,然後就同日期迭代器一樣使用前置式operator++、operator--來遞增時間或遞減時間,解引用返回乙個ptime物件。
ptime p(date(2014,11,3),hours(10));
for(time_iterator t_iter(p,minutes(10));t_iter < p + hours(1); ++t_iter)
Boost庫基礎 日期
1.date time 它是乙個非常全面且靈活的日期時間庫,基於我們日常使用的公曆,可以提供時間相關的各種所需功能,如精確定義的時間點 時間段和時間長度 加減若干天 月 年 日期迭代器等等,date time庫還支援無限時間和無效時間這種實際生活中有用的概念,而且還可以與c的傳統時間結構tm相互轉換...
Boost庫時間日期學習
學習內容見 boost程式庫完全開發指南 第2章 時間與日期 學習三個類的使用timer progress timer date。boost庫的配置可參照 開發環境 winxp vs2005 boost 1 49 0。以下所有示例程式均為控制台程式。1 timer類 timer類是乙個小型的計時器,...
boost 日期與時間相關庫
1.timer類 include stdafx.h include include using namespace std using namespace boost int tmain int argc,tchar argv 2.boost progress timer t類 自動列印輸出流逝的時...