2010-06-17 73 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