Java时间 - 在终端输入并查看是否在一个范围内

时间:2013-03-15 15:39:12

标签: java time

我正在处理我需要用户在终端窗口中输入值的内容,例如:

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

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

目前我只是把时间拉成一个字符串:

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

    public String getWorkHours()
    {
        return hours;
    }

任何帮助都非常感激。

干杯

3 个答案:

答案 0 :(得分:2)

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

然而,解决方案几乎相同。

  • 将开始时间(日期/时间)转换为Calendar实例。
  • 将结束时间(日期/时间)转换为日历实例。
  • 使用方法之前和之后的日历来确定输入的时间(日期/时间)是否在开始时间和结束时间之间。

答案 1 :(得分:1)

我不打算为你做功课,但我会给你以下建议:

  1. 您需要从终端获取输入(查看System.in
  2. 您将需要解析输入。为此,您需要确定什么是有效输入。 “0800”,“08:00”,“08.00”,“8:00”,“8:00 AM”,“07:60”,“8点”......哪些是有效的,哪个你会拒绝吗?你的错误处理策略是什么?只是炸毁应用程序,或者向用户提供一条好消息?
  3. 您要将输入解析为什么数据类型?您可能有四个intsstartHoursstartMinsendHoursendMins。或者您可能会使用Java的DateCalendar对象。还有其他选择,您需要选择最适合您的选项。
  4. 你关心秒吗?毫秒?
  5. 一旦解析了办公时间,您将需要一些方法,给定时间确定您是在室内还是室外。据推测,这是一个单独的输入。您需要解析它(提示,使用实用方法进行解析,并在此重用它),然后将其传递给执行某些计算的方法。像bool isInOfficeHours(int hours, in mins)这样的东西。此方法的参数应该与您用于存储办公时间的数据类型匹配。
  6. 我希望这会对你有所帮助。

答案 2 :(得分:0)

下面是将在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


 }