计算当前时间是否在两个时间的范围内 - 时间格式HH:mm:ss
第一个方案是利用Date格式化取时分秒字符串, 再用字符串转时间, 再转毫秒数, 对比当前时间是否在两个时间的中间
第二个方案是获取时间的毫秒数,利用时分秒的毫秒数小于一天的毫秒数的特性, 取时间与一天毫秒数的余数,对比余数的大小
方案二避免了日期的来回转换,效率要远远大于方案一,方案一的执行时间是9毫秒,方案二的执行时间是1毫秒
注:这个数字仅仅是main方法执行的一次对比结果,不代表绝对时间
public static final boolean timeLegal(Date startTime, Date endTime) { try { SimpleDateFormat sf = new SimpleDateFormat(HH_MM_SS); long s = sf.parse(sf.format(startTime)).getTime(); long n = sf.parse(sf.format(new Date())).getTime(); long e = sf.parse(sf.format(endTime)).getTime(); return n >= s && n < e; } catch (ParseException e) { throw new RuntimeException(e); } } public static final boolean timeLegal(long startTime, long endTime) { long day = 24 * 60 * 60 * 1000; long s = startTime % day; long n = new Date().getTime() % day; long e = endTime % day; return n >= s && n < e; }
public static void main(String[] args) { Date startTime = DateUtil.parse("2023-05-16 14:38:00"); Date endTime = DateUtil.parse("2023-05-16 17:21:38"); long start = new Date().getTime(); boolean b = timeLegal(startTime, endTime); System.out.println(b); System.out.println(new Date().getTime() - start); }
public static void main(String[] args) { Date startTime = DateUtil.parse("2023-05-16 14:38:00"); Date endTime = DateUtil.parse("2023-05-16 17:21:38"); long start = new Date().getTime(); boolean b = timeLegal(startTime.getTime(), endTime.getTime()); System.out.println(b); System.out.println(new Date().getTime() - start); }