Java 如何判断当前时间是否在指定时间段内

前言

项目中有需求是实现类似与手机中勿扰模式的逻辑,判断当前时间点是否属于指定时间段(24H)。

实现思路

  1. 获取当前时间、开始时间、结束时间的小时数hour、分钟数minute
  2. 首先比较hour,
    i. endHour > startHour,即结束时间在开始时间之后,说明这个时间段的起止时间都在同一天。
    ii. endHour < startHour,即结束时间在开始时间之前,说明这个时间段是从今天开始,明天结束。
     a. 若当前日期在startHour之后 || 当前日期在endHour之前,返回true
     b. 否则返回false
    iii. endHour = startHour,如果开始时间与结束时间小时数一样,就需要比较分钟数了,与比较小时数同理。
    /*
    *  判断当前时间是否在设置的dark mode时间段内
    *  @param date1: 开始时间(hh:mm)
    *  @param date2: 结束时间(hh:mm)
    */
    private boolean isBelongPeriodTime(String date1, String date2){
        SimpleDateFormat df = new SimpleDateFormat("HH:mm");
        Date currentTime = new Date(System.currentTimeMillis());
        Date startTimeDate;
        Date endTimeDate;
        Calendar date = Calendar.getInstance();
        Calendar begin = Calendar.getInstance();
        Calendar end = Calendar.getInstance();
        try{
            date.setTime(df.parse(df.format(currentTime)));
            startTimeDate = df.parse(date1);
            endTimeDate = df.parse(date2);
            begin.setTime(startTimeDate); 
            end.setTime(endTimeDate);
            if (endTimeDate.getHours() < startTimeDate.getHours()) {
                if (date.after(begin) || date.before(end)) {
                    Log.d(TAG, "current time is belong to " + date1 + " - " + date2);
                    return true;
                }else {
                    Log.d(TAG, "current time isn't belong to " + date1 + " - " + date2);
                    return false;
                }
            }else if(endTimeDate.getHours() == startTimeDate.getHours()){
                if (endTimeDate.getMinutes() < startTimeDate.getMinutes()) {
                    if (date.after(begin) || date.before(end)) {
                        Log.d(TAG, "current time is belong to " + date1 + " - " + date2);
                        return true;
                    }else {
                        Log.d(TAG, "current time isn't belong to " + date1 + " - " + date2);
                        return false;
                    }
                }
            }
        }catch(ParseException e){
            e.printStackTrace();
        }
        //这里是时间段的起止都在同一天的情况,只需要判断当前时间是否在这个时间段内即可
        if (date.after(begin) && date.before(end)) {
            Log.d(TAG, "current time is belong to " + date1 + " - " + date2);
            return true;
        }else {
            Log.d(TAG, "current time isn't belong to " + date1 + " - " + date2);
            return false;
        }
    }

记个Date的after()方法应用,以后复制用

/*
    ** 判断当前时间是否在传入的时间之后
    */
    private boolean isAfterTime(String time){
        SimpleDateFormat df = new SimpleDateFormat("HH:mm");
        Date currentTime = new Date(System.currentTimeMillis());
        Calendar curTime = Calendar.getInstance();
        Calendar scaTime = Calendar.getInstance();
        try{
            Date timeScale = df.parse(time);
            curTime.setTime(df.parse(df.format(currentTime)));
            scaTime.setTime(timeScale);
        }catch (ParseException e){
            e.printStackTrace();
        }
        if (curTime.after(scaTime)) {
            return true;
        }else {
            return false;
        }
    }

你可能感兴趣的:(Java 如何判断当前时间是否在指定时间段内)