【发布时间】:2015-10-07 02:18:06
【问题描述】:
我想用我的简单程序做的是计算两个日期之间的秒差。
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 开始的日期:
由于历史原因,它通常实现为一个整数值,表示自 UTC 时间 1970 年 1 月 1 日 00:00 时起经过的秒数(即 unix 时间戳)。尽管库可以使用替代时间表示来实现这种类型。
我知道还有 Boost 库,但对我来说不是一个可用的解决方案。
所以我的问题是,有什么方法可以从 1970 年之前开始的日期获得秒数差异?
【问题讨论】:
-
你能改进你的标题吗?它没有以任何有用的方式描述您的问题。
-
计算机上 1900 年之前的日期的实际用例是什么?是某个非常老的人的生日,还是比这更糟…… 格里高利/儒略的转变发生在 20 世纪的俄罗斯。所以编辑你的问题给出背景和动机以及更多解释
-
您对 1970 年之前的日期或 1900 年之前的日期感兴趣吗?
-
@rwong:好多了。我希望能说服 OP 自己试一试,但是,无论如何,谢谢!
标签: c++ mktime time-t difftime