我有以下netfiddle:
如何通过添加跨越午夜的时间段来使其工作:
`new Period( "9", Days.Workdays, TimeSpan.FromHours(22), TimeSpan.FromHours(07) )`
从22:00(晚上10:00)到07:00(07:00 AM)通知
答案 0 :(得分:2)
Matt上面有正确的答案,但有一些变化:
首先,你需要确保你有括号(因此你的记忆问题):
var period = _periods.Where(e => e.Days.HasFlag(day) && (e.Start <= e.End ? (e.Start <= timeOfDay && e.End > timeOfDay) : (e.Start <= timeOfDay || e.End > timeOfDay))).FirstOrDefault();
其次,在你的GetShiftPeriods方法中,你需要换一天(简单地添加句号。在这种情况下赢得了工作,因为那只是&#34; 7小时&#34;而不是7早晨。
var next = current.Date + period.End;
if (period.End < period.Start)
{
next = next.AddDays(1);
}
最后,您在定义的期间有一些重叠。当我删除上面两个更改的句点#4(注释掉)时,它对我来说很好。不确定你是否打算重叠,但如果你这样做 - 那段时间将被忽略。
答案 1 :(得分:1)
假设您的问题与代码的这一部分有关:
e.Start <= timeOfDay && e.End > timeOfDay
您可以将其更改为以下内容以计算午夜时间范围:
e.Start <= e.End // Are times in sequence?
? (e.Start <= timeOfDay && e.End > timeOfDay) // Yes - standard calculation (AND)
: (e.Start <= timeOfDay || e.End > timeOfDay) // No - inverse calculation (OR)