2

私のC ++ソフトウェアでは、Boostを一部の部分と現地時間で使用しました。OK、今私の問題は、私のマシンで DST がアクティブかどうかを確認することです。

コードの次の部分では、UTC 時間との違いしかわかりません。私の場合、DSTがアクティブであるため、差は2時間です

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はstructtm*を返します

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 に答える