首页 > 代码库 > boost的posix_time用法详解01

boost的posix_time用法详解01

// boost_time.cpp : 定义控制台应用程序的入口点。
//made by davidsu33
//2014-5-11
//the usage of posix_time

#include "stdafx.h"
#include <boost/date_time/posix_time/posix_time.hpp>
#include <iostream>
#include <cassert>

using namespace std;

#define SHOW_VARIABLE(x){	cout<<#x<<"="<<x<<endl;}

void show_tm(std::tm & atm)
{
	cout<<"year="<<atm.tm_year<<" month="<<atm.tm_mon<<" day="<<atm.tm_mday<<endl;
	cout<<"hour="<<atm.tm_hour<<" minute="<<atm.tm_min<<" sec="<<atm.tm_sec<<endl;
}

//时间区间
void use_time_duration()
{
	//mili-sec 毫秒
	//mico-sec 微妙
	//nano-sec 纳秒
	//1hour 20minutes 30seconds 1000mico-seconds
	boost::posix_time::time_duration td(1, 20, 30, 1000);
	//cout<<"td="<<td<<endl;
	SHOW_VARIABLE(td);

	//根据所给的数值自动的进制
	boost::posix_time::time_duration td2(1, 60, 60, 1000*1000*6);
	SHOW_VARIABLE(td2);
	boost::posix_time::time_duration td3(2, 1, 6);
	assert(td3 == td2);
	SHOW_VARIABLE(td3);

	//hours minutes seconds 分别从time_duration派生
	boost::posix_time::hours h(2);
	boost::posix_time::minutes m(1);
	boost::posix_time::seconds s(6);
	boost::posix_time::time_duration td4 = h + m + s;
	assert(td4 == td3);
	SHOW_VARIABLE(td4);

	//duration_from_string
	std::string str = "2:1:6:0";
	boost::posix_time::time_duration td5 = boost::posix_time::duration_from_string(str);
	assert(td5 == td4);
	SHOW_VARIABLE(td5);

	//转换为tm结构
	std::tm tm2 = boost::posix_time::to_tm(td5);
	show_tm(tm2);
}

void uage_of_ptime()
{
	//ptime时间点
	//2014年5月11号 凌晨1点
	boost::posix_time::ptime 
		t1(boost::gregorian::date(2014, 5, 11), boost::posix_time::hours(1));
	SHOW_VARIABLE(t1);

	//time_from_string
	std::string s1 = "2014-5-11 01:00:00";
	boost::posix_time::ptime t2 = 
		boost::posix_time::time_from_string(s1);
	SHOW_VARIABLE(t2);

	//from_iso_string
	boost::posix_time::ptime t3 = 
		boost::posix_time::from_iso_string("20140511T010000");
	SHOW_VARIABLE(t3);


}

int _tmain(int argc, _TCHAR* argv[])
{
	use_time_duration();
	uage_of_ptime();
	getchar();


	return 0;
}