在 C# 中划分 TimeSpan
Divide TimeSpan in c#
我有一个时隙class:
public class TimeSlot
{
private TimeSpan start;
private TimeSpan end;
}
我需要实现这个功能:
Public List<TimeSlot> GetDividedTimeSlot(TimeSlot timeslot, int durationInMinutes)
函数获取一个时间段和time-duration(单位为分钟),将时间段划分为最大数量的时间段,这些时间段在其开始和结束时间范围内,每个时间段具有相同的时间-给定的持续时间。时间段之间也应相差一刻钟。
例如:
假设时间跨度为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;
但是给出的结果很奇怪,跟原来的时间没有联系
代码有什么问题?
非常感谢。
使用 DateTime.Now 是问题的原因。由于 DateTime.Now 指的是这个瞬间,因此结果时间现在基于当前时间和您正在使用的跨度。
您有 2 个添加时间的选项。两者本质上是一样的,都返回一个新的 TimeSpan 对象。
使用 +
运算符
Adds two specified TimeSpan instances.
Languages that do not support custom operators can call the Add method instead.
The equivalent method for this operator is TimeSpan.Add(TimeSpan)
var originalTime = new TimeSpan(1, 10, 30);
var additionalTime = new TimeSpan(0, 10, 30);
var resultingTimespan = originalTime + additionalTime;
使用Add
函数
Returns a new TimeSpan object whose value is the sum of the specified TimeSpan object and this instance.
var originalTime = new TimeSpan(1, 10, 30);
var additionalTime = new TimeSpan(0, 10, 30);
var resultingTimespan = originalTime.Add(additionalTime);
我有一个时隙class:
public class TimeSlot
{
private TimeSpan start;
private TimeSpan end;
}
我需要实现这个功能:
Public List<TimeSlot> GetDividedTimeSlot(TimeSlot timeslot, int durationInMinutes)
函数获取一个时间段和time-duration(单位为分钟),将时间段划分为最大数量的时间段,这些时间段在其开始和结束时间范围内,每个时间段具有相同的时间-给定的持续时间。时间段之间也应相差一刻钟。
例如:
假设时间跨度为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;
但是给出的结果很奇怪,跟原来的时间没有联系
代码有什么问题?
非常感谢。
使用 DateTime.Now 是问题的原因。由于 DateTime.Now 指的是这个瞬间,因此结果时间现在基于当前时间和您正在使用的跨度。
您有 2 个添加时间的选项。两者本质上是一样的,都返回一个新的 TimeSpan 对象。
使用 +
运算符
Adds two specified TimeSpan instances.
Languages that do not support custom operators can call the Add method instead. The equivalent method for this operator is TimeSpan.Add(TimeSpan)
var originalTime = new TimeSpan(1, 10, 30);
var additionalTime = new TimeSpan(0, 10, 30);
var resultingTimespan = originalTime + additionalTime;
使用Add
函数
Returns a new TimeSpan object whose value is the sum of the specified TimeSpan object and this instance.
var originalTime = new TimeSpan(1, 10, 30);
var additionalTime = new TimeSpan(0, 10, 30);
var resultingTimespan = originalTime.Add(additionalTime);