我试图在 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;
}
试试这个,然后按照@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);
}