是否有简单的方法在C/ c++中获得Linux下的夏令时转换时间?



我想获得夏令时的过渡时间在Linux下提供时区或TZ环境。我的方法很愚蠢,给出一年的开始,每小时尝试一次,然后检查当地时间的tm_isdst值以获得过渡时间。有什么简单的方法吗?

在glibc中有源代码,你可以在这里浏览:http://sourceware.org/git/?p=glibc.git; =树;f =时区

或者你可以在这里使用时区数据库: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链接:如何在国外找到考虑到夏令时的时间?如何获得特定日期位置的时区(偏移量)?

但正如RedX之前所说,政治可能会改变时区。因此,实际上您的原始解决方案具有与底层操作系统自动更新的优势。此外,您还可以通过使用二进制搜索来改进现有的解决方案。

最新更新