C++ 考虑DST时获得时差

C++ 考虑DST时获得时差,c++,boost,C++,Boost,我使用Boost.Date\u time获取两个日期之间的时差。我希望代码在这几天也能考虑DST改变,并给我正确的间隔。 考虑这个例子。2015年11月1日,美国的DST将发生变化。2:00时,时钟将移回1:00。下面代码的输出没有反映这一点。相差23小时 date d1(2015, 11, 1); ptime nov1_00(d1, hours(0)); ptime nov1_23(d1, hours(23)); seconds = (nov1_23 - nov1_00).total_seco

我使用Boost.Date\u time获取两个日期之间的时差。我希望代码在这几天也能考虑DST改变,并给我正确的间隔。 考虑这个例子。2015年11月1日,美国的DST将发生变化。2:00时,时钟将移回1:00。下面代码的输出没有反映这一点。相差23小时

date d1(2015, 11, 1);
ptime nov1_00(d1, hours(0));
ptime nov1_23(d1, hours(23));
seconds = (nov1_23 - nov1_00).total_seconds();
输出:

2015-Nov-01 00:00:00. 2015-Nov-01 23:00:00. Seconds: 82800

boost中有没有办法指定此场景中的DST要求?

您应该使用本地时间:

#include <boost/date_time/local_time/local_time.hpp>
#include <boost/date_time/local_time/local_date_time.hpp>
#include <boost/date_time/local_time/local_time_io.hpp>
#include <boost/make_shared.hpp>
#include <iostream>

int main() {
    namespace lt = boost::local_time;
    namespace pt = boost::posix_time;
    using   date = boost::gregorian::date;

    lt::tz_database db;
    db.load_from_file("/home/sehe/custom/boost/libs/date_time/data/date_time_zonespec.csv");

    //for (auto region : db.region_list()) std::cout << region << "\n";

    auto NY = db.time_zone_from_region("America/New_York");

    date const d1(2015, 11, 1);

    lt::local_date_time nov1_00(d1, pt::hours(0),  NY, true);
    lt::local_date_time nov1_23(d1, pt::hours(23), NY, false);

    lt::local_time_period period(nov1_00, nov1_23);

    std::cout << "period: "   << period          << "\n";
    std::cout << "duration: " << period.length() << "\n";

    // if you insist:
    auto seconds = (nov1_23 - nov1_00).total_seconds();
    std::cout << "seconds: " << seconds << "\n";
}

太简单了,请注意,您从未告诉它您使用的是本地时间而不是UTC。使用。配合一些体操,制作样品
period: [2015-Nov-01 00:00:00 EDT/2015-Nov-01 22:59:59.999999 EST]
duration: 24:00:00
seconds: 86400