使用C计算时间段

时间:2008-11-29 15:44:14

标签: c time date

如何计算C(任何图书馆等)中2个日期之间的时间段?

程序应该将两个(本地)日期作为输入,并提供它们之间的持续时间作为输出。

例如,

startDate = OCT-09-1976 and endDate = OCT-09-2008 
should show a duration of 32 years. 

startDate = OCT-09-1976 and endDate = DEC-09-2008 
should show a duration of 32 years and 2 months.

感谢。

2 个答案:

答案 0 :(得分:3)

使用strptime

将日期转换为两个struct tm结构

Difftime为您提供两者之间的差异。

使用代码here将其转换为月份等(在C ++中,但唯一的C ++用于字符串格式化,易于更改)

编辑:正如评论员观察到的那样,避免了月份问题。有(GPL'd)代码 isodiff_from_secs可以转换成你想要的,如果你对它假设几个月有30天感到满意的话。请参阅Google codesearch以及标准here

的说明

执行完全正确的解决方案,考虑到实际天数之间的真实月份,这将非常复杂。这是你的问题所必需的吗?

答案 1 :(得分:1)

我最近使用Boost.Date_Time做了一些非常相似的事情,并将结果函数显示为C,但这当然需要使用C ++链接器。

实际上,这个例子还有一些不足之处 - 开始和结束日期是否总是在一个月的同一天?如果是这样,你可以忽略日期编号,最后减去月份和年份数字。

但是,如果你的日期可以在一个月的任何地方,那可能会有点棘手。请记住,并非所有月份都有相同的天数!

C difftime无法帮助您进行月计算,这就是我使用Boost的原因,尽管您可能没有这个选项。