我想用我的简单程序来计算两个日期之间的秒数差。
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以及localtime和mktime
至少有很多其他理由可以升级到C++11(如果可以的话,也可以升级到C++14)。近期有一些不错的免费软件编译器GCC和Clang/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/