首页 文章

如何检查当天是否为工作日

提问于
浏览
18

我的应用程序需要在工作日和工作时间内运行 .

在应用程序配置中,我以格式设置了开始时间

Monday-Friday
9:00AM-5:30PM

现在,我有一个问题,如何检查当前是否在当天限制之内(时间很容易 - 用 DateTime.ParseExact 解析时间和简单分支会做),但我不知道如何解析天 .

我尝试过:

DayOfWeek day = DateTime.Now.DayOfWeek;
if (day >= (DayOfWeek)Enum.Parse(typeof(DayOfWeek), sr.start_day) &&
    day <= (DayOfWeek)Enum.Parse(typeof(DayOfWeek), sr.end_day))
{ /* OK */ }

sr.start_daysr.end_day 是字符串

但问题发生在周末测试期间 - 显然,在 DayOfWeek enum ,周日是一周的第一天(参见MSDN page的评论)

我想我可以用现有代码做一些体操,但我正在寻找最易读的代码 .

Edit 对于误解感到抱歉 - 工作日不是从星期一到星期五 - 它们被定义为配置文件中的字符串,它们甚至可以从星期五到星期六 - 这会破坏我的原始代码 .

10 回答

  • 11
    if ((day >= DayOfWeek.Monday) && (day <= DayOfWeek.Friday))
    {
        // action
    }
    
  • -1

    来自Hans Passant's对我原来问题的评论:

    如果小于开始日,只需在结束日添加7即可 . 同样,如果它小于开始日,则添加7天 .

    DayOfWeek day = DateTime.Now.DayOfWeek;
    DayOfWeek start_day = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), sr.start_day);
    DayOfWeek end_day = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), sr.end_day);
    
    if (end_day < start_day)
        end_day += 7;
    
    if (day < start_day)
        day += 7;
    
    if (day >= start_day && day <= end_day)
    { 
       //Action
    }
    
  • 4

    DateTime的扩展

    public static bool IsWeekend(this DateTime date)
        {
            return new[] {DayOfWeek.Sunday, DayOfWeek.Saturday}.Contains(date.DayOfWeek);
        }
    
  • 13

    这是解决问题的优雅方案 . 这是一个可以轻松导入其他项目的类 . 编码允许程序员动态分配要检查的天数,并将它们作为字符串数组传递给类 . 当您将数据传递给此类的实例进行处理时,数据可以来自数据库或进行硬编码 . 如果你下班,它会返回True值,如果你那天工作,则返回False . 在课程下面我提供了一个简单的实现示例 . 这个类的特点是:动态分配你有什么日子,简单的错误处理程序通过在比较它们之前将字符串设置为小写,轻松地与具有你的工作计划的数据库集成,你的休假时间可能并不总是相同 . 轻松集成为硬编码天数 .

    // The Class To Check If You're Off Work
    
    class DayOffChecker
    {
        public bool CheckDays(List<string> DaysOff)
        {
            string CurrentDay = DateTime.Now.DayOfWeek.ToString();
            CurrentDay.ToLower();
            foreach (string DayCheck in DaysOff)
            {
                DayCheck.ToLower();
                if (CurrentDay == DayCheck)
                {
                    return (true);
                }
            }
            return (false);
        }
    }
    
    // Example usage code:
    
    class Program
    {
        List<string> DaysOff = List<string>();
        DaysOff.Add("Saturday");  // Add some values to our list.
        DaysOff.Add("Sunday");
        DayOffChecker CheckToday = new DayOffChecker();
        if(CheckToday.CheckDays(DaysOff))
        {
            Console.WriteLine("You're Off Today!!!");
        }
    }
    
  • -1

    我们也可以采用类似的方法来检查给定的小时是否在两小时之间 . 以下是算法

    checkIfFallsInRange(index,start,end)
    
    bool normalPattern = start <= end ;
    
    if ( normalPattern)
       return index>=start && index<=end;
    else
      return index>=start || index <=end;
    
  • 0

    我确定当天是否是工作日的简单解决方案是:

    public static bool IsWorkDay(this DateTime dt)
    {
        return IsWorkDay(dt, DayOfWeek.Sunday, DayOfWeek.Saturday);
    }
    
    public static bool IsWorkDay(this DateTime dt, params DayOfWeek[] noneWorkDays)
    {
        return !noneWorkDays.Contains(dt.DayOfWeek);
    }
    

    假设周日/周六是非工作日 . 否则,用户可以指定非工作日 . 并且是易于使用的扩展 .

    注意:为避免循环,可能会创建一个位标志 .

  • 0
    DayOfWeek Day = DateTime.Today.DayOfWeek;
    int Time = DateTime.Now.Hour;
    if (Day != DayOfWeek.Saturday && Day != DayOfWeek.Sunday)
     {
     if (Time >= 8 && Time <= 16)
     {
       //It is Weekdays work hours from 8 AM to 4 PM
     {
     }
    else
     {
       // It is Weekend
     }
    
  • 0

    您可以使用DayOfWeek枚举来查看日期是星期日还是星期六 . http://msdn.microsoft.com/en-us/library/system.dayofweek.aspx我希望这可以提供帮助 .

  • 0

    以下行将返回“星期日”

    string nameOfTheDay = DateTime.Now.ToString("dddd", new System.Globalization.CultureInfo("en-GB")).ToLower();
    
    if(nameOfTheDay != "sunday" && nameOfTheDay != "saturday")
    {
    //Do Stuff
    }
    
  • -1
    public bool IsWeekend(DateTime dateToCheck)
        {
            DayOfWeek day = (DayOfWeek) dateToCheck.Day;
            return ((day == DayOfWeek.Saturday) || (day == DayOfWeek.Sunday)); 
        }
    

相关问题