假设我有一个有效的日程安排日期列表。类似于:23、27、29
我想根据上面的列表将给定日期修改为下一个有效的日-月。
如果您给定的日期是“23/11/2013”,下一个有效日期将是“27/11/2013” 但是如果你给定的日期是“30/11/2013”它必须返回“23/12/2013” 如果给定的日期是“30/12/2013”,它必须返回“23/01/2014”
我已经在 SQL 中完成了该操作,但现在我正在将其转换为 C#,这有点棘手。 我正在尝试在列表上使用 LINQ 来实现 SQL 相似性,但它会让人感到困惑。
SQL 语句是(是的,我知道它不是 swift 年):
SELECT TOP 1 @DATE = ISNULL(DateAdd(yy, YEAR(@DATE)-1900, DateAdd(m, (MONTH(@DATE)+CASE WHEN DATEPART(day,@DATE)>[DAY] THEN 1 ELSE 0 END) - 1, [DAY] - 1)),@DATE)
FROM @DAYS WHERE DateAdd(yy, YEAR(@DATE)-1900, DateAdd(m, (MONTH(@DATE)+CASE WHEN DATEPART(day,@DATE)>[DAY] THEN 1 ELSE 0 END) - 1, [DAY] - 1))>=@DATE
ORDER BY [DAY]
@DAYS 是一张工作台。
最佳答案
我认为您正在寻找的是这样的东西(使用 LINQ):
public static DateTime NextDate(DateTime seed, int[] days)
{
if (Enumerable.Range(1, 31).Intersect(days).Any()) //Check to stop a very long running lookup!
{
return Enumerable.Range(0, int.MaxValue)
.Select(i => seed.AddDays(i))
.First(d => days.Contains(d.Day));
}
return seed;
}
用法:
var nextDate = NextDate(DateTime.Now, new[] { 23, 27, 29 });
关于c# - 日期时间转移到下一个预定义日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21600200/