gpt4 book ai didi

c++ - Boost - 使用时间戳格式化亚秒精度时间

转载 作者:行者123 更新时间:2023-11-30 02:07:39 24 4
gpt4 key购买 nike

我需要以毫秒精度获得格式良好的时间戳(略微修改的 ISO 8601)。

示例日期如下所示:2011-09-28 13:11:15.237-08:00
格式也应该能够被覆盖。

我一直在研究 boost::posix_time::microsec_clock::local_time()boost::posix_time::time_facet除了涉及时间戳时,它工作得很好。
由于 posix 时间不包含时区信息,这是不可能的(我猜)

那么,还有什么我可以使用的具有毫秒精度的包含时区信息的东西,或者我可以让 time_facet 使用时区吗?

也许我应该始终使用 UTC?

谢谢

最佳答案

看看 boost::local_time::local_date_time 类。您可以指定一个时区并使用本地微秒时钟对其进行初始化,如

boost::local_time::local_date_time  my_ldt(boost::local_time::local_microsec_clock::local_time(new boost::local_time::posix_time_zone("EST-5EDT,M4.1.0,M10.5.0")));

然后您应该能够使用这些方面来格式化为字符串。

编辑:完整示例:

#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>

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

int main(void)
{
boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
boost::posix_time::ptime utc = boost::posix_time::second_clock::universal_time();

boost::posix_time::time_duration tz_offset = (now - utc);

std::stringstream ss;
boost::local_time::local_time_facet* output_facet = new boost::local_time::local_time_facet();
ss.imbue(std::locale(std::locale::classic(), output_facet));

output_facet->format("%H:%M:%S");
ss.str("");
ss << tz_offset;

boost::local_time::time_zone_ptr zone(new boost::local_time::posix_time_zone(ss.str().c_str()));
boost::local_time::local_date_time ldt = boost::local_time::local_microsec_clock::local_time(zone);
boost::local_time::local_time_facet* output_facet = new boost::local_time::local_time_facet();
ss.imbue(std::locale(std::locale::classic(), output_facet));
output_facet->format("%Y-%m-%d %H:%M:%S%f%Q");
ss.str("");
ss << ldt;
std::cout << ss.str() << std::endl; // "2004-02-29 12:34:56.000789-05:00"

std::cout << "Press return to exit" << std::endl;
std::string wait_for_line;
std::getline(std::cin, wait_for_line);

return (0);
}

关于c++ - Boost - 使用时间戳格式化亚秒精度时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7589170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com