在业务中常会遇到对于一些事件、规则等等有设置生效时间,它们无非也就两种大类型
- 时间是具体的时间,比如(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; } }