我有这段代码可以在一周内获得日期。但是这段代码需要周一硬编码。如何在注释"//Special check for Sunday because acc. to our business week Starts from Monday and DayOfWeek Enum starts from Sunday."
我的意思是可以在一行中计算var
而不用if else条件?所以明天如果它决定星期日是开始日期,那么就不需要做任何改变。
class Program
{
static void Main(string[] args)
{
DateTime weekDate = GetWeekDate(DateTime.Now, DayOfWeek.Friday);
Console.WriteLine(weekDate); //prints 14-02-2014
Console.ReadLine();
}
private static DateTime GetWeekDate(DateTime dt, DayOfWeek dow)
{
DateTime sow;
int var = 0;
sow = StartOfWeek(dt);
if (dow == 0) //Special check for Sunday because acc. to our business week Starts from Monday and DayOfWeek Enum starts from Sunday.
var = 6;
else
var = (int)dow - 1;
return sow.AddDays(var);
}
public static DateTime StartOfWeek(DateTime dt)
{
int days = dt.DayOfWeek - DayOfWeek.Monday; //Week Starts from Monday
if (days < 0)
days += 7;
return dt.AddDays(-1 * days).Date;
}
}
答案 0 :(得分:1)
它被称为模运算符 - %
(也称为整数除法余数)。
例如,(7 + dow - 1) % 7
应该为您提供正确的值。
要移动星期的开始,您只需要更改减去的值,例如。星期日开始一周,它将为零,从星期一开始它将是1,从星期二开始它将是2((7 + dow - 2) % 7
)等。
答案 1 :(得分:0)
您可以做的是依赖于常量,甚至接受作为参数的工作周的开始,并在计算中使用该值而不是硬编码。