亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++ boost 時間與日期處理詳細介紹

2020-01-26 14:23:35
字體:
來源:轉載
供稿:網友

boost 時間與日期處理

導視:

特點
缺點
說明
timer
計時基類
不適合大跨度時間
適用大部分的普通計時
progress_timer
繼承自timer 可以自動寫入流中
只精確到0.01s
如果需要更精確,可派生個類,調用stream的precision設置
progress_display 圖形化顯示進度 只能輸出到cout 如果還有其他輸出則會干擾進度顯示。
折中的辦法是重新顯示 pd.restart(size); pd+= pNum;
date 日期結構,時間點 ―― date是date_time庫的核心類 boost::gregorian
date_duration days、months、years 時間段 ―― 表示一段時間,可以把它看成一個int
date_period 標量,左開右閉,時間區間 ―― 可以認為是一個有起點的date_duration。能做交集、并集
date_iterator 迭代器,以某個單位增減 ―― 天、周、月、年四種迭代器,以某種增量移動。
time_duration 時間段 同date_duration ―― hours、minutes、seconds、millisec、boost::posix_time
ptime 時間點 date+time_duration ―― 分date()和time_of_day()操作。
time_period 時間區間 同date_period ―― ――
time_iterator 迭代器,以某個單位增減 ―― 可直接與ptime比較
date_facet 流格式化日期 ―― %Y年%m月%d日
time_facet 流格式化時間 ―― %Y年%m月%d日 %H點%M分%S%F秒
#include <boost/timer.hpp> #include <boost/progress.hpp> #include <iostream> #include <sstream> #include <fstream> #include <string> #include <vector> #include <Windows.h>  #include <boost/date_time/gregorian/gregorian.hpp> #include <boost/date_time/posix_time/posix_time.hpp>  using namespace std;  int main() {   boost::timer t;   std::cout<<"Max "<<t.elapsed_max()<<endl;   std::cout<<"Min "<<t.elapsed_min()<<endl;   std::cout<<"elapsed: "<<t.elapsed()<<endl;   t.restart();   Sleep(100);   std::cout<<"elapsed: "<<t.elapsed()<<endl;    cout<<"---------------------------"<<endl;   stringstream ss;   {     boost::progress_timer t(ss);      Sleep(300);   }   cout<<ss.str();   cout<<"---------------------------"<<endl;    vector<string> v(100);   //Do Data Fill......    ofstream fs("c:/test.txt");    boost::progress_display pd(v.size());   vector<string>::iterator pos;   for (pos = v.begin();pos != v.end();++pos)   {     fs<<*pos<<endl;     Sleep(10);     ++pd;     //pd.restart(v.size());     //pd+=(pos-v.begin() +1);   }   cout<<"---------------------------"<<endl;      {     using namespace boost::gregorian;     cout<<"----------------- date ------------------"<<endl;     date d1;     date d2(2013,4,7);     date d3(2013,Apr,7);     date d4(d2);      assert(d1 == date(not_a_date_time)); //默認初始化為無效日期     assert(d2 == d4);     assert(d3 == d2);          d1 = from_string("1999,9,9");     date d5 (from_string("2008/8/8"));     d3 = from_undelimited_string("20110111");          cout<<day_clock::local_day()<<endl;     cout<<day_clock::universal_day()<<endl;      date d6 (neg_infin);     date d7(pos_infin);     cout<<d6<<endl;     cout<<d7<<endl;      cout<<"---------------------------"<<endl;     date today (2013,4,17);     assert(today.year() == 2013);     assert(today.month() == 4);     assert(today.day() == 17);      date::ymd_type ymd = today.year_month_day();     assert(ymd.year == 2013);     assert(ymd.month == 4);     assert(ymd.day == 17);      assert(today.day_of_week() == 3); //星期幾 周日為0     cout<<today.day_of_year()<<endl;  //在一年中是第幾天     assert(today.end_of_month() == date(2013,4,30));  //當月的最后一天     cout<<today.week_number()<<endl;  //當年的第幾周 范圍0~53 年初的半周歸為上一年,即53     assert(d6.is_infinity());      //日期為無限日期     assert(d6.is_neg_infinity());     cout<<"---------------------------"<<endl;      cout<<to_simple_string(today)<<endl;     cout<<to_iso_string(today)<<endl;         cout<<to_iso_extended_string(today)<<endl; //常用日期格式YYYY-MM-DD     cout<<today<<endl;        cout<<"---------------------------"<<endl;     tm t = to_tm(today);       assert(t.tm_hour == 0 && t.tm_min == 0);          date new_today = date_from_tm(t);  //從tm轉為date     assert(new_today == today);      cout<<"-------------- days(date_duration) --------------"<<endl;     days dd1(10),dd2(-20),dd3(365);     assert(dd1>dd2 &&dd1<dd3);     assert(dd1+dd2 == days(-10));     assert((dd2+dd3).days() == 345);     assert(dd3/5 == days(73));      weeks w(3);   //3個星期     assert(w.days() == 21);          months m(5);     years y(2);      months m2 = y+m;     assert(m2.number_of_months() == 29);     assert((y*2).number_of_years() == 4);      cout<<"-------------- Calc --------------"<<endl;     date dA(2000,1,1),dB(2008,8,8);     cout<<dB-dA<<endl;   //3142天          dA+=days(10);     assert(dA.day() == 11);     dA+=months(2);     assert(dA.month() ==3 && dA.day()== 11);      dA-=weeks(1);     assert(dA.day() == 4);      dB-=years(7);     assert(dA.year() == dB.year()-1);      //如果日期是月末的最后一天,加減月或年會得到月末的時間,而不是簡單的月、年加1     date sp(2013,3,30);     sp-=months(1);     assert(sp.month() == 2 && sp.day() == 28);     sp -=months(1);     assert(sp.month()== 1 && sp.day()== 31);     sp+=months(2);     assert(sp.day() == 31); //與原來的日期已經不相等!      cout<<"-------------- date_period --------------"<<endl;     date_period dp(date(2013,4,17),days(14));  //左開右閉與STL的容器相似     assert(!dp.is_null());     assert(dp.begin().day() == 17);     assert(dp.last().day() == 30);     assert(dp.end().day() == 1);      cout<<dp<<endl;      date_period new_dp = dp;     new_dp.shift(days(3));   //將時間區間向后移動     assert(new_dp.begin().day() == 20);     assert(new_dp.length().days() == 14);           new_dp.expand(days(3));   //區間兩段延長n天,即延長2n天。     assert(new_dp.begin().day() == 17);     assert(new_dp.length().days() == 20);      assert(dp.is_after(date(2013,1,1)));     assert(dp.contains(date(2013,4,20)));      date_period dp2 (date(2013,4,17),days(5));     assert(dp.contains(dp2));          assert(dp.intersects(dp2));   //交集     assert(dp.intersection(dp2) == dp2);          date_period dp3 (date(2013,5,1),days(5));     assert(!dp3.intersects(dp));     assert(dp3.intersection(dp2).is_null());      assert(dp.is_adjacent(dp3));          date_period dp4(date(2013,4,17),days(19)); //并集     assert(dp.merge(dp3).is_null());  //無交集返回空     assert(dp.span(dp3) == dp4);    //填充中間區域       cout<<"-------------- date_iterator --------------"<<endl;     date last(2013,4,17);      day_iterator d_iter(last); //日期迭代器      assert(d_iter == last);     ++d_iter;     assert(d_iter == date(2013,4,18));      year_iterator y_iter(*d_iter,3);  //增減步長為3     assert(y_iter == last + days(1));      ++y_iter;     assert(y_iter->year() == 2016);        cout<<"-------------- func --------------"<<endl;     cout<<(gregorian_calendar::is_leap_year(2000)? "Yes":"no")<<endl;  //閏年     assert(gregorian_calendar::end_of_month_day(2013,2) == 28);   //月末天        }      {     using namespace boost::posix_time;     cout<<"-------------- time_duration --------------"<<endl;     time_duration td(1,1,1);  //時、分、秒 會自動借、進位     hours h0(1);     minutes m(1);     seconds s(1);     millisec ms(1);          time_duration td2 = h0+m+s+ms;     time_duration td3 = hours(2) + minutes(10);     time_duration td4 = duration_from_string("1:10:10:300");      assert(td4.hours() == 1 && td4.minutes() == 10 && td4.seconds() == 10);      assert(td.total_seconds() == 1*3600 + 1*60 +1); //轉為sec      hours h(-10);     assert(h.is_negative());      time_duration h2 = h.invert_sign(); //取反     assert(!h2.is_negative() && h2.hours() == 10);      cout<<td3-td2<<endl;     cout<<to_simple_string(td4)<<endl;     cout<<to_iso_string(td4)<<endl;          cout<<"-------------- ptime --------------"<<endl;     {       using namespace boost::gregorian;       ptime p(date(2013,4,17),hours(1)); //ptime相當于date+time_duration       ptime p1 = time_from_string("2013-4-17 16:25:00");       cout<<p<<endl;       cout<<p1<<endl;       ptime p2 = second_clock::local_time();     //常用時間輸出       ptime p3 = microsec_clock::universal_time();  //微秒精度       cout<<p2<<endl<<p3<<endl;        ptime op(date(2013,4,17),hours(1)+minutes(30));        date d = op.date();       time_duration optd = op.time_of_day();       assert(d.day() == 17 && d.month() == 4);       assert(optd.hours() == 1 && optd.minutes() == 30);       cout<<to_iso_extended_string(op)<<endl;        tm t = to_tm(op);  //不可逆,此處與date不同                 //只能用date_from_tm先得到日期,再填充時間。              cout<<"-------------- time_period --------------"<<endl;       time_period tp1 (op,hours(8));       time_period tp2(op+hours(8),hours(1));       assert(tp1.end() == tp2.begin() && tp1.is_adjacent(tp2));       assert(!tp1.intersects(tp2));        tp1.shift(hours(1));       assert(tp1.is_after(op));       assert(tp1.intersects(tp2));        tp2.expand(hours(10));       assert(tp2.contains(op) && tp2.contains(tp1));        cout<<"-------------- time_iterator --------------"<<endl;       for (time_iterator t_iter(op,minutes(10));t_iter<op+hours(1);++t_iter)       {         cout<<*t_iter<<endl;       }       cout<<"-------------- formate --------------"<<endl;       date_facet* dfacet = new date_facet("%Y 年%m 月%d 日");       cout.imbue(locale(cout.getloc(),dfacet));       cout<<date(2013,4,17)<<endl;        time_facet* tfacet = new time_facet("%Y 年%m 月%d 日 %H點%M分%S%F秒");       cout.imbue(locale(cout.getloc(),tfacet));       cout<<op<<endl;     }   }    getchar();   return 0; } 
運行結果:
Max 2.14748e+006 Min 0.001 elapsed: 0.001 elapsed: 0.1 --------------------------- 0.30 s --------------------------- 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----| *************************************************** --------------------------- ----------------- date ------------------ 2013-Apr-17 2013-Apr-17 -infinity +infinity --------------------------- 107 16 --------------------------- 2013-Apr-17 20130417 2013-04-17 2013-Apr-17 --------------------------- -------------- days(date_duration) -------------- -------------- Calc -------------- 3142 -------------- date_period -------------- [2013-Apr-17/2013-Apr-30] -------------- date_iterator -------------- -------------- func -------------- Yes -------------- time_duration -------------- 01:08:58.999000 01:10:10.300000 011010.300000 -------------- ptime -------------- 2013-Apr-17 01:00:00 2013-Apr-17 16:25:00 2013-Apr-17 17:19:21 2013-Apr-17 09:19:21.870604 2013-04-17T01:30:00 -------------- time_period -------------- -------------- time_iterator -------------- 2013-Apr-17 01:30:00 2013-Apr-17 01:40:00 2013-Apr-17 01:50:00 2013-Apr-17 02:00:00 2013-Apr-17 02:10:00 2013-Apr-17 02:20:00 -------------- formate -------------- 2013 年04 月17 日 2013 年04 月17 日 01點30分00秒 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲va欧美va国产综合久久| 91在线|亚洲| 国产在线观看91精品一区| 红桃视频成人在线观看| 国产噜噜噜噜久久久久久久久| 中文字幕在线精品| 久久久久久高潮国产精品视| 欧美老肥婆性猛交视频| 欧美日韩国产成人在线| 激情懂色av一区av二区av| 日韩av电影手机在线观看| 色噜噜狠狠狠综合曰曰曰88av| 日韩一区二区欧美| 国产91精品高潮白浆喷水| 成人av资源在线播放| 久久人91精品久久久久久不卡| 欧美在线观看网站| 欧洲精品久久久| 91精品在线观| 欧美日产国产成人免费图片| 色播久久人人爽人人爽人人片视av| 欧美午夜视频一区二区| 精品无码久久久久久国产| 欲色天天网综合久久| 亚洲欧美精品一区| 久久精品国产精品亚洲| 日韩精品视频免费| 日韩精品久久久久| 久久免费视频观看| 国模视频一区二区| 亚洲va码欧洲m码| 精品小视频在线| 91国语精品自产拍在线观看性色| 国产在线观看不卡| 日韩av网站在线| 亚洲一区二区中文字幕| 亚洲女人被黑人巨大进入| 91亚洲永久免费精品| 国产欧美在线播放| 国产精品午夜国产小视频| 欧美性xxxxx极品| 91探花福利精品国产自产在线| 久久久免费电影| 日本最新高清不卡中文字幕| 久久人人97超碰精品888| 国产精品白嫩初高中害羞小美女| 久久手机精品视频| 欧美精品福利视频| 亚洲精品日韩丝袜精品| 精品久久久久久中文字幕一区奶水| 精品成人久久av| 2019亚洲男人天堂| 亚洲人成在线观看| 亚洲欧美成人精品| 国产日韩欧美自拍| 久久久噜噜噜久噜久久| 亚洲福利视频久久| 美女黄色丝袜一区| 日韩av123| 亚洲精品视频在线观看视频| 综合欧美国产视频二区| 亚洲免费福利视频| 国产精品96久久久久久| 亚洲美女自拍视频| 国产精品视频白浆免费视频| 国产综合久久久久| 成人h片在线播放免费网站| 日韩视频免费看| 一区二区三区无码高清视频| 在线色欧美三级视频| 日韩电影网在线| 亚洲国产成人精品女人久久久| 亚洲国产婷婷香蕉久久久久久| 色吧影院999| 91香蕉嫩草神马影院在线观看| 色青青草原桃花久久综合| 久久久久久中文| 97视频免费看| 亚洲男人的天堂在线播放| 精品视频在线导航| 91欧美日韩一区| 91精品国产乱码久久久久久蜜臀| 日韩高清欧美高清| 国产精自产拍久久久久久蜜| 在线观看不卡av| 日本一区二区在线播放| 欧美日韩在线影院| 人人爽久久涩噜噜噜网站| 亚洲精品电影网在线观看| 庆余年2免费日韩剧观看大牛| 久久精品电影一区二区| 亚洲精品xxx| 成人免费xxxxx在线观看| 精品国产一区二区三区四区在线观看| 欧美在线亚洲一区| 国产精品视频中文字幕91| 国模gogo一区二区大胆私拍| 久久成人精品电影| 精品动漫一区二区三区| 国产亚洲精品成人av久久ww| 亚洲免费视频观看| 欧美日韩国产限制| 欧美性xxxx极品hd欧美风情| 91av在线免费观看| 日韩精品福利在线| 久久久久久久久久亚洲| 精品中文字幕在线| 精品国产户外野外| 国产精品精品视频一区二区三区| 亚洲毛茸茸少妇高潮呻吟| 亚洲成成品网站| 亚洲精品电影网在线观看| 国产欧美一区二区三区视频| 伊人久久久久久久久久| 午夜精品久久久久久久99黑人| 精品香蕉在线观看视频一| 国产精品久久久久久搜索| 91在线中文字幕| 国产精品女人久久久久久| 久久激情五月丁香伊人| 亚洲精品久久久久中文字幕二区| 国产精品女主播视频| 91久久夜色精品国产网站| 欧美日韩午夜视频在线观看| 91精品国产色综合久久不卡98口| 久久久久久久国产| 国产亚洲精品一区二555| 中文字幕亚洲综合久久筱田步美| 日韩在线不卡视频| 日韩欧美成人网| 中文综合在线观看| 日韩极品精品视频免费观看| 亚洲第一在线视频| 国产精品三级美女白浆呻吟| 欧美另类暴力丝袜| 国产精品久久久久久久美男| 久久成人18免费网站| 美女视频久久黄| 中文在线资源观看视频网站免费不卡| 欧美成人国产va精品日本一级| 国产精品678| 日韩欧美福利视频| 国产成人精品网站| 亚洲最大av网| 欧美色视频日本高清在线观看| 最近2019中文字幕大全第二页| 欧美日韩激情小视频| 午夜精品久久久久久久久久久久久| 久久国产精品影视| 欧美性猛交xxxx久久久| 精品一区二区三区三区| 国产精品日日摸夜夜添夜夜av| 国a精品视频大全| 亚洲已满18点击进入在线看片| 久久精品国产久精国产思思| 国产成+人+综合+亚洲欧洲| 成人午夜高潮视频| 国产欧美日韩精品在线观看| 久久精品国产96久久久香蕉| 91精品中国老女人| 日韩电影中文字幕| 欧美韩日一区二区| 高清欧美性猛交xxxx| 国产91热爆ts人妖在线|