验证以确保日期不会介于现有日期之间或重叠
本文关键字:日期 之间 重叠 于现 确保 验证 | 更新日期: 2023-09-27 18:31:56
基本上,我有一个报价,它有一个有效的开始和有效的日期。
例如:01/02/2012 至 03/02/2012
当我添加新报价时,我需要有效以确保此报价不会属于上述现有报价或重叠。
我目前的代码如下:
// Obtain the current list of coupons associated to the retailer.
List<RetailerCoupon> retailerCoupons = PayPalInStore.Data.RetailerCoupon.Find(x => x.RetailerId == RetailerId).ToList();
// Loop through each coupon and see if the timeframe provided in the NEW coupon doesnt fall between any EZISTING coupon.
if (retailerCoupons != null)
{
foreach (RetailerCoupon coupon in retailerCoupons)
{
DateTime retailerCouponValidFrom = coupon.DateValidFrom;
DateTime retailerCouponValidTo = coupon.DateExpires;
if (DateTime.Compare(retailerCouponValidFrom, ValidFrom) < 0 && DateTime.Compare(retailerCouponValidTo, ValidTo) > 0)
{
return true;
}
if (retailerCouponValidFrom == ValidFrom && retailerCouponValidTo == ValidTo.AddHours(23).AddMinutes(59).AddSeconds(59))
{
return true;
}
}
}
return result;
虽然这不起作用,但有人可以帮我解决这个问题吗?
确定开始日期和结束日期是包含日期还是排除日期后,检测重叠的常用方法是比较所考虑的两个范围的相反端。
您需要询问"范围 1 是否在范围 2 结束之前开始?"和"范围 2 是否在范围 1 结束之前开始?"。如果这两个问题都得到了肯定的回答,那么你就有了重叠。
从您当前的代码中,我不清楚结尾是包容性的还是排他性的,所以我不会尝试发布实际代码。
1)我认为retailerCoupons
不能为空。
2)当你可以写t1 <= t2
更具可读性时,为什么要使用DateTime.Compare(t1, t2) < 0
?
3) 如果要测试两个间隔是否不重叠,请测试以下内容:
bool they_do_not_overlap = t1_end <= t2_start || t1_start >= t2_end;
怎么样,使用 linq
var overlaps=retailerCoupons.Any(c=> c.DateValidFrom <= ValidTo && c.DateExpires >= ValidFrom);
然后
result= !overlaps;
不是直接回答你的问题,而是有机会谈谈我最喜欢的库之一:.NET 的时间段。只需阅读本文即可为您提供有关如何处理情况的一些提示。