2015-12-18 24 views
1

我目前在升壓 日誌的過程,與升壓日誌文件名稱在不同的時區

keywords::file_name = (my_file_str + %Y-%m-%d_%H.%5N.log).c_str(); 

初始化有什麼辦法來改變DateTime對象的時區?我想使用美國/紐約下午5點推出的時區,即EST-2EDT。

回答

2

是的,這是可能的,這裏是一個函數發生在美國/紐約時間戳:

#include <boost/date_time/local_time/local_time.hpp> 
#include <sstream> 

std::string getNYCTimestamp() { 
    boost::posix_time::ptime pt = 
     boost::posix_time::microsec_clock::universal_time(); 
    boost::local_time::time_zone_ptr utc_zone(
     new boost::local_time::posix_time_zone("UTC")); 
    boost::local_time::local_date_time utc_time(pt, utc_zone); 

    boost::local_time::time_zone_ptr nyc_zone(
     new boost::local_time::posix_time_zone("EST-05:00:00EDT+01:00:00,M4.1.0/02:00:00,M10.5.0/02:00:00")); 
    boost::local_time::local_date_time nyc_time = utc_time.local_time_in(nyc_zone); 

    auto our_facet = new boost::gregorian::date_facet("%Y-%m-%d"); 
    our_facet->format("%Y-%m-%d"); 
    auto os = std::ostringstream(); 
    os.imbue(std::locale(std::locale::classic(), our_facet)); 

    boost::posix_time::time_duration t = nyc_time.time_of_day(); 
    os << nyc_time.date() << "_" 
     << std::setw(2) << std::setfill('0') << t.hours() << '-' 
     << std::setw(2) << std::setfill('0') << t.minutes() << '-' 
     << std::setw(2) << std::setfill('0') << t.seconds() << '.' 
     << std::setw(6) << std::setfill('0') << t.fractional_seconds(); 
    return os.str(); 
} 

。注意, 「%Y-%間%D_%H.%5N」 是最有可能錯誤的,因爲:

  1. 它省略分秒
  2. 它試圖適應納秒(9位)轉換成5個符號。