gpt4 book ai didi

c# - 我如何找到最后一个类次开始的时间? (按 24 小时时间表)

转载 作者:行者123 更新时间:2023-11-30 16:15:35 25 4
gpt4 key购买 nike

当你有不同的人组每天 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;
}

鉴于当前时间,我处于第几类?执行此操作的更简单方法是什么?

最佳答案

使用 LINQ 试试这个:

public Shift FindCurrentShift(DateTime currentDateTime, List<Shift> shifts)
{
DateTime startOfDay = currentDateTime.Date;

// Get most recent shift that started today and has not ended yet
Shift shift =
shifts.Where(s => startOfDay.Add(s.BeginTime) <= currentDateTime
&& startOfDay.Add(s.BeginTime).AddHours(s.LengthHours) <= currentDateTime)
.OrderByDescending(s => s.BeginTime)
.FirstOrDefault();

// If none were found that had a start date today, get the latest shift
// (would be one that started yesterday) as long as its end time today has not passed yet
if (shift == null) {
shift =
shifts.Where(s => startOfDay.AddDays(-1).Add(s.BeginTime).AddHours(s.LengthHours) <= currentDateTime
.OrderByDescending(s => s.BeginTime)
.FirstOrDefault();
}

return shift;
}

关于c# - 我如何找到最后一个类次开始的时间? (按 24 小时时间表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19414296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com