Java时间-在终端中输入,查看是否在某个范围内

Java时间-在终端中输入,查看是否在某个范围内,java,time,Java,Time,我正在进行一些工作,需要用户在终端窗口中输入值,例如: 开始时间:0800 结束时间:1200 然后我需要检查这个人的开始和结束时间是否在一个范围内。因此,如果工作时间是0900-1700,现在是11:45,上面的用户将显示为可用,而如果是1201,上面的用户将不可用 目前,我只是将时间作为字符串拉入: void setWorkHours(String hrs) { this.hours=hrs; } public String getWorkHours

我正在进行一些工作,需要用户在终端窗口中输入值,例如:

开始时间:
0800
结束时间:
1200

然后我需要检查这个人的开始和结束时间是否在一个范围内。因此,如果工作时间是0900-1700,现在是11:45,上面的用户将显示为可用,而如果是1201,上面的用户将不可用

目前,我只是将时间作为字符串拉入:

void setWorkHours(String hrs)
    {
        this.hours=hrs;
    }

    public String getWorkHours()
    {
        return hours;
    }
非常感谢您的帮助


干杯

如果用户可以输入开始日期和时间以及结束日期和时间,那就更好了。这将允许用户一次性输入他们的整个星期

尽管如此,解决方案基本相同

  • 将开始时间(日期/时间)转换为实例
  • 将结束时间(日期/时间)转换为日历实例
  • 使用Calendar after和before方法确定输入的时间(日期/时间)是否介于开始时间和结束时间之间

如果用户可以输入开始日期和时间以及结束日期和时间,那就更好了。这将允许用户一次性输入他们的整个星期

尽管如此,解决方案基本相同

  • 将开始时间(日期/时间)转换为实例
  • 将结束时间(日期/时间)转换为日历实例
  • 使用Calendar after和before方法确定输入的时间(日期/时间)是否介于开始时间和结束时间之间

    • 我不会为你做家庭作业,但我会给你以下建议:

    • 您需要从终端获取输入(查看
      System.in
    • 您将需要解析输入。为此,您需要确定什么是有效输入。“0800”,“08:00”,“08.00”,“8:00”,“8:00 AM”,“07:60”,“8:00”。。。以下哪项是有效的,您会拒绝哪项?您的错误处理策略是什么?只是放大应用程序,还是向用户提供一条好消息
    • 您要将输入解析为什么数据类型?您可能有四个
      整数
      开始时间
      开始时间
      结束时间
      结束分钟
      。或者您可以使用Java的
      日期
      日历
      对象。还有其他选择,你需要选择一个最适合你的
    • 你在乎秒吗?毫秒
    • 一旦解析了办公时间,您就需要一些方法来确定给定的时间是在办公时间内还是在办公时间外。这大概是一个单独的输入。您需要对其进行解析(提示,使用实用工具方法进行解析,并在此处重用),然后将其传递给执行某些计算的方法。类似于
      bool的是办公时间(整数小时,以分钟为单位)
      。此方法的参数可能与用于存储办公时间的数据类型相匹配

    • 我希望这对你有帮助。

      我不会为你做家庭作业,但我会给你以下建议:

    • 您需要从终端获取输入(查看
      System.in
    • 您将需要解析输入。为此,您需要确定什么是有效输入。“0800”,“08:00”,“08.00”,“8:00”,“8:00 AM”,“07:60”,“8:00”。。。以下哪项是有效的,您会拒绝哪项?您的错误处理策略是什么?只是放大应用程序,还是向用户提供一条好消息
    • 您要将输入解析为什么数据类型?您可能有四个
      整数
      开始时间
      开始时间
      结束时间
      结束分钟
      。或者您可以使用Java的
      日期
      日历
      对象。还有其他选择,你需要选择一个最适合你的
    • 你在乎秒吗?毫秒
    • 一旦解析了办公时间,您就需要一些方法来确定给定的时间是在办公时间内还是在办公时间外。这大概是一个单独的输入。您需要对其进行解析(提示,使用实用工具方法进行解析,并在此处重用),然后将其传递给执行某些计算的方法。类似于
      bool的是办公时间(整数小时,以分钟为单位)
      。此方法的参数可能与用于存储办公时间的数据类型相匹配

    • 我希望这对您有所帮助。

      下面的代码将在startTime和endTime中使用两个字符串,并将与范围对象进行比较,您必须定义您喜欢的范围。我已经放置了注释来解释代码

           /*
            * this method will split hhmm time into two parts. 
            */
       public String[] getTimeHHMM(String time){   
            String hhmm[] = new String[2];
      
            if(time !=null && time.length() > 1){
                hhmm[0] = time.substring(0, time.length() - 2);
                hhmm[1] = time.substring(time.length() - 2, time.length());
            }
            else{
                // time not formatted correctly so deal with here
                hhmm[0] = "";
                hhmm[1] = time;
            }
            return hhmm;
       }
      
           //assuming hrs is a string containing only one time in the format hhmm
           String startTime[] = getTimeHHMM(startTimeStr);
           String endTime[] = getTimeHHMM(endTimeStr);
      
      
          int startTimeHrs =  Integer.parseInt(startTime[0]);
           int startTimeMins = Integer.parseInt(startTime[1]);
      
           int endTimeHrs = Integer.parseInt(endTime[0]);
           int endTimeMins = Integer.parseInt(endTime[1]);
      
           Date start = new Date();
           Date end = new Date();
      
      
       Calendar start = Calendar.getInstance();
       start.set(Calendar.HOUR_OF_DAY, startHrs);
       start.set(Calendar.MINUTE, startMins );
      
       Calendar end = Calendar.getInstance();
       end.set(Calendar.HOUR_OF_DAY, endHrs);
       end.set(Calendar.MINUTE, endMins );
      
       ///lets say the range is startRange and endRange it should be Calendar instances, you will need to construct these as I did above with setting your range whatever you like
       Calendar endRange;
       Calendar startRange;
      
       if(start.compareTo(startRange) >= 0 && end.compareTo(endRange) <=0 ){
      
          // Here it means it is within working hours
      
      
       }
      
      /*
      *此方法将hhmm时间分为两部分。
      */
      公共字符串[]getTimeHHMM(字符串时间){
      字符串hhmm[]=新字符串[2];
      if(time!=null&&time.length()>1){
      hhmm[0]=时间子字符串(0,时间长度()-2);
      hhmm[1]=time.substring(time.length()-2,time.length());
      }
      否则{
      //时间格式不正确,请在此处处理
      hhmm[0]=“”;
      hhmm[1]=时间;
      }
      返回hhmm;
      }
      //假设hrs是一个仅包含一次hhmm格式的字符串
      字符串startTime[]=getTimeHHMM(startTimeStr);
      字符串endTime[]=getTimeHHMM(endTimeStr);
      int startTimeHrs=Integer.parseInt(startTime[0]);
      int startTimeMins=Integer.parseInt(startTime[1]);
      int endTimeHrs=Integer.parseInt(endTime[0]);
      int-endTimeMins=Integer.parseInt(endTime[1]);
      开始日期=新日期();
      日期结束=新日期();
      日历开始=Calendar.getInstance();
      开始.设置(日历.小时/天,开始);
      start.set(Calendar.MINUTE,startMins);
      日历结束=Calendar.getInstance();
      end.set(日历小时/天,endHrs);
      end.set(Calendar.MINUTE,endMins);
      ///假设范围是startRange,而endRange应该是Calendar instanc