目录
文章目录
- java实现判断当前时间,是否在三月的最后一个星期日到十月的最后一个星期六
-
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)