美文网首页Android深入
Java 如何判断当前时间是否在指定时间段内

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

作者: 冻柠猹 | 来源:发表于2019-08-14 23:37 被阅读0次

    前言

    项目中有需求是实现类似与手机中勿扰模式的逻辑,判断当前时间点是否属于指定时间段(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 如何判断当前时间是否在指定时间段内

        本文链接:https://www.haomeiwen.com/subject/qhihjctx.html