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

目录

文章目录

  • java实现判断当前时间,是否在三月的最后一个星期日到十月的最后一个星期六
    • 1 问题提出
    • 2 问题解决

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

1 问题提出

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

java实现判断当前时间,是否在指定时间范围_第1张图片

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

你可能感兴趣的:(JDK8新特征,java,后端)