天天看點

利用boost擷取時間并格式化

利用boost來擷取目前時間又友善快捷,還不用考慮跨平台的問題。

1. 輸出YYYYMMDD

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

std::string strTime = boost::gregorian::to_iso_string(\
boost::gregorian::day_clock::local_day());

std::cout << strTime.c_str() << std::endl;
           

2. 輸出YYYYMMDD-HH:MM:SS

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

std::string strTime = boost::posix_time::to_iso_string(\
boost::posix_time::second_clock::local_time());

// 這時候strTime裡存放時間的格式是YYYYMMDDTHHMMSS,日期和時間用大寫字母T隔開了

int pos = strTime.find('T');
strTime.replace(pos,1,std::string("-"));
strTime.replace(pos + 3,0,std::string(":"));
strTime.replace(pos + 6,0,std::string(":"));

std::cout << strTime.c_str() << std::endl;
           

3. 計算時間間隔。boost裡計算時間間隔的功能很多很強大,我列舉的僅僅是我目前用到的。

#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread.hpp>
#define BOOST_DATE_TIME_SOURCE

boost::posix_time::ptime time_now,time_now1;
boost::posix_time::millisec_posix_time_system_config::time_duration_type time_elapse;

// 這裡為微秒為機關;這裡可以将microsec_clock替換成second_clock以秒為機關;
time_now = boost::posix_time::microsec_clock::universal_time();

// sleep 100毫秒;
boost::this_thread::sleep(boost::posix_time::millisec(100));

time_now1 = boost::posix_time::microsec_clock::universal_time();

time_elapse = time_now1 - time_now;

// 類似GetTickCount,隻是這邊得到的是2個時間的ticket值的差,以微秒為機關;
int ticks = time_elapse.ticks();

// 得到兩個時間間隔的秒數;
int sec = time_elapse.total_seconds();
           

繼續閱讀