说,如果是纽约(EST)的13:00,那么新西兰(NZST)的时间是06:00。 如果新西兰进入夏季,那么当它在纽约时间13:00(仍然是美国东部时间)时,新西兰(现在是新西兰)的时间是07:00。
我读了加速时间库,但在我看来,我必须自己确定夏令时规则,以便从“当地时间”的角度找出国外的时间。
e.g。
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 ++中的不同时区,考虑夏令时规则。如果我能有一个例子,那就太棒了!
答案 0 :(得分:8)
Boost.DateTime在date_time_zonespec.csv
中有一个名为libs/date_time/data
的时区数据库。文档中的Flight Time Example显示了如何访问和使用它。此数据库不包含时区更改的历史记录。似乎还没有托管此数据库更新的地方(除了Boost库本身)。
如果您需要准确,最新的时区数据,请查看IBM流行的ICU Time Zone Classes国际化库的ICU。正如Updating the Time Zone Data部分所述:
ICU中的时区数据来自行业标准TZ 数据库使用tzcode (http://source.icu-project.org/repos/icu/icu/trunk/source/tools/tzcode/ )工具。 可以从中下载具有最近时区数据的ICU数据文件 更新网址, http://source.icu-project.org/repos/icu/data/trunk/tzdata/icunew。
ICU时区数据库源自tz database现在维护的ICANN。
要在C ++程序中通过http下载文件,您可以使用libcurl或cURLpp C ++包装器。在您的操作系统上设置调度程序以定期下载最新数据库可能更容易。
正如评论中已经提到的,将UTC 始终如一用于存储和业务逻辑。仅转换为/来自本地时间以进行显示/输入。