我想获得DST在Linux下的转换时间,给予时区或TZ env。 我的方式是愚蠢的,给一年的开始,并尝试每一个小时,然后检查当地时间tm_isdst值来获得过渡时间。 有一些简单的方法来做到这一点?
有glibc的源代码,你可以在这里浏览: http : //sourceware.org/git/? p=glibc.git;a=tree;f=timezone
或者你可以在这里使用时区数据库: ftp : //ftp.iana.org/tz/releases/tzdata2012c.tar.gz
既然你没有给出具体的时区/位置,我不能查询并给你确切的信息给你。
你也可以使用boost_datetime 。
#include <iostream> #include <boost/date_time/local_time/local_time.hpp> using namespace boost::local_time; using namespace boost::posix_time; int main() { tz_database tz_db; tz_db.load_from_file("/path_to_boost/boost/libs/date_time/data/date_time_zonespec.csv"); time_zone_ptr zone = tz_db.time_zone_from_region("America/New_York"); ptime t1 = zone->dst_local_start_time(2013); ptime t2 = zone->dst_local_end_time(2013); std::cout << t1 << std::endl; std::cout << t2 << std::endl; }
一些相关的SO链接: c ++如何在夏令时考虑到国外的时间? 你如何获得特定日期的某个地点的时区(抵消)?
但正如RedX早些时候所说,政治可能会改变时区。 所以实际上你的原始解决方案具有自动更新底层操作系统的优势。 而且,您可以使用二分查找来改进现有的解决方案。