C++ 不同时区中的Boost日志文件名

C++ 不同时区中的Boost日志文件名,c++,boost,C++,Boost,我目前在boost中有一个日志进程 初始化为 keywords::file_name = (my_file_str + %Y-%m-%d_%H.%5N.log).c_str(); 有没有办法更改datetime对象的时区?我想使用一个在美国/纽约下午5点滚动的时区,即EST-2EDT。是的,这是可能的,这里有一个生成美国/纽约时间戳的函数: #include <boost/date_time/local_time/local_time.hpp> #include <sstr

我目前在boost中有一个日志进程 初始化为

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

有没有办法更改datetime对象的时区?我想使用一个在美国/纽约下午5点滚动的时区,即EST-2EDT。

是的,这是可能的,这里有一个生成美国/纽约时间戳的函数:

#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();
}
#包括
#包括
std::字符串getNYCTimestamp(){
boost::posix_time::ptime pt=
boost::posix_time::microsec_clock::universal_time();
boost::本地时间::时区时间utc时区(
新功能::本地时间::波斯尼亚时区(“UTC”);
boost::local_time::local_date_time utc_time(pt,utc_区域);
boost::本地时间::时区(
新功能:本地时间:posix时区(“美国东部时间05:00:00EDT+01:00:00,M4.1.0/02:00:00,M10.5.0/02:00:00”);
boost::local_time::local_date_time纽约时间=utc_时间。本地时间位于(纽约地区);
auto-our_facet=new boost::gregorian::date_facet(“%Y-%m-%d”);
我们的方面->格式(“%Y-%m-%d”);
自动操作系统=std::ostringstream();
imbue(std::locale(std::locale::classic(),我们的方面));
boost::posix_time::time_duration t=nyc_time.time_of_day();

os我不能100%确定这是否足够(因为我不知道您的要求是什么),但这里是关于日志属性的讨论。在我看来,您可能可以添加一个调整为时区的辅助时间戳