C# 在C语言中比较日期范围的简单方法#
我正在预订系统 例如,我可以随时预订以下优惠:C# 在C语言中比较日期范围的简单方法#,c#,C#,我正在预订系统 例如,我可以随时预订以下优惠: Offer: 8AM - 8PM (in one day, for example in 1/12/2018) OR Offer: 7/12/2019 8AM - 10/12-2019 8PM 有人保留部分时间,例如: First reservation: 12AM - 2PM (same day as offer) OR First reservation: 7/12/2019 8AM - 8/12/2019 8AM 如您所见,我们还有可用时
Offer: 8AM - 8PM (in one day, for example in 1/12/2018)
OR
Offer: 7/12/2019 8AM - 10/12-2019 8PM
有人保留部分时间,例如:
First reservation: 12AM - 2PM (same day as offer)
OR
First reservation: 7/12/2019 8AM - 8/12/2019 8AM
如您所见,我们还有可用时间:8AM-12am
和2PM-8PM
现在,有人想预留时间:
Second reservation: 8AM - 10AM (same day as offer)
OR
Second reservation: 10/12/2019 0AM - 10/12/2019 8PM
然后,有人想再预订一次:
Third reservation: 2PM - 8PM (same day as offer)
OR
Third reservation: 8/12/2019 0AM - 9/12/2019 8AM
从上面的场景来看,报价中的可用时间:
Available time in offer (after 3 reservations): 10AM - 12AM (same day as offer)
//i didnt write example with couple of days because it is too hard to calculate it in mind
现在,我的问题。我正在寻找一种解决方案,用DateTimes
验证介于某个时间段之间的请求
我开始编写代码:
//there is no Offer offer in this method, because i check request times
//with offer step before
private bool TimeOfReservationIsValid(Command request)
{
bool result = true;
var reservations = _context.Reservations.Where(r => r.OfferId == request.OfferId);
if (reservations.Count() > 0)
{
foreach (var reservation in reservations)
{
if (request.StartOfRent <= reservation.StartOfRent
&& request.StartOfRent < reservation.EndOfRent
&& request.EndOfRent <= reservation.EndOfRent
&& request.EndOfRent > reservation.StartOfRent)
{
break;
}
else if (request.StartOfRent >= reservation.StartOfRent
&& request.StartOfRent < reservation.EndOfRent
&& request....)
{
//i think in this code it can be too much if statemantes?
}
}
}
return result;
}
//此方法中没有提供,因为我检查了请求时间
//在报价前一步
私有bool TimeOfReservationIsValid(命令请求)
{
布尔结果=真;
var reservations=_context.reservations.Where(r=>r.OfferId==request.OfferId);
if(reservations.Count()>0)
{
foreach(保留中的var保留)
{
如果(request.startofort=reservation.startofort
&&request.startofren
但案例太多了。在上面的代码中,我正在检查请求
是否与任何保留
冲突。如果它与其中一个冲突,result=false
,我将删除request
我知道我可以在ClientSide
中进行验证(例如,在前端,只发送好的请求),但我想在后端对该请求时间进行逻辑验证
我的问题有什么解决方案吗
如您所见,当我们在租房时间中间进行预订时,首先我需要检查请求是否与第一个免费提供时间匹配,然后我需要检查第二个免费提供时间(如果请求与免费提供时间匹配)。也许你在和我一样的问题上挣扎
编辑:
我在我的报价示例中添加了完整日期。我的预订
系统使用完整的日期时间
,包括年、月、日等检查是否有任何范围重叠
var overlaps =
_context.Reservations
.Where(r => r.OfferId == request.OfferId)
.Any(r => request.EndOfRent >= reservation.StartOfRent &&
reservation.EndOfRent >= request.StartOfRent)
有很多方法可以帮助您。@mj将其时间与日期(年、月、日等,我需要它,因为我的系统也提供以天为单位的时间)。在代码中,它是简单的public DateTime startofren{get;set}
,我对此不做任何处理。@mjwills是的,如果在Offer
中可用,您可以预订一两天,所以您想检查请求中的时段是否与预订集合中的任何时段相交?我将使用。所以我可以简化逻辑。