我的应用程序需要在工作日和工作时间内运行。
在应用程序配置中,我以格式
设置了开始时间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 page上的评论
我想我可以使用当前代码做一些体操,但我正在寻找最易读的代码。
修改 很抱歉误解 - 工作日不是从星期一到星期五 - 它们在配置文件中被定义为字符串,它们甚至可以从星期五到星期六 - 这会破坏我的原始代码。
答案 0 :(得分:13)
if ((day >= DayOfWeek.Monday) && (day <= DayOfWeek.Friday))
{
// action
}
答案 1 :(得分:11)
来自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
}
答案 2 :(得分:4)
DateTime
的扩展名public static bool IsWeekend(this DateTime date)
{
return new[] {DayOfWeek.Sunday, DayOfWeek.Saturday}.Contains(date.DayOfWeek);
}
答案 3 :(得分: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!!!");
}
}
答案 4 :(得分:0)
我们也可以采用类似的方法来检查给定的小时是否在两小时之间。以下是算法
checkIfFallsInRange(index,start,end)
bool normalPattern = start <= end ;
if ( normalPattern)
return index>=start && index<=end;
else
return index>=start || index <=end;
答案 5 :(得分: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);
}
假设星期日/星期六是非工作日。否则,用户可以指定非工作日。并且是易于使用的扩展。
注意:为了避免循环,可能会产生一个标志。
答案 6 :(得分:-1)
您可以使用DayOfWeek枚举来查看日期是星期日还是星期六。 http://msdn.microsoft.com/en-us/library/system.dayofweek.aspx我希望这可以提供帮助。
答案 7 :(得分:-1)
以下行将返回“星期日”
string nameOfTheDay = DateTime.Now.ToString("dddd", new System.Globalization.CultureInfo("en-GB")).ToLower();
if(nameOfTheDay != "sunday" && nameOfTheDay != "saturday")
{
//Do Stuff
}
答案 8 :(得分:-1)
public bool IsWeekend(DateTime dateToCheck)
{
DayOfWeek day = (DayOfWeek) dateToCheck.Day;
return ((day == DayOfWeek.Saturday) || (day == DayOfWeek.Sunday));
}
答案 9 :(得分:-1)
SELECT *
FROM
(
SELECT a.*, b.ResultTest, b.ResultState2,
ROW_NUMBER() OVER (PARTITION BY a.Id ORDER BY a.ID DESC) rn
FROM A a
LEFT JOIN B b
ON a.Id = b.GasReceptionId
WHERE
a.OrganizationGasId = 4212
) t
WHERE t.rn = 1;