對一個老問題的新信息:
有一個新的開源timezone library將完全解析當地的IANA database的副本(包括所有的歷史數據,甚至閏秒)。 C++ 11或C++ 14編譯器是必需的。您可以隨時使用它來查找任何時區的詳細信息。上面的鏈接中包含有關該庫的詳細信息。
一個例子程序是:
#include "tz.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono;
auto zone = locate_zone("America/Los_Angeles");
auto tp = system_clock::now();
auto info = zone->get_info(tp);
std::cout << "Information for " << zone->name() << " at " << tp << " UTC is:\n"
<< info << '\n';
tp = sys_days{nov/7/2014} + 53min;
info = zone->get_info(tp);
std::cout << "Information for " << zone->name() << " at " << tp << " UTC is:\n"
<< info << '\n';
}
這只是對我輸出:
Information for America/Los_Angeles at 2015-07-18 19:34:30.112820 UTC is:
2015-03-08 10:00:00
2015-11-01 09:00:00
-07:00:00
01:00
PDT
Information for America/Los_Angeles at 2014-11-07 00:53:00.000000 UTC is:
2014-11-02 09:00:00
2015-03-08 10:00:00
-08:00:00
00:00
PST
該輸出解釋如下:
的一天,我在回答這個問題,「America/Los_Angeles」的UTC偏移量爲-7小時,時區縮寫爲PDT。這距離該地區的「標準時間」1小時。此偏移和縮寫至少在UTC時間點的這個範圍內有效:[2015-03-08 10:00:00,2015-11-01 09:00:00]。
問這個問題的那一天,「America/Los_Angeles」的UTC偏移量是-8小時,時區的縮寫是PST。這並沒有抵消該地區的「標準時間」。此偏移量和縮寫至少在UTC時間點的這個範圍內有效:[2014-11-02 09:00:00,2015-03-08 10:00:00)。
這是一個github project,拉請求,以幫助它移植到儘可能多的C++ 11月14日平臺,實際是受歡迎的。
這裏的問題是[Boost的時區文件](https://github.com/boostorg/date_time/blob/master/data/date_time_zonespec.csv)嚴重過時。當它*是*準確時,它只對*當前*區域規則準確。它像POSIX區域一樣平坦。 [實時時區數據庫](http://www.iana.org/time-zones)包括時區規則隨時間變化的豐富歷史。 – 2014-11-07 16:50:54