gpt4 book ai didi

c++ - 考虑 DST 获取时差

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:25 28 4
gpt4 key购买 nike

我正在使用 Boost.Date_time 来获取两个日期之间的时差。我希望代码在这些天也考虑夏令时的变化,并给我正确的时间间隔。

考虑这个例子。 2015 年 11 月 1 日,美国的 DST 将发生变化。在 2:00 时,时钟将拨回到 1:00。以下代码的输出没有反射(reflect)出这一点。它给出了 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 要求?

最佳答案

你应该使用本地时间:

Live On Coliru

#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";
}

打印:

period: [2015-Nov-01 00:00:00 EDT/2015-Nov-01 22:59:59.999999 EST]
duration: 24:00:00
seconds: 86400

关于c++ - 考虑 DST 获取时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31448352/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com