boost date time

#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;
}
时间: 2024-10-02 06:15:20

boost date time的相关文章

8 C++ Boost 日期 时间

目录: 1,日期 构造date 继续构造date对象 date特别的值 date能访问的函数 boost date_time 与tm转换 日期的加减运算 计算时间段 日期的迭代器 日期生成器 4月的第一个/最后一个星期一 日期生成器: 某月的第几个星期几,某天的前一个/后一个星期一 日期生成器算法 日历类 gregorian_calendar 2,时间 posix 时间的构造 时间的操作 时间段 操作 时间迭代器 1,日期 构造date [email protected]:~/boost$ ca

10 C++ Boost ASIO网路通信库 TCP/UDP,HTTP

  tcp 同步服务器,显示服务器端时间 tcp 同步服务器,提供多种选择 多线程的tcp 同步服务器 tcp 同步客户端 boost 域名地址解析 tcp异步服务器 tcp 异步客户端 UDP同步服务器 UDP同步客户端 UDP异步服务器 UDP异步客户端 HTTP同步客户端 HTTP异步客户端 同步实验: 异步实验 多线程异步实验 tcp 同步服务器,显示服务器端时间 [email protected]:~/boost$ cat main.cpp  #include <ctime> #in

Boost总结汇总

从开始接触Boost已经有好几年了,而对它的掌握却难言熟悉,有对它部分的源代码的剖析也是蜻蜓点水.有时间一点点梳理一下吧. 1. 概述 [Boost]C++ Boost库简介[Boost]C++ Boost 学习资源列表[Boost]Boost使用几条简单笔记[Boost]Poco vs Boost 2. 工具 [Boost]利用typeid来获取变量的类型[Boost]boost::function介绍[Boost]boost::bind四种应用场景的例子 3. 字符串与Range相关 [Bo

Artificially intelligent robot scientist &#39;Eve&#39; could boost search for new drugs

图:机器人科学家 “夏娃” Date: February 3, 2015 Source: University of Cambridge Summary: Eve, an artificially intelligent 'robot scientist' could make drug discovery faster and much cheaper, say researchers writing in the Royal Society journal Interface. The te

boost之date_time库

最近开了boost库的学习,就先从日期时间库开始吧,boost的date_time库是一个很强大的时间库,用起来还是挺方便的.以下算是我学习的笔记,我把它记录下来,以后便于我复习和查阅. #include<iostream>#include<boost/date_time/gregorian/greg_month.hpp>#include<boost/date_time/gregorian/gregorian.hpp> using namespace std;using

linux下编译安装boost库

转载:http://www.cnblogs.com/oloroso/p/4632848.html linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4.安装boost库到指定目录 5.测试一下 代码 编译运行 先看一下系统环境 Linux o-pc 3.19.0-22-generic #22-Ubuntu SMP Tue Jun 16 17:15:15

boost库学习之 date_time库

 date_time库是一个全面灵活的日期时间库,提供时间相关的各种所需功能,也是一个比较复杂的库.它支持从1400-01-01到9999-12-31之间的日期计算.使用时包含#include <boost/date_time/gregorian/gregorian.hpp>头文件, 引用boost::gregorian;命名空间. 日期 date是date_time库中的核心类.以天为单位表示时间点. date d1; //无效日期 date d2(2015, 1, 4); date d

boost学习2.6:data_time库(2,处理日期)

(1)处理年月日,格里高历,位与命名空间boost::gregorian #define BOOST_DATE_TIME_SOURCE #include <boost/date_time/gregorian/gregorian.hpp> using namespace boost::gregorian; (2)创建日期对象 #define BOOST_DATE_TIME_SOURCE #include <boost/date_time/gregorian/gregorian.hpp>

windows下boost库的基本使用方法

1.首先到boost官网去下载最新的版本的boost库: http://www.boost.org/ 2.解压文件,在命令提示符中打开到boost库的根目录下,执行以下命令: bjam --toolset=msvc --build-type=complete stage 等待程序编译完成,大约要两个小时左右,会在boost根目录下生成bin.v2和stage两个文件夹,其中bin.v2下是生成的中间文件,大小在2.7G左右,可以直接删除.stage下才是生成的dll和lib文件. 3.打开vs: