如何从当前时间的时间列表中获取最低的未来时间(现在之后)



如何在当前时间之后获得最低的未来时间。

安排时间

06:00

12:30

17:45

当前时间

10:20

计划时间在

List<TimeSpan> lstDT 
TimeSpan CurrentTimeSpan = TimeSpan.FromTicks(DateTime.Now.Ticks);
var min = lstDT
.Select(x => new { 
diff = Math.Abs((x - CurrentTimeSpan).Ticks), 
time = x })
.OrderBy(x => x.diff)
.Last()
.time;

预期答案是 12.30(因为 12.30 是 10.20之后的下一次(。如果当前时间为 23:59,则预期结果为 6.00。

谢谢

我可以看到当前代码的4个问题;我们必须

  1. 摆脱 日期部分(TimeOfDay(
  2. Last更改为First
  3. 小心休息时间1:0022:00更接近23:59(我们必须分析两个值:差异和午夜的差异(
  4. 由于我们只想要未来,我们应该放弃Math.Abs(这使得过去和未来是平等的(,但要提出一个条件

实现:

List<TimeSpan> lstDT = new List<TimeSpan>() {
new TimeSpan( 6,  0, 0), // pure times, no date parts
new TimeSpan(12, 30, 0),
new TimeSpan(17, 45, 0),
};
// Test Data:
// DateTime current = new DateTime(2018, 10, 27, 11, 20, 0);
// TimeSpan CurrentTimeSpan = TimeSpan.FromTicks(current.TimeOfDay.Ticks);
// TimeOfDay - we don't want Date part, but Time only
TimeSpan CurrentTimeSpan = TimeSpan.FromTicks(DateTime.Now.TimeOfDay.Ticks);
// closest future time
var min = lstDT
.Select(x => new {
// + new TimeSpan(1, 0, 0, 0) - over the midnight
diff = x > CurrentTimeSpan 
? (x - CurrentTimeSpan).Ticks
: (x - CurrentTimeSpan + new TimeSpan(1, 0, 0, 0)).Ticks,
time = x })
.OrderBy(x => x.diff)
.First()              // <- First, not Last
.time;

最新更新