Java中判断某个日期是否在某两个日期区间内

本文介绍了使用Joda-Time库的Interval类进行日期区间判定的方法,并通过实例演示了如何判断一个时间点是否位于指定区间内。此外,还提供了一种Java原生API实现区间冲突检查的思路,包括如何避免相同SKU代码的有效期发生重叠。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//日期区间判定可以使用Joda的Interval类
//计算特定日期是否在该区间内  [左闭右开区间,首包含尾不包含]参考contains源码的方法说明
Interval interval = new Interval(begin, end);  
boolean contained = i.contains(new DateTime("2012-03-01 12:00:00"));  

 * For example:
 * <pre>
 * [09:00 to 10:00) contains 08:59  = false (before start)
 * [09:00 to 10:00) contains 09:00  = true
 * [09:00 to 10:00) contains 09:59  = true
 * [09:00 to 10:00) contains 10:00  = false (equals end)
 * [09:00 to 10:00) contains 10:01  = false (after end)
 * 
 * [14:00 to 14:00) contains 14:00  = false (zero duration contains nothing)
     
Java原生Date API实现[Java8对日期API进行的增强,没研究,Joda就可以了,已经很强了]:
if (vopSkuHybrisModel.getStartDateTime().after(vopSkuHybrisModel.getEndDateTime()))
{
    throw new InterceptorException("Error Info:The same VOP SKU Code starting time should be before the end time.");
}

final List<VopSkuHybrisModel> vopSkuHybrisModelList = vopSkuHybrisService.getByVpCode(vopSkuHybrisModel.getVopSkuCode());

if (CollectionUtils.isNotEmpty(vopSkuHybrisModelList))
{
    for (final VopSkuHybrisModel vpInDB : vopSkuHybrisModelList)
    {
        if (vpInDB.getPk().equals(vopSkuHybrisModel.getPk()))
        {
            continue;
        }
        // 左闭右闭区间
        if ((vopSkuHybrisModel.getStartDateTime().after(vpInDB.getStartDateTime())
                && vopSkuHybrisModel.getStartDateTime().before(vpInDB.getEndDateTime()))
                || (vopSkuHybrisModel.getEndDateTime().after(vpInDB.getStartDateTime())
                        && vopSkuHybrisModel.getEndDateTime().before(vpInDB.getEndDateTime()))
                || vpInDB.getEndDateTime().after(vopSkuHybrisModel.getStartDateTime())
                        && vpInDB.getEndDateTime().before(vopSkuHybrisModel.getEndDateTime())
                || (vpInDB.getStartDateTime().after(vopSkuHybrisModel.getStartDateTime())
                        && vpInDB.getStartDateTime().before(vopSkuHybrisModel.getEndDateTime())))
        {
            throw new InterceptorException("Error Info:The same VOP SKU Code starting time should be before the end time.");
        }
    }
}

上面的条件判断,可以换种思路,就是找反面

if (!((vopSkuHybrisModel.getStartDateTime().befor(vpInDB.getStartDateTime()) || 

(vopSkuHybrisModel.getEndDateTime().after(vpInDB.getEndDateTime())))

********************************* 不积跬步无以至千里,不积小流无以成江海 *********************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值