在业务中常会遇到对于一些事件、规则等等有设置生效时间,它们无非也就两种大类型
- 时间是具体的时间,比如(2024-06-28 10:00:00到 2024-06-29 20:00:00)
这种类型可以采取的方式有很多,比如可以直接转换为时间戳比较
方法:
-
前端传值类型 yyyy-mm-dd 和 hh:mm:ss
-
数据库类型选用Date
-
类型转换
/*** 将日期字符串转换成日期对象* @param yyyyMMdd 格式是yyyy-mm-dd的字符串* @param hhmmss 格式是hh:mm:ss的字符串* @return*/public static Date converToDate(String yyyyMMdd, String hhmmss){String[] days = yyyyMMdd.split("-");String[] time = hhmmss.split(":");LocalDateTime localDateTime = LocalDateTime.of(Integer.parseInt(days[0]), Integer.valueOf(days[1]), Integer.parseInt(days[2]),Integer.parseInt(time[0]), Integer.parseInt(time[1]), Integer.parseInt(time[2]));Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());return date;}
-
生效时间判断,判断当前时间是否在时效内
直接转换为时间戳进行判断即可
- 时间是一天中的某个时刻,比如 周一至周五的09:00 到 17:00
这种类型处理起来相对比较复杂,需要对周几和时间段单独判断
-
前端传值类型为(1,2,3)表示周一周二周三 和 hh:mm
-
数据库用两个字符类型存储
-
判断是否处于周内时间段
/*** 判断当前日期是否在指定的日期范围内* @param days 以逗号分隔,(1,2,3,4,5) = 周一至周五* @return*/public static boolean judgeDay(String days){// 获取当前日期LocalDate today = LocalDate.now();// 获取当前星期几DayOfWeek dayOfWeek = today.getDayOfWeek();int value = dayOfWeek.getValue();return days.contains(String.valueOf(value));}
-
判断当前时间是否处于合法时间段内
/*** 判断当前时间是否处于开始时间和结束时间之间* 1.获取开始时间S、结束时间E、当前时间N* 2.如果S<E,直接判断* 3.如果S>E,则E=E+24,如果N<S,则N+=24* 4.继续判断* @param startTime hh:ss* @param endTime hh:ss* @return*/public static boolean validateTime(String startTime,String endTime){Date date = new Date();int hours = date.getHours();int minutes = date.getMinutes();int nowTime = hours * 100 + minutes;int sTime = converTime(startTime);int eTime = converTime(endTime);if(sTime <= eTime){return sTime <= nowTime && nowTime <= eTime;}else{eTime += 2400;if(nowTime < sTime){nowTime += 2400;}return sTime <= nowTime && nowTime <= eTime;}}