2010-06-17 23 views
2

我已經在某些部分和當地時間使用了Boost。 好的,現在我的問題是如果在我的機器上有活動或不是DST,請檢查。在我的C++軟件中使用當前tz的夏令時

隨着代碼的後續部分,我只能知道與UTC時間的差異。在我的情況差爲2個小時,因爲是活躍的DST

ptime tLoc = second_clock::local_time(); 
ptime tUTC = second_clock::universal_time(); 
time_duration tDiff = tUTC - tLoc; 
local_time_zone = tDiff.hours(); 

我認爲布爾funcion has_dst()可以幫助,對不對?

我的系統是Debian GNU/Linux。

感謝

回答

2

看在time.h中/的ctime簡單的C函數

localtime會返回一個結構TM *

struct tm作爲其最後一個字段一個標誌,告訴如果是DST還是下不。

+0

是的,與tm_isdst一切正常,但我可以直接用Boost做到這一點,而不使用time.h? – spam2 2010-06-17 08:35:01

1

我相信你正在尋找的功能是local_date_time_base<>::is_dst()。 Boost.DateTime中的所有date_time數據類型都來自local_date_time_base<>。下面應該給你所需的結果:

namespace lt = boost::local_time; 

// for example, use central time zone 
lt::time_zone_ptr zone(new lt::posix_time_zone(
    "CST-06:00:00CDT+01:00:00,M3.2.0/02:00:00,M11.1.0/02:00:00")); 
lt::local_date_time tloc = lt::local_sec_clock::local_time(zone); 

std::cout << "I'm " << (tloc.is_dst() ? "" : "not ") << "in DST"; 
+1

好的,但您必須設置posix_time_zone。我不知道應用程序將在哪裏運行。我可以使用Boost從系統中檢索時區? – spam2 2010-06-28 13:12:19

+1

如果你不帶任何參數調用'local_time()'函數:'tloc = lt :: local_sec_clock :: local_time();'它會根據本地系統設置返回當前本地時間。 – hkaiser 2010-06-28 20:02:52