【问题标题】:C++ Date Algorithm [closed]C ++日期算法[关闭]
【发布时间】:2014-11-19 16:48:45
【问题描述】:

我一直很难解决这个问题,也许有人可以提供帮助或提供建议。所以这就是问题所在。我将月、日和年存储为 int。我希望能够将固定天数添加到日期并获得新日期。 我该怎么做呢?

【问题讨论】:

标签: c++ algorithm date


【解决方案1】:

假设您这样做是为了学习(那里有很多日期库)...您遇到的确切问题是什么?该算法确实不是很复杂,听起来像:

  1. 将天数添加到日期的day 字段中
  2. 如果现在的天数大于允许的最大值(例如,您的日期类似于april 134, 2014),则随着月的天数减少天数并增加月数:例如四月有 30 天,所以日期变为 may 104 2014
  3. 重复步骤 2,直到该月的天数正常(june 73july 43august 12

棘手的部分是

  1. 2 月的天数取决于年份,有一条奇怪的规则(year%4==0 && (year%100!=0 || year%400==0) 为 29,否则为 28)。
  2. 当增加月份时,您可能会超过 12 月,在这种情况下,请返回到 1 月但增加年份

这不是最快的方法(需要您循环数月),但实施起来并不难。

【讨论】:

  • 是的,谢谢,我也是这么想的。我正在使用 time.h 并且似乎无法找到或使用任何可以执行此操作的函数。所以我想它必须这样做。我会试试看能不能让它发挥作用。
  • 如果你使用<time.h> 问题很简单。函数mktime 给定日/月/年将为您提供自 1970 年 1 月 1 日以来的秒数:将天数乘以 86400(60*60*24 ... 一天中的秒数) ) 然后调用localtime 转换回具有日/月/年的结构。
  • 什么,你能做到!?这是惊人的! :) 我刚刚完成了嵌套逻辑的计算,以添加天数来获得一个新的日期,就像你建议的那样,它可以工作。我将尝试这样做。有什么 C++/C 书籍推荐吗?
【解决方案2】:

使用提升日期时间:

date d1(2014, 9, 25);
date_duration dd(10);
date d2 = d1 + dd;

这会计算 2014 年 9 月 25 日之后 10 天的日期。我认为没有比这更好的了。

【讨论】:

    猜你喜欢
    • 2022-06-14
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多