使用带boost的dst将当前服务器时间转换为时区 如何获取Linux服务器的当前时间,并将其转换为Boost C++中的给定时区(例如MST-7)? 我想自动计算那天的节光时间

使用带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

如果我运行以下代码,则不考虑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, 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”)标识符,但它却支持固定的偏移量,而不考虑每个分区可能有过的丰富变化历史。(此外,该文件已无法维护。)
考虑到Boost时区文件的最后一次提交日期是2011年6月24日,因此即使他们的API和实现设计糟糕,它也没有实现自己的承诺,因为它不知道过去5年中的时区变化


此外,您真的不应该使用POSIX时区。他们有许多不足之处,应该加以劝阻。请参阅中有关POSIX时区的部分。相反,您应该使用正确的IANA/Olson时区标识符,对于美国山区时区(使用DST),该标识符应为
America/Denver
,对于亚利桑那州不使用DST的部分,该标识符应为
America/Phoenix

感谢您的重播。我正在考虑使用ICU图书馆而不是boost。你熟悉吗?我关心的是如何获得时区的自动更新。您知道通过linux更新zoneinfo目录是否足够,还是需要更新ICU库?ICU是否直接从/usr/share/zoneinfo加载时区?如果您不需要本地化,只需要tz转换,您最好使用cctz或hh的lib。不确定你的具体问题。阅读文档或尝试,或在此处提出新问题。