我有一个 TimeSlot 课程:
public class TimeSlot
{
private TimeSpan start;
private TimeSpan end;
}
我需要实现这个功能:
Public List<TimeSlot> GetDividedTimeSlot(TimeSlot timeslot, int durationInMinutes)
该函数以分钟为单位获取一个时隙和持续时间,并将时隙划分为在其开始和结束时间范围内的最大时隙数量,每个时隙具有与给定相同的持续时间。时隙也应该彼此相差一刻钟。
例如:
假设 timespan 为 17:00 – 19:00,持续时间为 90 分钟。
预计列表为:17:00 – 18:30、17:15 – 18:45、17:30 – 19:00
我尝试了什么:
List<TimeSlot> dividedTimeSlots=new List<TimeSlot>();
TimeSpan start = timeSlot.start;
TimeSpan end = timeSlot.end;
TimeSpan currentEnd = new TimeSpan();
TimeSlot newTimeSlot;
while (end.Subtract(start).TotalMinutes >= durationInMinutes)
{
//currentEnd should be equals to the start time + timeDuration
currentEnd = ((DateTime.Now + start).AddMinutes(durationInMinutes)).TimeOfDay;
newTimeSlot = new TimeSlot();
newTimeSlot.start = start;
newTimeSlot.end = currentEnd;
dividedTimeSlots.Add(newTimeSlot);
start = (DateTime.Now.AddMinutes(15) + start).TimeOfDay;
}
return dividedTimeSlots;
但是给出的结果很奇怪,它与原始时间无关。
代码有什么问题?
非常感谢。
回答1
使用 DateTime.Now 是问题的原因。由于 DateTime.Now 指的是这一时刻,因此结果时间现在基于当前时间与您正在使用的跨度相结合。
您有 2 个选项来增加时间。两者本质上是相同的,每个都返回一个新的 TimeSpan 对象。
使用 +
运算符
添加两个指定的 TimeSpan 实例。
不支持自定义运算符的语言可以改为调用 Add 方法。此运算符的等效方法是 TimeSpan.Add(TimeSpan)
var originalTime = new TimeSpan(1, 10, 30);
var additionalTime = new TimeSpan(0, 10, 30);
var resultingTimespan = originalTime + additionalTime;
使用 Add
函数
返回一个新的 TimeSpan 对象,其 value 是指定 TimeSpan 对象和此实例的总和。
var originalTime = new TimeSpan(1, 10, 30);
var additionalTime = new TimeSpan(0, 10, 30);
var resultingTimespan = originalTime.Add(additionalTime);