gpt4 book ai didi

c++ - 如何用纪元前的 time_t 计算 C++ 中的时间差?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:02 25 4
gpt4 key购买 nike

我想用我的简单程序做的是计算两个日期之间的秒数差。

time_t referenceDate;
time_t dateNow = time(0);
struct tm referenceDateComponent = {0};
referenceDateComponent.tm_hour = 0;
referenceDateComponent.tm_min = 0;
referenceDateComponent.tm_sec = 0;
referenceDateComponent.tm_year = 89;
referenceDateComponent.tm_mon = 11;
referenceDateComponent.tm_mday = 31;
referenceDate = mktime(&referenceDateComponent);
long seconds = difftime(dateNow, referenceDate);

应用程序上面的代码运行良好,但如果尝试将 tm.year 设置为负数(以构建 1900 年之前的日期),mktime() 函数返回 -1

根据文档,我知道 time_t 类型仅管理从 1970 年 1 月 1 日开始的 UTC 日期:

For historical reasons, it is generally implemented as an integral value representing the number of seconds elapsed since 00:00 hours, Jan 1, 1970 UTC (i.e., a unix timestamp). Although libraries may implement this type using alternative time representations.

我知道还有 Boost 库,但这对我来说不是可用的解决方案。

所以我的问题是,有什么方法可以从 1970 年之前开始的日期中获取秒数差异?

最佳答案

我推荐使用 C++11 std::chrono命名空间和 <chrono> 标准 header 及其中的标准函数和类。

您也可以考虑 difftime来自 C 标准和 localtime & mktime

还有很多其他理由可以升级到 C++11 至少(或 C++14 如果可以的话)。最近几个不错的免费软件编译器GCCClang/LLVM支持该标准(编译 -std=c++11-std=gnu++14 如果你想要 GNU 扩展和 C++14)

顺便说一句,你的问题比你想象的要复杂得多。日历已更改。 Julian/Gregorian日历转换发生在二十世纪的俄罗斯。我已故的母亲于 1919 年出生在移民和内战期间的一个俄罗斯村庄,当时该村庄的法律制度存在争议(俄罗斯革命并未立即发生)。她有一些论文提到 1919 年 12 月 13 日,而其他论文提到 1919 年 12 月 26 日,指的是两个不同日历中的同一日期。您的软件将如何处理?我什至不确定时区是否足够!

顺便说一句,我不确定 Boost 或 C++11 <chrono>可以可靠地处理此类日历问题。

nwp评论中提到一个很好computerphile video: Problem with Time & Timezones .

关于c++ - 如何用纪元前的 time_t 计算 C++ 中的时间差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31474486/

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