20

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

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

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_day并且sr.end_day是字符串

但问题发生在周末测试期间 - 显然,DayOfWeek enum星期天是一周的第一天(参考MSDN 页面上的评论

我想我可以用当前的代码做一些体操,但我正在寻找最易读的代码。

编辑 对不起误解-工作日不是从星期一到星期五-它们在配置文件中定义为字符串,甚至可以是从星期五到星期六-这破坏了我的原始代码。

4

10 回答 10

15
if ((day >= DayOfWeek.Monday) && (day <= DayOfWeek.Friday))
{
    // action
}
于 2012-07-15T19:42:31.430 回答
12

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

如果结束日小于开始日,只需将 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
}
于 2012-07-15T20:30:11.983 回答
5

DateTime 的扩展

public static bool IsWeekend(this DateTime date)
    {
        return new[] {DayOfWeek.Sunday, DayOfWeek.Saturday}.Contains(date.DayOfWeek);
    }
于 2014-12-31T14:50:28.097 回答
0

这是该问题的优雅解决方案。这是一个可以很容易地导入到其他项目中的类。该编码允许程序员动态分配检查的日期并将它们作为字符串数组传递给类。数据可以来自数据库,也可以在将其传递给此类的实例进行处理时进行硬编码。如果您下班,则返回 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!!!");
    }
}
于 2015-12-13T02:09:59.633 回答
0

我们也可以遵循类似的方法来检查给定时间是否在两个小时之间。以下是算法

checkIfFallsInRange(index,start,end)

bool normalPattern = start <= end ;

if ( normalPattern)
   return index>=start && index<=end;
else
  return index>=start || index <=end;
于 2016-07-21T12:15:04.000 回答
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);
}

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

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

于 2017-01-18T18:52:12.653 回答
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
 }
于 2017-11-30T11:40:15.603 回答
-1

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

于 2012-07-15T19:46:34.880 回答
-1

下面的行将返回“星期日”

string nameOfTheDay = DateTime.Now.ToString("dddd", new System.Globalization.CultureInfo("en-GB")).ToLower();

if(nameOfTheDay != "sunday" && nameOfTheDay != "saturday")
{
//Do Stuff
}
于 2012-07-15T19:48:56.333 回答
-1
    public bool IsWeekend(DateTime dateToCheck)
    {
        DayOfWeek day = (DayOfWeek) dateToCheck.Day;
        return ((day == DayOfWeek.Saturday) || (day == DayOfWeek.Sunday)); 
    }
于 2014-05-03T02:22:02.107 回答