如何计算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.
感谢。
答案 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的原因,尽管您可能没有这个选项。