0

如何计算 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.

谢谢。

4

2 回答 2

3

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

Difftime以秒为单位为您提供两者之间的差异。

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

编辑:正如评论员所观察到的,这避免了月份问题。如果您对它假设月份有 30 天感到满意,那么 isodiff_from_secs 的(GPL'd)代码可以转换为您想要的。在此处查看Google 代码搜索和标准说明

做一个完全正确的解决方案,考虑到实际日子之间的真实月份,将非常复杂。这是您的问题所必需的吗?

于 2008-11-29T15:54:01.737 回答
1

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

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

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

C difftime不能帮助您计算月份,这就是我使用 Boost 的原因,尽管您可能没有该选项。

于 2008-11-29T15:50:49.947 回答