gpt4 book ai didi

c# - TimeSpan 中一天的非事件间隔

转载 作者:太空宇宙 更新时间:2023-11-03 20:53:16 25 4
gpt4 key购买 nike

我有一个名为 Slot 的 C# 类,它只接受从 0:00:001.00:00:00 的所有值TimeSpan 属性。

public class Slot
{
public TimeSpan StartTime { get; set; }

public TimeSpan EndTime { get; set; }

}

我将这些值作为我的事件间隔,它们彼此不重叠:

var activeIntervals= new List<Slot>
{
new Slot
{
StartTime = new TimeSpan(10,0,0),
EndTime = new TimeSpan(12,0,0),
},
new Slot
{
StartTime = new TimeSpan(12,0,0),
EndTime = new TimeSpan(13,0,0),
},
new Slot
{
StartTime = new TimeSpan(16,0,0),
EndTime = new TimeSpan(22,0,0),
}
};

是否有任何逻辑可以将一天中的其他时间间隔作为 inactiveIntervals?

在这种情况下,我想要这样的结果: 0:00:0010:00:0013:00:0016:00:0022:00:001.00:00:00

最佳答案

尝试以下逻辑。它会为你工作。

您可以 test it here

var activeIntervals = new List<Slot>
{
new Slot
{
StartTime = new TimeSpan(10,0,0),
EndTime = new TimeSpan(12,0,0),
},
new Slot
{
StartTime = new TimeSpan(12,0,0),
EndTime = new TimeSpan(13,0,0),
},
new Slot
{
StartTime = new TimeSpan(16,0,0),
EndTime = new TimeSpan(22,0,0),
}
};


activeIntervals = activeIntervals.OrderBy(x => x.StartTime).ToList();

var inActiveIntervals = new List<Slot>();
TimeSpan start = new TimeSpan(0,0,0);
TimeSpan end = new TimeSpan(24,0,0);

for (int i = 0; i < activeIntervals.Count(); i++)
{
if (start < activeIntervals[i].StartTime)
{
inActiveIntervals.Add(new Slot { StartTime = start, EndTime = activeIntervals[i].StartTime });
}
start = activeIntervals[i].EndTime;
}
if (start < end)
{
inActiveIntervals.Add(new Slot { StartTime = start, EndTime = end });
start = end;
}
for (int i = 0; i < inActiveIntervals.Count(); i++)
{
Console.WriteLine(inActiveIntervals[i].StartTime.ToString() + " - " + inActiveIntervals[i].EndTime.ToString());
}

关于c# - TimeSpan 中一天的非事件间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53152136/

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