使用带boost的dst将当前服务器时间转换为时区 如何获取Linux服务器的当前时间,并将其转换为Boost C++中的给定时区(例如MST-7)? 我想自动计算那天的节光时间
如果我运行以下代码,则不考虑dst:使用带boost的dst将当前服务器时间转换为时区 如何获取Linux服务器的当前时间,并将其转换为Boost C++中的给定时区(例如MST-7)? 我想自动计算那天的节光时间,c++,boost,timezone,dst,C++,Boost,Timezone,Dst,如果我运行以下代码,则不考虑dst: boost::posix_time::ptime currentTime = boost::posix_time::second_clock::local_time(); date today = day_clock::local_day(); time_zone_ptr phx_tz(new posix_time_zone("MST-07:00:00")); local_date_time phx_departure(currentTime, ph
boost::posix_time::ptime currentTime = boost::posix_time::second_clock::local_time();
date today = day_clock::local_day();
time_zone_ptr phx_tz(new posix_time_zone("MST-07:00:00"));
local_date_time phx_departure(currentTime, phx_tz);
您可以在时区定义中指定DST信息:
time_zone_ptr phx_tz(new posix_time_zone("MST-07MDT01:00:00,M3.2.0/02:00:00,M11.1.0/02:00:00"));
这个问题的真正答案是:不要 我将引用我的回答:
- 如果使用C++,请确保使用一个使用正确实现的库。这些包括,和。
- 请勿用于时区转换。虽然声称支持标准IANA(又名“zoneinfo”)标识符,但它却支持固定的偏移量,而不考虑每个分区可能有过的丰富变化历史。(此外,该文件已无法维护。)
此外,您真的不应该使用POSIX时区。他们有许多不足之处,应该加以劝阻。请参阅中有关POSIX时区的部分。相反,您应该使用正确的IANA/Olson时区标识符,对于美国山区时区(使用DST),该标识符应为
America/Denver
,对于亚利桑那州不使用DST的部分,该标识符应为America/Phoenix
。感谢您的重播。我正在考虑使用ICU图书馆而不是boost。你熟悉吗?我关心的是如何获得时区的自动更新。您知道通过linux更新zoneinfo目录是否足够,还是需要更新ICU库?ICU是否直接从/usr/share/zoneinfo加载时区?如果您不需要本地化,只需要tz转换,您最好使用cctz或hh的lib。不确定你的具体问题。阅读文档或尝试,或在此处提出新问题。