首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提升不同时区中的日志文件名

提升不同时区中的日志文件名
EN

Stack Overflow用户
提问于 2015-12-18 00:56:02
回答 2查看 205关注 0票数 1

我目前在boost中有一个日志进程,它是用

代码语言:javascript
复制
 keywords::file_name = (my_file_str + %Y-%m-%d_%H.%5N.log).c_str();

有任何方法来更改datetime对象的时区吗?我想使用一个在美国/纽约下午5点滚动的时区,即EST-2美国东部时间。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-16 11:31:40

是的,这是可能的,这里有一个在US/NY中生成时间戳的函数:

代码语言:javascript
复制
#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-%m-%d_%H.%5N“很可能是错误的,因为:

  1. 它省略了几分钟和几秒
  2. 它试图将纳秒(9位数)放入5个符号中。
票数 2
EN

Stack Overflow用户

发布于 2016-09-18 13:22:42

我不确定这是否足够(因为我不知道您的需求是什么),但是这里:http://boost-log.sourceforge.net/libs/log/doc/html/log/tutorial/attributes.html是对日志属性的讨论。在我看来,您可能可以添加一个调整时区的次要时间戳。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34346941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档