c# - 在c#中除TimeSpan

我有一个 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);

相似文章

c# - 将 string 转换为时间 c#

我想做一个c#应用程序,它会执行if逻辑操作来验证时间是否与营业时间一致。我尝试在下面使用此代码,但它显示错误DateTimedata=DateTime.Parse(txt_Hora.Text,Sys...

最新文章