【发布时间】:2020-02-24 00:23:49
【问题描述】:
我需要将一些integers 转换为date。首先,我确实知道 Boost::Gregorian 库,但我不能使用它,因为它不能用 Clang 编译,这是我的应用程序获得最佳性能的地方。
我正在解析原始数据库文件,因此性能很重要,因为转换将发生数十万次以表示生日、时间戳、约会时间等。
根据我正在解析的数据库,我有几个不同的原始日期。我使用的原始日期是:
System 1: 1706-02-24
System 2: 1840-01-01
我尝试过这种方式,但是当我尝试将其打印出来时出现timeinfo2 为空的错误:
time_t rawtime;
struct tm* timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
timeinfo->tm_year = 1706 - 1900;
timeinfo->tm_mon = 2 - 1;
timeinfo->tm_mday = 24;
timeinfo->tm_mday += 98040; // days since origin
time_t newtime;
struct tm* timeinfo2;
newtime = mktime(timeinfo);
timeinfo2 = localtime(&newtime);
结果应该是:1968-08-12
【问题讨论】:
-
不是C次,为什么不是C++?
-
chrono是否处理 1970 年之前的日期?抱歉,如果这是一个愚蠢的问题,我是 C++ 新手,并且引用的是 1970 年的日期。 -
chrono是疯狂的多才多艺。 What epoch do you want to use? -
@user4581301 测试来自该链接的代码使我的函数
sys_dates、cast_time和utc_time由于某种原因未定义。我在 MSVS2019 中使用 C++17。我在这里看到了参考:en.cppreference.com/w/cpp/chrono/year_month_day/operator_days,但这似乎不在我与 Microsoft 的库中。不确定这是否仅适用于 unix,仍在解决中 -
抱歉。我只是说这个链接是一种强化,你可以在你的时代疯狂。底部的代码是一种先发制人的打击。它演示了如何使用即将发布的 C++ 标准修订版中的功能。现在要使用该代码,您需要使用 Mr. Hinnant's Date library,这是 Chrono 的 C++2a 扩展的原型。
标签: c++ date gregorian-calendar