0

我正在做一些需要用户在终端窗口中输入值的事情,例如:

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

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

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

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

    public String getWorkHours()
    {
        return hours;
    }

非常感谢任何帮助。

干杯

4

3 回答 3

2

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

尽管如此,解决方案几乎相同。

  • 将开始时间(日期/时间)转换为日历实例。
  • 将结束时间(日期/时间)转换为 Calendar 实例。
  • 使用 Calendar after 和 before 方法确定输入的时间(日期/时间)是否在开始时间和结束时间之间。
于 2013-03-15T15:54:09.687 回答
1

我不会为你做作业,但我会为你提供以下建议:

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

我希望这可以帮助你。

于 2013-03-15T15:58:27.187 回答
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


 }
于 2013-03-15T16:24:33.460 回答