验证以确保日期不会介于现有日期之间或重叠

本文关键字:日期 之间 重叠 于现 确保 验证 | 更新日期: 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 的时间段。只需阅读本文即可为您提供有关如何处理情况的一些提示。