boost datetime 时间日期

来源:互联网 发布:linux root 破解 编辑:程序博客网 时间:2024/05/20 00:12

时间日期头文件包含

#include <boost/date_time/gregorian/gregorian.hpp>

try{//boost::gregorian::date 的缺省构造函数会创建一个无效的日期boost::gregorian::date d(2017,12,23);TRACE("%d年%d月%d日,周%d,月结日%d\n",d.year(),d.month(),d.day(),d.day_of_week(),d.end_of_month().day());//当前时间日期boost::gregorian::date d2=boost::gregorian::day_clock::universal_day();TRACE("%d年%d月%d日,周%d,月结日%d\n",d2.year(),d2.month(),d2.day(),d2.day_of_week(),d2.end_of_month().day());//通过字符串构造boost::gregorian::date d3=boost::gregorian::date_from_iso_string("20171123");TRACE("%d年%d月%d日,周%d,月结日%d\n",d3.year(),d3.month(),d3.day(),d3.day_of_week(),d3.end_of_month().day());//返回时间区间,天数boost::gregorian::date_duration dd=d3-d2;TRACE("时间天数%d\n",dd.days());//构造8个星期boost::gregorian::weeks wk(8);TRACE("%d\n",wk.days());//打印出 56//构造8个月的时间boost::gregorian::months mt(8);TRACE("%d\n",mt.number_of_months());//打印8//构造3年的时间boost::gregorian::years yr(3);TRACE("%d\n",yr.number_of_years());//打印3//当前日期 与 moths 相加,每次计算以月份的实际天数计算//当前日期 与 moths 相减,每次计算以月份的实际天数计算//如果您不想这样子计算,可以取消 BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES 的定义,取消后不能//boost::gregorian::weeks, boost::gregorian::months ,boost::gregorian::years和boost::gregorian::weeks都不能使用boost::gregorian::months mt_calc(1);boost::gregorian::date d_calc(2017,1,31);//以1月最后一日演示boost::gregorian::date d4=d_calc+mt_calc;TRACE("%d年%d月%d日\n",d4.year(),d4.month(),d4.day());//2017 02 28,20170131+1个月的时间表示递增到下一个月的结束日boost::gregorian::date d5=d4-mt_calc;TRACE("%d年%d月%d日\n",d5.year(),d5.month(),d5.day());//2017 1 31,20170228-1个月的时间表示回到上个月的月末,那么这个月份就结束了boost::gregorian::date d_calc_2(2017,1,1);//以1月最后一日演示boost::gregorian::date d6=d_calc_2+mt_calc;TRACE("%d年%d月%d日\n",d6.year(),d6.month(),d6.day());//2017 02 01,2017 01 01+1个月的时间表示递增到下一个月的起始日boost::gregorian::date d7=d6-mt_calc;TRACE("%d年%d月%d日\n",d7.year(),d7.month(),d7.day());//2017 1 1,2017 02 01-1个月的时间表示回到上个月的起始日//date_period 时间周期使用,还提供了其它方法,如移动一个区间,或计算两个重叠区间的交集boost::gregorian::date d8(2017, 1, 30); //2017 01 30 是开始计算的日期boost::gregorian::date d9(2017, 2, 1); // 2017 02 01 的前一天才是开始计算的日期,换句话就是2017 01 31boost::gregorian::date_period dp(d8, d9); boost::gregorian::date_duration dd_dp = dp.length(); TRACE("天数,%d\n",dd_dp.days());//输出两天TRACE("d8包含情况,%d\n",dp.contains(d8));TRACE("d9包含情况,%d\n",dp.contains(d9));//从这里可以看到date_period的计算情况,并不包含了2017 02 01//boost::gregorian::day_iterator 可以通过操作迭代器,递减递增每天//还有 boost::gregorian::week_iterator, boost::gregorian::month_iterator 和 boost::gregorian::year_iterator 分别提供了按周、按月或是按年跳的迭代器boost::gregorian::date d10(2017, 1, 5); //周三boost::gregorian::day_iterator it(d10); boost::gregorian::date d11=*++it;//递增1天,周四TRACE("%d年%d月%d日\n",d11.year(),d11.month(),d11.day());//2017年1月6日//计算下一个周五的日期,如果当前日期是周五则返回今天,否则返回下一个周五的日期boost::gregorian::date d12=boost::date_time::next_weekday(*it, boost::gregorian::greg_weekday(boost::date_time::Friday));TRACE("%d年%d月%d日\n",d12.year(),d12.month(),d12.day());//2017年1月6日}catch (std::exception& e){TRACE("%s\n",e.what());}

#include <boost/date_time/posix_time/posix_time.hpp>

try{//与位置无关的时间点//设置,2017 01 01 经过12 小时的点的时间,2017 01 01 12PM//boost::posix_time::ptime 可以传递一个 boost::date_time::not_a_date_time 创建一个无效的时间boost::posix_time::ptime pt(boost::gregorian::date(2017,1,1),boost::posix_time::time_duration(12,0,0));boost::gregorian::date d_pt=pt.date();TRACE("%d年%d月%d日\n",d_pt.year(),d_pt.month(),d_pt.day());//输出2017 01 01boost::posix_time::time_duration td=pt.time_of_day();TRACE("小时%d,分钟%d,秒%d\n",td.hours(),td.minutes(),td.seconds());//小时12,分钟0,秒0//构造当前时间的点boost::posix_time::ptime pt2=boost::posix_time::second_clock::local_time();//使用本地时间,universal_time 返回UTC时间点,boost::posix_time::microsec_clock TRACE("%d年%d月%d日\n",pt2.date().year(),pt2.date().month(),pt2.date().day());//TRACE("小时%d,分钟%d,秒%d\n",pt2.time_of_day().hours(),pt2.time_of_day().minutes(),pt2.time_of_day().seconds());////字符串构造时间点boost::posix_time::ptime pt3=boost::posix_time::from_iso_string("20170101T120000");//ISO 8601格式的字符串TRACE("%d年%d月%d日\n",pt3.date().year(),pt3.date().month(),pt3.date().day());//输出2017 01 01TRACE("小时%d,分钟%d,秒%d\n",pt3.time_of_day().hours(),pt3.time_of_day().minutes(),pt3.time_of_day().seconds());//小时12,分钟0,秒0//时间长度,定义1小时,30分钟的长度,也就是持续时间boost::posix_time::time_duration td_1(1,30,0);TRACE("小时%d,分钟%d,秒%d,总秒:%d\n",td_1.hours(),td_1.minutes(),td_1.seconds(),td_1.total_seconds());//小时1,分钟30,秒0,总秒:5400//时间点计算boost::posix_time::ptime pt11(boost::gregorian::date(2017, 1, 05), boost::posix_time::time_duration(12, 0, 0)); boost::posix_time::ptime pt12(boost::gregorian::date(2017, 1, 05), boost::posix_time::time_duration(18, 30, 0)); boost::posix_time::time_duration td_2 = pt12 - pt11; TRACE("小时%d,分钟%d,秒%d,总秒:%d\n",td_2.hours(),td_2.minutes(),td_2.seconds(),td_2.total_seconds());//小时6,分钟30,秒0,总秒:23400boost::posix_time::time_duration td_3 = pt11 - pt12; TRACE("小时%d,分钟%d,秒%d,总秒:%d\n",td_3.hours(),td_3.minutes(),td_3.seconds(),td_3.total_seconds());//小时-6,分钟-30,秒0,总秒:-23400boost::posix_time::ptime pt13(boost::gregorian::date(2017, 1, 05), boost::posix_time::time_duration(12, 0, 0)); boost::posix_time::time_duration td_4(6, 30, 0); boost::posix_time::ptime pt14 = pt13 + td_4; //ptime 与 time_duration 相加TRACE("小时%d,分钟%d,秒%d\n",pt14.time_of_day().hours(),pt14.time_of_day().minutes(),pt14.time_of_day().seconds());//小时18,分钟30,秒0{//时间区间,intersection 可以用于计算时间交集,merge 合并时间区boost::posix_time::ptime pt1(boost::gregorian::date(2017, 1, 05), boost::posix_time::time_duration(12, 0, 0)); boost::posix_time::ptime pt2(boost::gregorian::date(2017, 1, 05), boost::posix_time::time_duration(13, 30, 0)); boost::posix_time::time_period tp(pt1, pt2); TRACE("%d,%d\n",tp.contains(pt1),tp.contains(pt2));}{boost::posix_time::ptime pt(boost::gregorian::date(2017, 1, 05), boost::posix_time::time_duration(12, 0, 0)); //迭代器,操作一次变动6.5个小时boost::posix_time::time_iterator it(pt, boost::posix_time::time_duration(6, 30, 0)); ++it;boost::posix_time::ptime pt1=*it;TRACE("小时%d,分钟%d,秒%d\n",pt1.time_of_day().hours(),pt1.time_of_day().minutes(),pt1.time_of_day().seconds());//小时18,分钟30,秒0++it;boost::posix_time::ptime pt2=*it;TRACE("小时%d,分钟%d,秒%d\n",pt2.time_of_day().hours(),pt2.time_of_day().minutes(),pt2.time_of_day().seconds());//小时1,分钟0,秒0}}catch (std::exception& e){TRACE("%s\n",e.what());}

{//CET Central European,+1 表示 CET时间比UTC时间早1小时boost::local_time::time_zone_ptr tz(new boost::local_time::posix_time_zone("CET+1")); //定义一个时间点boost::posix_time::ptime pt(boost::gregorian::date(2017, 1, 5), boost::posix_time::time_duration(12, 0, 0)); boost::local_time::local_date_time dt(pt, tz);TRACE("时区名称:%s\n",dt.zone_name().c_str());{boost::gregorian::date pd=dt.utc_time().date();boost::posix_time::time_duration td =dt.utc_time().time_of_day();TRACE("%d年%d月%d日,小时%d,分钟%d,秒%d\n",pd.year(),pd.month(),pd.day(),td.hours(),td.minutes(),td.seconds());//2017年1月5日,小时12,分钟0,秒0}{boost::gregorian::date pd=dt.date();boost::posix_time::time_duration td =dt.time_of_day();TRACE("%d年%d月%d日,小时%d,分钟%d,秒%d\n",pd.year(),pd.month(),pd.day(),td.hours(),td.minutes(),td.seconds());//2017年1月5日,小时12,分钟0,秒0}{boost::gregorian::date pd=dt.local_time().date();boost::posix_time::time_duration td =dt.local_time().time_of_day();TRACE("%d年%d月%d日,小时%d,分钟%d,秒%d\n",pd.year(),pd.month(),pd.day(),td.hours(),td.minutes(),td.seconds());//2017年1月5日,小时13,分钟0,秒0}}{boost::local_time::time_zone_ptr tz(new boost::local_time::posix_time_zone("CET+1")); boost::posix_time::ptime pt(boost::gregorian::date(2017, 1, 5), boost::posix_time::time_duration(12, 0, 0)); boost::local_time::local_date_time dt(pt, tz); TRACE("时区名称:%s\n",dt.zone_name().c_str());{boost::gregorian::date pd=dt.local_time().date();boost::posix_time::time_duration td =dt.local_time().time_of_day();TRACE("%d年%d月%d日,小时%d,分钟%d,秒%d\n",pd.year(),pd.month(),pd.day(),td.hours(),td.minutes(),td.seconds());//2017年1月5日,小时13,分钟0,秒0}//EET,东部欧洲时间,比CET早两个小时boost::local_time::time_zone_ptr tz2(new boost::local_time::posix_time_zone("EET+2")); {boost::gregorian::date pd=dt.local_time_in(tz2).date();boost::posix_time::time_duration td =dt.local_time_in(tz2).time_of_day();TRACE("%d年%d月%d日,小时%d,分钟%d,秒%d\n",pd.year(),pd.month(),pd.day(),td.hours(),td.minutes(),td.seconds());//2017年1月5日,小时12,分钟0,秒0}}{boost::local_time::time_zone_ptr tz(new boost::local_time::posix_time_zone("CET+0")); boost::posix_time::ptime pt1(boost::gregorian::date(2017, 1, 5), boost::posix_time::time_duration(12, 0, 0)); boost::local_time::local_date_time dt1(pt1, tz); boost::posix_time::ptime pt2(boost::gregorian::date(2017, 1, 5), boost::posix_time::time_duration(18, 0, 0)); boost::local_time::local_date_time dt2(pt2, tz); boost::local_time::local_time_period tp(dt1, dt2); TRACE("%d,%d\n",tp.contains(dt1) ,tp.contains(dt2));//1,0}


原创粉丝点击