如何使boost :: log :: keywords :: file_name使用UTC时间?

时间:2016-02-09 04:19:25

标签: c++ boost

当使用boost :: log时,我可以使用以下命令使文件名使用时间戳作为名称的一部分,但我真的希望那个时间是UTC时间而不是本地时间。怎么可以实现呢?

boost::log::add_file_log(
    boost::log::keywords::file_name = "Log-%Y%m%d-%H00.log",

我已经知道如何使file_name中的时间戳为UTC,但我还没有弄清楚如何制作file_name UTC。

先谢谢 布鲁斯

3 个答案:

答案 0 :(得分:1)

除非您要修补Boost.Log,否则无法在文件名中使用UTC时间戳。

答案 1 :(得分:0)

  

我真的希望那个时间是UTC时间而不是当地时间

UTC时间“大约1秒钟,经度0°的平均太阳时”;见维基百科。

CST(这里是德克萨斯州)(基本上)与UTC不同6小时......您当地的时间可能会有所不同。

Google报告“协调世界时比中部时间早6个小时”。

我认为你可以通过知道偏移来从当地时间计算UTC。

我的尝试是:

std::string filename;
{  
   std::stringstream ss; 
   ss << "Log-" << year << month << day 
      << "-" << hour << "00.log";
   filename = ss.str();
}

我发现了这个:

std::time_t t = std::time(nullptr);
std::cout << "UTC:   " << std::put_time(std::gmtime(&t), "%c %Z");
std::cout << "local: " << std::put_time(std::localtime(&t), "%c %Z");

结合这两个?好运

答案 2 :(得分:0)

你可以这样做(当地时间)

std::time_t t = std::time(nullptr);
std::stringstream filename;
filename << "Log-" << std::put_time(std::localtime(&t), "%Y%m%d-%H00") << ".log";
boost::log::add_file_log(
    boost::log::keywords::file_name = filename.str(), .....