【发布时间】:2017-09-11 18:39:16
【问题描述】:
假设我有两个时间跨度范围
07.00.00 - 18.59.59
19.00.00 - 06.59.59
现在我有了一个时间跨度范围,我们称之为持续时间。
public class Duration {
public TimeSpan StartingTime{get; set;}
public TimeSpan EndingTime{get; set;}
}
初始化为
StartingTime 05.00.00
EndingTime 06.00.00
我想生成一个方法,我在时间跨度范围列表中传递,以及一个新的时间跨度,它将返回一个正确的时间跨度范围。
我曾尝试为 TimeSpan 修改 Check if a date range is within a date range,还尝试将我的时间跨度范围转换为日期时间,但结果失败(不返回任何内容)。
我也试过了
var fee = fees.Where(a=> parking.StartTime <= a.EndingTime && parking.EndTime >= a.StartingTime).First();
其中停车是持续时间等级,费用是时间跨度范围列表。
我也看过c# check if a timespan range is between timespan range and how many hours,但这也没有产生有效的解决方案。
我已经很沮丧了,想不出解决办法。
编辑:以@NetMage 为例,有一种情况是 19.40 - 20.35 会导致失败,我修复了添加另一个条件。
var fee = fees
.First(r => (r.StartingTime <= r.EndingTime) ?
(r.StartingTime <= parking.StartTime && parking.StartTime <= r.EndingTime) :
(parking.StartTime <= r.EndingTime) ?
(r.StartingTime <= parking.StartTime + oneDay && parking.StartTime <= r.EndingTime)
: (r.StartingTime <= parking.StartTime + oneDay && parking.StartTime <= r.EndingTime + oneDay)
);
EDIT2//
现在我仍然无法从 endTime 检查重叠。尝试使用NetMage告诉的方法,但目前没有
EDIT3//
要检查结尾部分,它会是
fees.First(r => (r.StartingTime <= r.EndingTime) ?
(r.EndingTime >= end && end >= r.StartingTime) :
(end >= r.StartingTime) ?
(r.EndingTime >= end + oneDay && end >= r.StartingTime) :
(r.EndingTime >= end + oneDay && end >= r.StartingTime + oneDay)
);
最后检查它是否重叠两种方式:
fees.First(r => r.StartingTime >= start && r.EndingTime <= end);
【问题讨论】:
-
你可以发布你的模型来收费吗?
-
您的停车变量是否实现了 Duration 模型?
-
也对您正在寻找的输出类型感到困惑。是超出或指定范围的任何费用,还是指定范围内的任何费用?
-
嗯,你为什么在 TimeSpan 而不是 DateTimes 期间实现持续时间?更好的是,为什么要有一个持续时间类,而不是只使用一个 TimeSpan?
-
你能举一个输入和预期输出的例子吗?