java实现判断当前时间,是否在指定时间范围

目录

java实现判断当前时间,是否在三月的最后一个星期日到十月的最后一个星期六

1 问题提出

事情是这样的同事老哥给了我一张图,让我写个方法判断当天是冬春季航班计划,还是夏秋季航班计划。

link

2 问题解决

2.1 第一个就想到用Calendar方法,进行时间判断,首先获取到3月最后一个星期日和10月最后一个星期六 两个时间点,然后将当前时间与两个时间点进行比对。

 /**
     *  夏秋季航班计划:3月的最后一个星期日至10月的最后一个星期六。 return true
     *  冬春季航班计划:从10月的最后一个星期日到第二年3月的最后一个星期六 。 return false
     */
    public static boolean judgeFlightSeason(){
        //得到3月份 最后一个星期日的 00:00:00
        Calendar minTime = Calendar.getInstance();
        minTime.set(Calendar.MONTH,Calendar.MARCH);
        minTime.add(Calendar.MONTH, 1);//月份+1
        minTime.set(Calendar.DAY_OF_MONTH, 1);//天设为一个月的第一天
        minTime.add(Calendar.DAY_OF_MONTH, -1);//本月最后一天
        minTime.add(Calendar.DAY_OF_MONTH,1 - minTime.get(Calendar.DAY_OF_WEEK));//根据月末最后一天是星期几,向前偏移至最近的周日
        minTime.set(Calendar.HOUR_OF_DAY,0);
        minTime.set(Calendar.MINUTE,0);
        minTime.set(Calendar.SECOND,0);
        minTime.set(Calendar.MILLISECOND,0);
        //得到10月份最后一个星期六的 23:59:59
        Calendar maxTime = Calendar.getInstance();
        maxTime.set(Calendar.MONTH,Calendar.OCTOBER);
        maxTime.add(Calendar.MONTH, 1);//月份+1
        maxTime.set(Calendar.DAY_OF_MONTH, 1);//天设为一个月的第一天
        maxTime.add(Calendar.DAY_OF_MONTH, -1);//本月最后一天
        maxTime.add(Calendar.DAY_OF_MONTH,-maxTime.get(Calendar.DAY_OF_WEEK) % 7);//根据月末最后一天是星期几,向前偏移至最近的周六
        maxTime.set(Calendar.HOUR_OF_DAY,23);
        maxTime.set(Calendar.MINUTE,59);
        maxTime.set(Calendar.SECOND,59);
        maxTime.set(Calendar.MILLISECOND,999);

        //判断当前时间是否在夏秋航班计划时间范围
        Calendar nowTime = Calendar.getInstance();
        return  (nowTime.after(minTime)||nowTime.equals(minTime))&&(nowTime.before(maxTime)||nowTime.equals(maxTime));
    }

2.2 但是上面代码太过繁琐,Calendar需要设置时间具体到时分秒。可以使用JDK8新增加的时间处理类,思路一样。以下为修改后得代码:

public static boolean judgeFlightSeason(){
        LocalDate nowTime  = LocalDate.now();
        //获取3月份 最后一个星期日
        LocalDate marchDay = nowTime.withMonth(3);//设置月份为3月
        LocalDate lastDayOfMarch = marchDay.with(TemporalAdjusters.lastDayOfMonth());//本月最后一天
        //根据月末最后一天是星期几,向前偏移至最近的周日
        LocalDate minTime = lastDayOfMarch.plus( - lastDayOfMarch.get(ChronoField.DAY_OF_WEEK)%7,ChronoUnit.DAYS);

        //获取10月份 最后一个星期六
        LocalDate octoberDay = nowTime.withMonth(10);
        LocalDate lastDayOfOctober = octoberDay.with(TemporalAdjusters.lastDayOfMonth());
        LocalDate maxTime = lastDayOfOctober.plus( - (lastDayOfOctober.get(ChronoField.DAY_OF_WEEK)+1)%7, ChronoUnit.DAYS);

        //判断当前时间是否在夏秋航班计划时间范围
        return (nowTime.isAfter(minTime)||nowTime.equals(minTime))&&(nowTime.isBefore(maxTime)||nowTime.equals(maxTime));
    }

参考文章:
https://blog.csdn.net/dingnate/article/details/38091137

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值