2

在我的 c++ 软件中,我在某些部分和本地时间都使用了 Boost。好的,现在我的问题是检查我的机器是否激活了 DST。

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

谢谢

4

2 回答 2

2

查看 time.h/ctime 中的普通 C 函数

localtime将返回一个 struct tm*

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

于 2010-06-17T08:10:54.017 回答
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";
于 2010-06-19T12:24:07.580 回答