我試圖將UTC時間轉換爲自定義時區。我在這裏和那裏讀了很多關於它的問題,但他們似乎都做了相反的事情,或者在無法設置時區的地方使用時間調整器。到目前爲止,在這裏我所能夠做到的:將UTC時間轉換爲帶有提升的自定義時區
boost::local_time::time_zone_ptr time_zone(new boost::local_time::posix_time_zone("EST5EDT,M3.2.0,M11.1.0"));
boost::posix_time::ptime const now(boost::gregorian::date(2004,11,5), boost::posix_time::hours(10));
boost::local_time::local_date_time const ny(now, time_zone);
//
ny.utc_time().time_of_day(); // Expected: 10:00 Actual: 10:00
ny.local_time().time_of_day(); // Expected: 04:00 Actual: 16:00
我想ny.local_time()來展會上04:00,因爲當UTC時間爲10:00,它在紐約的4:00。
任何人都可以提出正確的方法嗎?
你真的應該避免POSIX時區。查看[時區標記wiki](http://stackoverflow.com/tags/timezone/info),其中有一個關於POSIX的部分。您應該改用IANA/Olson時區,如「America/New_York」。 Boost *有*支持這些,除了他們使用[硬編碼列表](https://github.com/boostorg/date_time/blob/master/data/date_time_zonespec.csv) - 這是過時的,並刪除所有歷史。如果你想做的對,請考慮使用[ICU](http://site.icu-project.org/)。 – 2014-10-22 17:26:13