c++ How to find the time in foreign country taking into account daylight saving?
比如说,如果它是纽约(EST)的13:00,那么新西兰(NZST)的时间是06:00。
如果新西兰进入夏季,那么当它在纽约的13:00(仍然是美国东部时间)时,新西兰(现在是新西兰)的时间是07:00。
我读了加速时间库,但在我看来,我必须自己确定夏令时规则,以便从"本地时间"的角度找出国外的时间。
例如
1 2 3 4 5 6 7 8 | nyc_string ="EST-05:00:00EDT+01:00:00,M4.1.0/02:00:00,M10.5.0/02:00:00"; // above basically defines the daylight saving rule time_zone_ptr nyc_2(new posix_time_zone(nyc_string)); std::cout <<"The second zone is in daylight savings from: " << nyc_2->dst_local_start_time(2004) <<" through" << nyc_2->dst_local_end_time(2004) << std::endl; |
来源:http://www.boost.org/doc/libs/1_39_0/doc/html/date_time/examples.html
也许有一些我还没有意识到的东西? boost是否会使用任何跟踪夏令时规则的数据库? 我想知道是否有一种很好的方法可以将本地时间调整到c ++中的不同时区,考虑夏令时规则。如果我有一个例子,那就太棒了!
Boost.DateTime有一个名为
如果您需要准确,最新的时区数据,请查看IBM流行的ICU国际化库的ICU时区类。如更新时区数据部分所述:
The time zone data in ICU is generated from the industry-standard TZ
database using the tzcode
(http://source.icu-project.org/repos/icu/icu/trunk/source/tools/tzcode/
) tool.
The ICU data files with recent time zone data can be downloaded from
the update URL,
http://source.icu-project.org/repos/icu/data/trunk/tzdata/icunew .
ICU时区数据库源自ICANN现在维护的tz数据库。
要在C ++程序中通过http下载文件,可以使用libcurl或cURLpp C ++包装器。在操作系统上设置调度程序以定期下载最新数据库可能更容易。
正如评论中已经提到的,将UTC一致地用于存储和业务逻辑。仅转换为/从本地时间进行显示/输入。