计算当前时间是否在两个时间的范围内 - 时间格式HH:mm:ss

发布时间 2023-05-24 15:23:00作者: 1156740846

第一个方案是利用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);

    }