【问题标题】:Find the date in N days by now现在找到 N 天后的日期
【发布时间】:2011-08-01 17:37:16
【问题描述】:

我正在寻找一种算法来查找未来一天的日期,即从今天起的 N 天。

我的主要问题是如何处理中间的闰年。

【问题讨论】:

  • 您使用什么语言或框架?

标签: c algorithm datetime


【解决方案1】:

这是http://reqr.net/cal 用于计算日偏移量的 ruby​​ 代码:https://gist.github.com/910427

算法本身与语言无关,只使用原始类型。

【讨论】:

    【解决方案2】:

    秒是你的朋友。您使用的任何语言的伪代码:

    seconds_since_1970_to_date(date_to_seconds_since_1970(currentdate) + N * 86400)

    【讨论】:

      【解决方案3】:

      这在很大程度上取决于您用于开发的语言和框架,因为大多数框架都有一些方法来处理这个问题。例如,在 .NET 中,这很容易:

      DateTime futureDate = DateTime.Today.AddDays(numberOfDaysInFuture);
      

      【讨论】:

      【解决方案4】:

      Transact-SQL (MS SQL Server) 提供 DATEADD 函数。例如:

      DECLARE @days int;
      DECLARE @datetime datetime;
      SET @days = 365;
      SET @datetime = '2000-01-01 01:01:01.111'; /* 2000 was a leap year */
      SELECT DATEADD(day, @days, @datetime);
      

      --RESULT: 2000-12-31 01:01:01.110

      【讨论】:

        【解决方案5】:

        如果我正确地回答了您的问题,您最好的选择是执行以下操作:

        1. 将日期转换为数字,其中数字表示自特定日期以来的天数
        2. 将 N 添加到该数字
        3. 将结果转换回日期

        您可以使用日期的儒略日数来执行此操作。

        请参阅Wikipedia article on Julian Day Number (JDN) 了解更多信息。

        话虽如此,如果您实际上使用的是现代编程语言,大多数已经具备处理日期的工具,例如 Java、C#/.NET、Python 等。

        【讨论】:

          【解决方案6】:

          由于您正在寻找 C 解决方案,请在自己重新实现所有内容之前检查 ctime.h 是否不符合您的需求。

          【讨论】:

            【解决方案7】:
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-08-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-03-24
            • 2015-02-06
            相关资源
            最近更新 更多