通过在c#中传递一年中的周数来获得周的第一个日期的更好方法
本文关键字:周数 第一个 方法 更好 日期 一年 | 更新日期: 2023-09-27 18:20:40
我写了下面的方法,通过传递年份和年份的周数来返回第一个星期的日期,我认为星期一是一周的第一天。我想知道是否有更好的方法可以计算这个。这是我的密码;
public static DateTime GetFirstDateOfWeekByWeekNumber(int year, int weekNumber)
{
var date = new DateTime(year, 01, 01);
var firstDayOfYear = date.DayOfWeek;
var result = date.AddDays(weekNumber * 7);
if (firstDayOfYear == DayOfWeek.Monday)
return result.Date;
if (firstDayOfYear == DayOfWeek.Tuesday)
return result.AddDays(-1).Date;
if (firstDayOfYear == DayOfWeek.Wednesday)
return result.AddDays(-2).Date;
if (firstDayOfYear == DayOfWeek.Thursday)
return result.AddDays(-3).Date;
if (firstDayOfYear == DayOfWeek.Friday)
return result.AddDays(-4).Date;
if (firstDayOfYear == DayOfWeek.Saturday)
return result.AddDays(-5).Date;
return result.AddDays(-6).Date;
}
如果您想替换If/else构造,您可以使用底层枚举值进行计算。枚举以Sunday = 0
、Monday = 1
开头,因此为了获得基于星期一的值,您需要将其移动一。你可以通过以下方式做到这一点:
int delta = -((int)firstDayOfYear + 6) % 7;
// and then just apply the delta
return result.AddDays(delta).Date
请注意,不要按顺序使用多个具有互斥条件的if
。在您的示例中,如果星期是Monday
,那么构造仍然会根据中的每个条件检查值。但是,如果使用正确的if/else if/else
结构,那么它只会进行第一次检查,然后跳到最后。使用switch
语句也可以避免这种情况,因为要执行的分支是在一个步骤中评估的。