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

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类型仅根据文档管理从UTC 1970年1月1日开始的日期:



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

所以我的问题是,有什么办法可以使从1970年之前的日期起几秒钟的时间差?

最佳答案

我建议使用C++ 11的std::chrono命名空间和 <chrono> 标准头以及其中的标准函数和类。

您可能还会考虑C标准中的difftime以及localtimemktime
至少有很多其他理由可以升级到C++11(如果可以的话,也可以升级到C++14)。近期有一些不错的免费软件编译器GCCClang/LLVM支持该标准(如果要使用GNU扩展和C++ 14,则可以使用-std=c++11-std=gnu++14进行编译)

顺便说一句,您的问题比您认为的要复杂得多。日历已更改。 Julian/Gregorian日历转换发生在20世纪的俄罗斯。我的已故母亲于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/

10-09 05:45
查看更多