C# 如何检查当前日期是否为工作日

C# 如何检查当前日期是否为工作日,c#,C#,我有一个应用程序需要在工作日和工作时间内运行 在应用程序配置中,我已将启动时间设置为 Monday-Friday 9:00AM-5:30PM 现在,我有一个问题,如何检查当前日期是否在day boundare is内(因为时间很简单-使用DateTime解析时间。ParseExact和simple branch就可以了),但我不知道如何解析日期 我试过: DayOfWeek day = DateTime.Now.DayOfWeek; if (day >= (DayOfWeek)Enum.

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

在应用程序配置中,我已将启动时间设置为

Monday-Friday
9:00AM-5:30PM
现在,我有一个问题,如何检查当前日期是否在day boundare is内(因为时间很简单-使用
DateTime解析时间。ParseExact
和simple branch就可以了),但我不知道如何解析日期

我试过:

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 */ }
DayOfWeek-day=DateTime.Now.DayOfWeek;
if(day>=(DayOfWeek)Enum.Parse(typeof(DayOfWeek),sr.start\u day)&&

day
if((day>=DayOfWeek.Monday)&(day您可以使用DayOfWeek枚举来查看日期是星期日还是星期六。我希望这能有所帮助。

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

根据对我最初问题的评论:


如果结束日少于开始日,只需在结束日加上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);
如果(结束日<开始日)
结束日+=7;
如果(日<开始日)
天数+=7天;
如果(日>=开始日和日日期时间的延长

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

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

// 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!!!");
    }
}
//检查您是否下班的类
班主任
{
公共布尔检查日(列表日)
{
字符串CurrentDay=DateTime.Now.DayOfWeek.ToString();
CurrentDay.ToLower();
foreach(字符串dayscheck in DaysOff)
{
DayCheck.ToLower();
如果(CurrentDay==DayCheck)
{
返回(真);
}
}
返回(假);
}
}
//使用代码示例:
班级计划
{
List DaysOff=List();
DaysOff.Add(“星期六”);//在列表中添加一些值。
添加日期(“星期日”);
DayOffChecker CheckToday=新的DayOffChecker();
如果(检查今天。检查天(DaysOff))
{
Console.WriteLine(“你今天休息!!!”;
}
}

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

checkIfFallsInRange(index,start,end)

bool normalPattern = start <= end ;

if ( normalPattern)
   return index>=start && index<=end;
else
  return index>=start || index <=end;
checkIfFallsInRange(索引、开始、结束)

bool normalPattern=start=start&&index=start | | index确定当前日期是否为工作日的简单解决方案是:

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);
}
它假定星期天/星期六是非工作日。否则,用户可以指定非工作日。并且是一个扩展,便于使用

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

DayOfWeek Day=DateTime.Today.DayOfWeek;
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
 }
int Time=DateTime.Now.Hour; 如果(天!=星期六和星期日!=星期日、星期日) {
如果(Time>=8&&Time如果小于开始日,则在结束日加7。同样,如果小于开始日,则在结束日加7。@HansPassant,是的,这很有效!如果可以,发布答案,我将选择它!继续发布您使用的代码并将其标记为答案。枚举数本质上是整数,但我通常建议不要使用
 
用于枚举求值。问题是,如果添加/删除枚举选项(或重新排列其顺序),则必须搜索代码以查找所有int求值并进行更改。相反,请使用显式相等检查,例如
if(myEnumValue==MyEnum.One | | myEnumValue==MyEnum.Two)
而不是
if((int)myEnumValue<2)
。这样做可以确保类型安全(不确定名称是否正确。我的意思是删除枚举选项会产生编译时错误),更少的幻数,更好的可读性。这不起作用,我认为它与我的原始代码相同。例如,如果我在周六设置我的计算机,如果我将end_day设置为Sunday。我明白了……所以你不想知道这是否是一个工作日,你想知道它是否在变量sr.start_day和sr.end_day中的两个字符串之间?-1:虽然这对(大多数?)西方国家来说是正确的,在许多国家它都不起作用。请看en.wikipedia.org/wiki/Workweek_and_weekend。谢谢,但这并不完全是我所要求的。+1.这是一个相当有争议的问题,否则证明C是一种完成任务的语言。比如。它回答了我所问的问题:-)-1:这对我来说是正确的(大多数?)西方国家,它在许多国家都不起作用。参见。-1:虽然(大多数?)西方国家也是如此,但它在许多国家都不起作用。参见en.wikipedia.org/wiki/Workweek_and_weekend。你返回了一个布尔数组吗?@Hogan Mustafa创建了一个新的
DayOfWeek
实例数组,他对其调用
Contains()
返回一个
bool
。完全合法。请注意,您需要导入
System.Linq
,这样才能正常工作。请删除您的twitter链接。这是没有根据的。此外,有必要进行一些解释,仅由代码片段组成的答案不是好答案。请勿将您的twitter链接重新添加到此链接中(或任何其他)答案。虽然此代码片段可以解决问题,但确实有助于提高您的文章质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道问题的原因
// 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!!!");
    }
}
checkIfFallsInRange(index,start,end)

bool normalPattern = start <= end ;

if ( normalPattern)
   return index>=start && index<=end;
else
  return index>=start || index <=end;
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);
}
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
 }