gpt4 book ai didi

c++如何在考虑夏令时的情况下找到国外的时间?

转载 作者:可可西里 更新时间:2023-11-01 16:08:07 30 4
gpt4 key购买 nike

比如说,如果纽约时间是 13:00 (EST),那么新西兰时间是 06:00 (NZST)。如果新西兰进入夏令时,那么当纽约时间为 13:00(仍为美国东部标准时间)时,新西兰时间为 07:00(现在为 NZDT)。

我阅读了 boost 时间库,但在我看来,必须自己确定夏令时规则才能从“本地时间”的角度找出国外的时间。

例如

 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:\n "
<< 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 有一个名为 date_time_zonespec.csv 的时区数据库,位于 libs/date_time/data 中。 Flight Time Example在文档中显示了如何访问和使用它。该数据库不包含时区更改的历史记录。似乎也没有一个地方托管对此数据库的更新(除了 Boost 库本身)。

如果您需要准确、最新的时区数据,请查看 ICU Time Zone Classes流行的ICU IBM 的国际化库。如 Updating the Time Zone Data 中所述部分:

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 时区数据库源自 tz database现在由 ICANN 维护.

要在 C++ 程序中通过 http 下载文件,可以使用 libcurlcURLpp C++ 包装器。在您的操作系统上设置调度程序以定期下载最新的数据库可能会更容易。

正如评论中已经提到的那样,始终使用 UTC 进行存储和业务逻辑。仅出于显示/输入目的与本地时间相互转换。

关于c++如何在考虑夏令时的情况下找到国外的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8318024/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com