1 #include <boost/date_time/posix_time/posix_time.hpp>
 2 #include <boost/date_time/gregorian/gregorian.hpp>
 3 #include <iostream>
 4 #include <stdint.h>
 5 
 6 int main()
 7 {
 8     using namespace boost::posix_time;
 9     using namespace boost::gregorian;
10 
11     ptime ptNow( second_clock::local_time() );
12     std::cout << to_simple_string( ptNow ) << std::endl;
13 
14     tm tm1 = to_tm( ptNow );
15     time_t tt = mktime( &tm1 );
16 
17     tm* tm2 = localtime( &tt );
18 
19     ptime ptt = from_time_t( tt );
20     ptime pttm = ptime_from_tm( tm1 );
21     std::cout << to_simple_string( ptt ) << "\n" << to_simple_string( pttm ) << std::endl;
22 
23     return 0;
24 }

输出结果:
2009-Sep-10 15:24:10
2009-Sep-10 07:24:10
2009-Sep-10 15:24:10

第一个为ptime获得的当前时间的输出。
第三个为ptime转为tm,再tm转成ptime的输出
第二个为那个tm转成time_t,time_t再转回ptime的输出。

从结果看,第二个输出的时间很诡异上居然差了8个小时,难道是UTC时间?但boost doc那里没有这个说明,只是说用from_time_t可以将time_t转成ptime。程序中间将time_t用localtime转回tm作验证,结果是正确的。

诡异了……