在java中输入有效的时间格式

时间:2017-07-18 10:30:21

标签: java

我目前正在担任软件测试人员。我有一个场景来测试时间格式。

我想使用java程序输入有效的时间格式。我累了,但无法得到一个好的答案。

我想以正确的格式输入时间(hh:mm:ss)。它接受格式为HH:MM:SS的时间。时间应该用冒号和冒号冒号分隔,没有其他字符如/, - 应该打印无效。 小时范围从0到23,分钟范围从0到59,第二小时范围从0到59.

只有数字被加入,如果我输入字符,它将打印无效的时间格式。

这两个值20:62:00和20:80:00,也是无效的,因为分钟的范围应该是0到59.

这是我试过的:

import java.util.Scanner;

public class AlarmTime {
public static void main(String args[]) {
     Scanner s = new Scanner(System.in);

    System.out.println("Enter the number of test case");
    int a = s.nextInt();
    System.out.println("Enter the HH");
    int h = s.nextInt();
    System.out.println("Enter the MM");
    int m = s.nextInt();
    System.out.println("Enter the SS");
    int ss = s.nextInt();
    System.out.println("Time is" + h + ":" + m + ":" + ss);

    if (h >= 0 && h <= 23 && m >= 0 && m <= 59 && ss >= 0 && ss <= 59) {
        System.out.println("Valid test case" + h + ":" + m + ":" + ss);
    } else {
        System.out.println("invalid test case");
    }
  }
}

输出:

Enter the number of test case
4
Enter the HH
22
Enter the MM
33
Enter the SS
44
Time is22:33:44
Valid test case22:33:44

Process finished with exit code 0

在这里,我将测试用例编写为4,然后再编写下一个测试用例2.我还需要为输入字符等无效输入编写测试用例。

6 个答案:

答案 0 :(得分:3)

if(0<=h<=23 ||0<=m<=59||0<=ss<=59)

不是有效的语法。您无法链接<=运算符。

您应该比较每个操作数的一对一,并在比较之间使用&&运算符。

这个

if(0<=h<=23)

应该是:

if(0<=h && h<=23)

无论如何,这不是一种直接而可靠的方式来完成任务 请使用DateTimeFormatter而不是int,使用包含输入格式正确的String变量:

StringBuilder dateInput = new StringBuilder();
System.out.println("Enter the number of test case");
int a = dateInput.append(s.next());

System.out.println("Enter the HH");
dateInput.append(s.next()).append(":");

System.out.println("Enter the MM");
dateInput.append(s.next()).append(":");

System.out.println("Enter the SS");
dateInput.append(s.next());

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");

try{
   LocalTime time = LocalTime.parse(dateInput.toString(), formatter);
   System.out.println("Valid");
 }
 catch(DateTimeParseException e){
     System.out.println("Invalid");
 }

答案 1 :(得分:2)

正如其他答案清楚地指出的那样,你的条件错了。转到if (hour <= 0)然后打印“有效”是完全错误的。

但是除了那些简单的句法问题之外:你在这里重新发明。除非这是您自己编写此类代码的某种练习,否则您将使用Java日期/时间API的强大功能:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
String str = "13:42:10";
LocalTime time = LocalTime.parse(str, formatter);

当无法解析传入的字符串时,parse()调用将引发异常。见其javadoc。您还想详细研究可用的patterns

答案 2 :(得分:0)

错误在于此处,必须是and条件,而不是or。 小时必须低于24,分钟必须低于60,秒必须低于60。

if(0<=h<=23 && 0<=m<=59 && 0<=ss<=59){
    System.out.println("Valid test case"+h+":"+m+":"+ss);
}
else
{
    System.out.println("invalid test case");
}

答案 3 :(得分:0)

您应该接受hh:mm:ss而不是将其作为3个变量,然后通过尝试将其解析为日期来验证它。

以下是:

System.out.println("Enter date as HH:MM:SS");
String a = s.nextString();
try { 
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
    Date parsedDate = dateFormat.parse("12-12-2017 "+yourString);          
    // Parsing success, means a valid test case.
    System.out.println("Valid test case : "+a);
} catch(Exception e) {
    // Parsing failed, so the case is invalid!
    System.out.println("Invalid");
}

答案 4 :(得分:0)

使用SimpleDateFormat并将其lenient属性设置为false。然后检查parse方法是否返回null(这表示无效日期)。请参阅此处的API文档:http://docs.oracle.com/javase/8/docs/api/java/text/DateFormat.html#setLenient-boolean-

答案 5 :(得分:0)

neetha。

您的代码不正确。验证必须如下:

if (h >= 0 && h <= 23 && m >= 0 && m <= 59 && ss >= 0 && ss <= 59) {
    System.out.println("Valid test case" + h + ":" + m + ":" + ss);
}

无论如何,最好使用像LocalTime这样的类(如果你使用Java 8)来管理时间:

LocalTime time = LocalTime.of(h, m, ss);

如果时间无效,此代码会抛出java.time.DateTimeException