c# - 日期时间转移到下一个预定义日期

标签 c# linq datetime

假设我有一个有效的日程安排日期列表。类似于: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/

相关文章:

c# - 在另一个完成后运行 BackgroundWorker

c# - 访问库函数时 char** 的编码问题

c# - Linq Func 委托(delegate) - 可以添加到吗?

c# - 无法从表转换为类

date - Flutter/Dart-以输入格式格式化日期

python - 如何在 Python 中解析 HTTP 日期字符串?

c# - WPF MouseMove InvalidateVisual OnRender 更新非常慢

c# - 一个实体上的多个属性需要多对多关系 EF Core 2.2

linq - LINQ 中的 DATEDIFF(以月为单位)

python - pandas.DataFrame.to_csv : selectively apply date_format by column