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