gpt4 book ai didi

c# - 查找最接近今天的重复日期 - C#

转载 作者:行者123 更新时间:2023-11-30 19:46:15 25 4
gpt4 key购买 nike

听起来像是家庭作业?不,这不对。我为此制定了逻辑,但当日期跨越数年时却没有这样高效的逻辑。基本上这是它应该如何工作,

StartDate: 1/1/2012

FinishDate: 1/10/2012

RecurringInterval: 2 ( In days)

输出将是:

1/6/2012 如果今天的日期 (Date.Now) 是 1/5/2012(假设格式 MM/dd/yyyy).检查将在到达完成日期时结束。如果在给定时间段内没有匹配的日期,则必须返回今天的日期。非常简单但效率不高。

这有什么问题吗?

if (!_isRecurring)
return DateTime.UtcNow;
DateTime initialDate = _startDate;
DateTime finalDate = _finishDate;
int recurringDays = _recurringInteral;
/*
* start Date + recurring interval falls between start date and finishdate then get its date
*/
do
{
//add recurring day to start date
initialDate = initialDate.AddDays(recurringDays);
//check if it falls in between start days and end days
if(initialDate <= finalDate)
break;
} while (initialDate <= finalDate);
//return the first occurance of the recurring day
return initialDate;

最佳答案

一点算术应该可以挽救一天(双关语意):

var start = new DateTime(2012, 1, 1);
var end = new DateTime(2012, 10, 1);
var interval = 2; // days

var today = DateTime.Today;
var diff = (int)((today - start).TotalDays);
var mod = diff % interval;
var correction = TimeSpan.FromDays((mod > interval / 2 ? interval : 0) - mod);
var result = today + correction > end ? today : today + correction;
Console.Out.WriteLine("Result is: {0}", result);

See it in action .

它的作用是计算距离今天的“重现点”还有多少天(变量 mod)。这显然是一个 >= 0 且 < 区间的数字。如果是间隔的一半或更少,则表示最近的复发点早于今天,在这种情况下,从今天减去 mod 天数即可找到该点。如果它大于间隔的一半,则意味着我们需要添加 interval - mod 天来找到点(将在未来)。

关于c# - 查找最接近今天的重复日期 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8860089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com