扩展方法,用于删除DateTime.Now C#中的所有周末

时间:2019-01-10 12:05:43

标签: c# datetime

美好的一天

我正在尝试创建一个扩展方法,该方法将删除datetime内的Weekends。但这不能正常工作。

到目前为止,这是我的代码

kubectl apply -f customingress.yaml

我正在这里public static class DatetimeExtension { public static int RemoveWeekends(this DateTime date) { if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday) { date = date.AddDays(-1); } return date.Day; } }

尝试使用它

有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

我怀疑它无法正常运行,因为如果一天是 Sunday ,则返回 Saturday ,因为您只扣除了一天。您可以采用的另一种方法是:

public static class DatetimeExtension
{
    public static int RemoveWeekends(this DateTime date)
    {
        while(date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
        {
            date = date.AddDays(-1);
        }

        return date.Day;
    }
}

即查看日期,继续前进1天,直到DayOfWeek不在星期六或星期日为止。

如果通过此测试运行它:

var date = new DateTime(2019, 01, 13); // this is Sunday 13th January 2019

var result = date.RemoveWeekends();

它应该返回11,即星期五,即明天。

但是,这有点低效,因为在星期日它会导致AddDays被调用两次,从而导致创建两个新的DateTime实例。没有此开销的版本将是:

public static int RemoveWeekends(this DateTime date)
{
    switch (date.DayOfWeek)
    {
        case DayOfWeek.Saturday:
            date = date.AddDays(-1);
            break;
        case DayOfWeek.Sunday:
            date = date.AddDays(-2);
            break;
    }

    return date.Day;
}