我正在寻找一种算法来查找未来某一天的日期,即从今天起N天内的日期。
我的主要问题是如何处理中间的闰年
如果我对你的问题理解正确,你最好的选择是这样做:
- 将日期转换为数字,其中数字表示从特定日期到现在的天数
- 将N添加到该数字
- 将结果转换回日期
您可以使用日期的儒略历日数来执行此操作。
参见维基百科关于儒略历日数(JDN)的文章了解更多信息。
话虽如此,如果你正在使用一种现代的编程语言,大多数已经有处理日期的工具了,比如Java, c#/。. NET、Python等
这高度依赖于您在开发中使用的语言和框架,因为大多数框架都有一些方法来处理此问题。例如,在。net中,这是非常简单的:
DateTime futureDate = DateTime.Today.AddDays(numberOfDaysInFuture);
下面是用于http://reqr.net/cal计算日偏移量的ruby代码:https://gist.github.com/910427
算法本身与语言无关,只使用基本类型
秒是你的朋友。伪代码,无论你使用什么语言:
seconds_since_1970_to_date(date_to_seconds_since_1970(currentdate) + N * 86400)
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
既然您正在寻找C解决方案,请在自己重新实现所有内容之前检查ctime.h是否不适合您的需求。
参见
C或c++中日历日期的运算(在给定日期上加N天)
https://en.wikipedia.org/wiki/C_date_and_time_functions http://www.cplusplus.com/reference/ctime/http://en.cppreference.com/w/c/chrono