【发布时间】:2011-08-01 17:37:16
【问题描述】:
我正在寻找一种算法来查找未来一天的日期,即从今天起的 N 天。
我的主要问题是如何处理中间的闰年。
【问题讨论】:
-
您使用什么语言或框架?
我正在寻找一种算法来查找未来一天的日期,即从今天起的 N 天。
我的主要问题是如何处理中间的闰年。
【问题讨论】:
这是http://reqr.net/cal 用于计算日偏移量的 ruby 代码:https://gist.github.com/910427
算法本身与语言无关,只使用原始类型。
【讨论】:
秒是你的朋友。您使用的任何语言的伪代码:
seconds_since_1970_to_date(date_to_seconds_since_1970(currentdate) + N * 86400)
【讨论】:
这在很大程度上取决于您用于开发的语言和框架,因为大多数框架都有一些方法来处理这个问题。例如,在 .NET 中,这很容易:
DateTime futureDate = DateTime.Today.AddDays(numberOfDaysInFuture);
【讨论】:
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
【讨论】:
如果我正确地回答了您的问题,您最好的选择是执行以下操作:
您可以使用日期的儒略日数来执行此操作。
请参阅Wikipedia article on Julian Day Number (JDN) 了解更多信息。
话虽如此,如果您实际上使用的是现代编程语言,大多数已经具备处理日期的工具,例如 Java、C#/.NET、Python 等。
【讨论】:
由于您正在寻找 C 解决方案,请在自己重新实现所有内容之前检查 ctime.h 是否不符合您的需求。
【讨论】: