java判断一组日期中是否有连续日期的方法

最近有个需求,判断某个人在一段时间内是否有连续打卡,以及连续打卡大于几天,对于这个问题我当时的思路大致是把日期排序后转化为数字或者转化为天数(或秒数),遍历后逐个相减,若中间差有大于1的说明没有连续,并计算之前的连续为1的时间组,但这会产生一个问题,首先是隔月隔年打卡的问题,其次中间会隐藏潜在的逻辑,需要从中梳理,大致写完以后想看看其他高手们更简单的方法,以便学习运用:

java.time.LocalDate看到这个类,其实用的比较多但是了解的还是挺少的,果然还是涨了见识、

首先将数组转换为LocalDate对象列表。

String[] dates = {
       "2004/1/23" ,"2004/1/24" ,"2004/1/25" ,
       "2004/1/26" ,"2004/1/29" ,"2004/2/11" ,
       "2004/2/17" ,"2004/2/18" ,"2004/2/19" ,"2004/3/7" };

DateTimeFormatter f = DateTimeFormatter.ofPattern ("uuuu/M/d" );
List < LocalDate > localdates = new ArrayList <> ( dates.length );
for ( String input : dates ) {
    LocalDate ld = LocalDate.parse ( input, f );
    localdates.add ( ld );
}
Integer tripletCount = 0;
List< LocalDate > tripletDates = new ArrayList<>();
LocalDate x = null;
LocalDate y = null;
for ( LocalDate z : localdates ) {
    if ( null == x ) { x = z; continue; }
    if ( null == y ) { y = z; continue; }
    if ( z.minusDays ( 1 ).isEqual ( y ) && z.minusDays ( 2 ).isEqual ( x ) ) {
        tripletCount= ( tripletCount + 1 );
        tripletDates.add( z );
    }
    // Prepare for next loop.
    x = y ;
    y = z ;
}

 tripletCount可以根据自己的需要来变换数据,逻辑清晰,代码简单明了,但是根据实际使用情况,本人的对部分细节做了修改,使其在此基础上判断连续日期更加合理化和实用化,其中考虑了几个问题。

首先,一般传入的日期是连续递增,但也有可能逐渐递减。

其次,增加扩展性。判断连续三次只是一个简单的需求,其后续可能会使用该代码做多次连续判断,此项须实现。

改造后的代码逻辑之后附上

方法转自:关于Java:Java – 检查数组是否包含3个连续日期 | 码农家园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值