gpt4 book ai didi

c++ - 如何强制 boost::posix_time 识别时区?

转载 作者:太空宇宙 更新时间:2023-11-04 11:54:18 27 4
gpt4 key购买 nike

我正在从 PostgreSQL 数据库中读取时间戳字段。时间戳列定义为:

my_timestamp TIMESTAMP WITH TIME ZONE DEFAULT NOW()

从数据库中读取时,我将其转换为这样的提升时间戳:

boost::posix_time::ptime pt( boost::posix_time::time_from_string( str ) );

问题似乎是 boost::posix_time::time_from_string() 忽略了时区。

例如:

database text string == "2013-05-30 00:27:04.8299-07"  // note -07 timezone
boost::posix_time::to_iso_extended_string(pt) == "2013-05-30T00:27:04.829900"

当我对生成的 ptime 对象进行算术运算时,时间恰好偏移了 7 小时。为了不丢失时区信息,我应该做些什么更好的事情?

最佳答案

我认为您应该使用处理时区的 boost::local_date_time。文档中有一个示例与您尝试执行的操作非常相似:http://www.boost.org/doc/libs/1_41_0/doc/html/date_time/examples.html#date_time.examples.seconds_since_epoch

编辑:Boost 支持特定格式的日期解析。 http://www.boost.org/doc/libs/1_40_0/doc/html/date_time/date_time_io.html#date_time.format_flags

string inp("2013-05-30 00:27:04.8299-07");
string format("%Y-%m-%d %H:%M:%S%F%Q");
date d;
d = parser.parse_date(inp,
format,
svp);
// d == 2013-05-30 00:27:04.8299-07

关于c++ - 如何强制 boost::posix_time 识别时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16832088/

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