我试图在 C# 中找到 2 月、6 月和 7 月的第三个星期二

本文关键字:星期二 三个 月和 | 更新日期: 2023-09-27 17:56:07

我可以在三个月内使用一种方法还是应该使用三种不同的方法?这是我的代码:

public DateTime ThirdMonday(DateTime thirdMonday)
{
    int mondayDay= (from day in Enumerable.Range(1, 31)
                     where new DateTime(thirdMonday.Year, thirdMonday.Month, day).DayOfWeek == DayOfWeek.Tuesday
                     select day).ElementAt(3);
    mondayDay = new DateTime(thirdMonday.Year, thirdMonday.Month, mondayDay);
    return thirdMonday;
}

我试图在 C# 中找到 2 月、6 月和 7 月的第三个星期二

试试这个,然后按照@Jon Skeet 备注进行改进:

    public static DateTime ThirdMonday(DateTime thirdMonday, DateTime month) {
            var mondayDay = (from day in Enumerable.Range(1, 31)
                             where new DateTime(thirdMonday.Year, month.Month, day).DayOfWeek == DayOfWeek.Monday
                             select day).ElementAt(2);
            var result = new DateTime(thirdMonday.Year, thirdMonday.Month, mondayDay);
            return result;
        }
    static void Main(string[] args)
    {
        var result = ThirdMonday(DateTime.Now, new DateTime(2016, 2, 1)); //pass February as the month
        Console.WriteLine(result);
        Console.Read();
    }

我有时担心我们的未来 - 人们正在寻找各种方法来使用 LINQ 表达式和其他复杂算法来处理可以用简单数学解决的事情。

您当然不需要在每月的每一天进行干预来弄清楚!

public DateTime GetOccurrenceInMonth(int year, int month, DayOfWeek dayOfWeek, int occurance)
{
    var dtFirst = new DateTime(year, month, 1);
    var dowFirstDay = (int)dtFirst.DayOfWeek;
    var day  = (occurance*7)+1 - ( (dowFirstDay-(int)dayOfWeek+7)%7 );
    return new DateTime(year, month, day);
}