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作验证,结果是正确的。

诡异了……