【问题标题】:Calculate time period using C使用 C 计算时间段
【发布时间】:2008-11-29 15:44:14
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: c time date


    【解决方案1】:

    strptime将日期转换成两个struct tm结构

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

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

    编辑:正如评论员所观察到的,这避免了月份问题。有(GPL'd)代码 isodiff_from_secs 可以转换为你想做的事,如果你对它假设月份有 30 天感到满意的话。见Google codesearch和标准描述here

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

    【讨论】:

    • 请注意,您链接到的示例回避了仅通过天数和年数计算月数的问题。
    • 是的。用另一个链接更新
    • 我只是好奇地看到了 C 版本,假设月份中的天数是正确的,等等。我在 Groovy/Java 中使用优秀的 Joda time API 做了这件事:@987654326 @ 这是 Groovy/Java 代码:gist.github.com/29050
    • 我同意这个方法。但请注意,strptime 仅在严格定义输入格式时才有效。如果您想访问更多输入格式,请查看 GNU 日期代码(在 GNU coreutils 中,gnu.org/software/coreutils)。你会发现很多想法。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 2019-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多