当前tz的夏令时

时间:2010-06-17 08:03:12

标签: c++ linux boost dst

在我的c ++软件中,我在某些部分和当地时间都使用过Boost。 好的,现在我的问题是检查我的机器是否处于活动状态是否正常。

使用以下代码部分,我只能知道与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();

我认为布尔函数has_dst()可以帮助,对吗?

我的系统是Debian GNU / Linux。

由于

2 个答案:

答案 0 :(得分:2)

查看time.h / ctime

中的普通C函数

localtime将返回struct tm *

struct tm的最后一个字段是一个标志,告诉它是否在DST之下。

答案 1 :(得分: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";