周一从周一开始时如何简化逻辑?

时间:2014-02-13 12:32:27

标签: c# datetime

我有这段代码可以在一周内获得日期。但是这段代码需要周一硬编码。如何在注释"//Special check for Sunday because acc. to our business week Starts from Monday and DayOfWeek Enum starts from Sunday."

的地方使这4行变得灵活

我的意思是可以在一行中计算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;
    }
}

2 个答案:

答案 0 :(得分:1)

它被称为模运算符 - %(也称为整数除法余数)。

例如,(7 + dow - 1) % 7应该为您提供正确的值。

要移动星期的开始,您只需要更改减去的值,例如。星期日开始一周,它将为零,从星期一开始它将是1,从星期二开始它将是2((7 + dow - 2) % 7)等。

答案 1 :(得分:0)

您可以做的是依赖于常量,甚至接受作为参数的工作周的开始,并在计算中使用该值而不是硬编码。