【发布时间】:2019-07-16 10:22:54
【问题描述】:
我有一个 double 表示自 1970 年 1 月 1 日午夜(本地时区)以来的天数和一个表示时区的字符串。我想将这些转换为 日期::分区时间 使用 Howard Hinnant 的日期和时区库。
背景是我需要将日期时间转换为双精度数以在分析库中使用。我还将在本地或用户指定的时区从 excel 接收日期时间作为双精度。
这是我的一次尝试
using namespace date;
using namespace std::chrono;
typedef date::zoned_time<std::chrono::seconds> datetime;
const double UNIX_MINUS_EXCEL_EPOCH = 25569.0;
const double SECONDS_PER_DAY = 24.0 * 60.0 * 60.0;
datetime timePointFromDouble(double x)
{
double seconds = (x - UNIX_MINUS_EXCEL_EPOCH) * SECONDS_PER_DAY;
system_clock::duration d = duration_cast<system_clock::duration>(duration<double>(seconds));
system_clock::time_point t = system_clock::time_point(d);
auto xx = make_zoned("America/Chicago", t);
return xx;
}
由于 make_zoned 的结果类型错误,它无法编译。另外,由于闰秒和夏令时更改的日子,我不相信它将以天为单位的输入时间正确映射到输出日期时间。
【问题讨论】: