【发布时间】:2014-11-28 10:47:01
【问题描述】:
我有一个列表 DateTime 类型,我需要更接近 00:00:00、06:00:00、12:00:00 和 18:00:00 的时间。
我正在使用 for 循环通过一些 if 条件遍历列表,以获取介于两者之间的值。
但是,我不确定如何获得更接近的值,我也想知道是否有办法使用 LINQ 获得正确的结果。
TimeSpan ts1 = new TimeSpan(list[i].Item1.Hour,
list[i].Item1.Minute,
list[i].Item1.Second);
TimeSpan ts2 = new TimeSpan(list[i + 1].Item1.Hour,
list[i + 1].Item1.Minute,
list[i + 1].Item1.Second);
if (ts1.TotalHours < 00 && ts2.TotalHours > 00)
Console.WriteLine("00:00:00 {0} {1} Take: {2}", ts1, ts2, ts1);
else if (ts1.TotalHours < 06 && ts2.TotalHours > 06)
Console.WriteLine("06:00:00 {0} {1} Take: {2}", ts1, ts2, ts1);
else if (ts1.TotalHours < 12 && ts2.TotalHours > 12 )
Console.WriteLine("12:00:00 {0} {1} Take: {2}", ts1, ts2, ts1);
else if (ts1.TotalHours < 18 && ts2.TotalHours > 18)
Console.WriteLine("18:00:00 {0} {1} Take: {2}", ts1, ts2, ts1);
输出:
00:00:00 11:59:59 12:59:58 Take: 11:59:59
00:00:00 17:59:57 19:00:00 Take: 17:59:57
00:00:00 11:59:59 13:00:00 Take: 11:59:59
00:00:00 16:59:59 18:00:01 Take: 16:59:59
00:00:00 05:59:58 07:00:00 Take: 05:59:58
00:00:00 11:59:58 12:59:59 Take: 11:59:58
00:00:00 17:59:57 18:59:59 Take: 17:59:57
00:00:00 11:00:02 12:00:01 Take: 11:00:02
00:00:00 11:00:02 12:00:02 Take: 11:00:02
00:00:00 16:59:59 18:00:01 Take: 16:59:59
00:00:00 10:59:58 12:00:01 Take: 10:59:58
00:00:00 17:00:02 18:00:01 Take: 17:00:02
00:00:00 05:59:58 06:59:58 Take: 05:59:58
00:00:00 11:59:59 12:59:59 Take: 11:59:59
00:00:00 17:00:00 18:00:01 Take: 17:00:00
00:00:00 11:59:59 12:59:57 Take: 11:59:59
00:00:00 05:59:57 07:00:01 Take: 05:59:57
00:00:00 10:59:58 12:00:01 Take: 10:59:58
00:00:00 17:00:01 18:00:01 Take: 17:00:01
00:00:00 05:59:59 07:00:02 Take: 05:59:59
【问题讨论】:
-
你想比较什么日期时间,只有当前和下一个?不清楚你想要什么结果。
-
您想要列表中与这 4 个选项中的任何一个在时间上最接近的项目?
-
@TimSchmelter 好吧,就我而言,我比较了前后。如果您有其他选择,请与我分享。
-
@DavidG 是正确的。