将UTC毫秒转换为人类可读日期时间



我很难弄清楚如何使用boost::date_time预处理转换。我想将从Unix epoch(1970年1月1日00:00)测量的毫秒值转换为人类可读的字符串,比如2/13/2012 15:20:11是理想的。

我尝试了一些我看到的std C++/boost建议,但还没有成功。这是我使用的代码:

    long long ticksFromEpoch = 1329117220501;
    std::time_t tt = static_cast<time_t>(ticksFromEpoch);
    boost::posix_time::ptime dt = boost::posix_time::from_time_t(tt);
    // Create a time_zone_ptr for the desired time zone and use it to create a local_date_time
    boost::local_time::time_zone_ptr zone(new boost::local_time::posix_time_zone("UTC"));
    boost::local_time::local_date_time dt_with_zone(dt, zone);
    std::stringstream strm;
    strm.imbue(std::locale(std::cout.getloc(), new boost::local_time::local_time_facet("%Y-%m-%d %H:%M:%S"))); // 15:14
    strm << dt_with_zone;
    // Print the stream's content to the console
    std::cout << strm.str() << std::endl;

输出为:2032-07-01 20:20:37,这显然是不正确的。我怀疑我没有正确地构造ticksFromEpoch变量,但我不确定为什么。有人能给我指正确的方向吗?非常感谢您的帮助!!

time_t通常是秒,因为";"纪元";,而不是毫秒。如果你不在乎毫秒,你应该能够做到这一点:

std::time_t tt = static_cast<time_t>(ticksFromEpoch/1000)

如果你真的关心毫秒,你可以在最后把它们加回来(对于凌晨12:00:00.001这样的时间来说,这很难正确)

否则你需要走另一条路。你可能需要使用这样的东西:(未经测试)

boost::posix_time::ptime t2(
  boost::gregorian::date(1970,boost::date_time::Jan,1),  //The epoch
  boost::posix_time::seconds( ticksFromEpoch / 1000 ) + // Number of seconds
  boost::posix_time::milliseconds( ticksFromEpoch % 1000)  // And the micros too.
  );

相关内容

  • 没有找到相关文章

最新更新