6

我想通过给定时区或 TZ 环境来获得 Linux 下 DST 的过渡时间。我的方法很愚蠢,给年初的时间然后每小时尝试一次,然后检查本地时间的 tm_isdst 值以获取过渡时间。有一些简单的方法可以做到这一点吗?

4

2 回答 2

1

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

或者您可以在此处使用时区数据库:ftp: //ftp.iana.org/tz/releases/tzdata2012c.tar.gz

由于您没有给出特定的时区/位置,因此我无法查找并为您提供确切的信息。

于 2013-01-04T23:44:35.630 回答
1

您也可以使用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 之前所说,政治可能会改变时区。因此,实际上您的原始解决方案具有使用底层操作系统自动更新的优势。此外,您可以使用二分搜索改进现有解决方案。

于 2013-01-12T02:56:30.063 回答