代码之家  ›  专栏  ›  技术社区  ›  jsonGPPD

删除所有周末的扩展方法日期时间。现在C类#

  •  -2
  • jsonGPPD  · 技术社区  · 7 年前

    很好的一天,

    我正在尝试创建一个扩展方法,删除日期时间内的周末。但它不能正常工作。

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

    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;
        }
    }
    

    我想在这里用它 DateTime.Now.RemoveWeekends() - 2;

    有什么帮助吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Rob    7 年前

    我怀疑它不能正常工作,因为如果今天 它又回来了 星期六 因为你只扣了一天。您可以采取的另一种方法是:

    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;
        }
    }
    

    i、 e.查看日期并在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;
    }