c++ - 没有外部库的 C++ Int 到任何日期
问题描述
我需要将一些转换integers
为date
. 首先,我确实知道 Boost::Gregorian 库,但我不能使用它,因为它不能用 Clang 编译,这是我的应用程序获得最佳性能的地方。
我正在解析原始数据库文件,因此性能很重要,因为转换将发生数十万次以表示生日、时间戳、约会时间等。
根据我正在解析的数据库,我有几个不同的起源日期。我使用的原始日期是:
System 1: 1706-02-24
System 2: 1840-01-01
我以这种方式尝试过,但是timeinfo2
当我尝试将其打印出来时,我得到了一个 null 错误:
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
解决方案
这是一个公共领域算法列表,这些算法模拟了 Unix 时间和预测的公历数百万年的时间向后和向前。 它们非常高效(无迭代、最少的分支、最少的缓存抖动)。
您可以使用这些算法编写自己的日期库,以正确处理 1970 年之前的日期。这些也是构成Howard Hinnant<chrono>
库的 C++20 预览版基础的相同算法。
推荐阅读
- c - C 中的函数指针是如何工作的?- 具体例子
- python - Selenium (Python):getAttribute('value') 无法从文本输入中获取文本
- react-google-maps - react-google-maps:如何在父组件中使用 fitBounds API
- r - 为什么我的 R 箱线图中的变量不能反映我的实际数据?
- javascript - Chrome 中的 ES6 模块
- c++ - 在测试中使用部分初始化的对象
- php - 带有 iis 的服务器中的路由问题
- javascript - IE 和 Firefox 渲染不正确,但在 Chrome、Safari 和 Chromium 浏览器中不正确
- vim - 在 vim 中打开与模式匹配的所有折叠
- excel - (Workbooks.Open) 不像正常打开那样工作