異なるシフトで 1 日 24 時間働くさまざまなグループがある場合 (たとえば、あるグループは 8 時間シフトを 3 回、別のグループは 12 時間シフトを 2 回、最後のグループは 10 時間シフトを 2 回、4 時間は無人で働いているとします)。時間内に、最も最近開始されたシフトを返すための最も簡単な方法は何ですか?
一例として、8 時間Shift
の List があります (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;
}
現在の時間を考えると、私はどのシフトにいますか? これを行うためのより簡単な方法は何ですか?