当您有不同组的人每天 24 小时在不同的班次上工作(比如一组工作三个 8 小时轮班,另一组工作两个 12 小时轮班,最后一组工作两个 10 小时轮班,4 小时无人值守)给予一分及时返回最近开始的班次的最直接方式是什么?
例如,我有一个 8 小时Shift
的列表(BeginTime 分别是早上 6 点、下午 2 点、晚上 10 点)
public class Shift
{
public string Name { get; set; }
public TimeSpan BeginTime { get; set; }
public int LengthHours { get; set; }
}
我当前的代码有效(出于我的目的),但并不理想,因为它需要 startTime 并且轮班在集合中是有序的。
public Shift FindCurrentShift(DateTime startTime, DateTime endTime, List<Shift> shifts)
{
Shift mostRecentShift = null;
foreach (Shift aShift in shifts) {
DateTime shiftBeginTime = DateTime.Parse(endTime.Date.Add(aShift.BeginTime).ToString());
if (startTime.Date != endTime.Date) {
if (shiftBeginTime.TimeOfDay > startTime.TimeOfDay) {
shiftBeginTime = shiftBeginTime.AddDays(-1);
}
}
//does this shift fall in between start and stop time
if ((startTime < shiftBeginTime && endTime > shiftBeginTime)) {
mostRecentShift = aShift;
}
}
return mostRecentShift;
}
鉴于当前时间,我在哪个班次?有什么更简单的方法可以做到这一点?