初始时间= 22:00:00,最后时间= 23:59:59。 如果当前时间是,请说23:00:00然后我将获得成功消息,否则将显示错误消息。我将这个时间与系统时间进行比较。
我的代码:
//retrieving the system time in string format
SimpleDateFormat sdfDate = new SimpleDateFormat("HH:mm:ss");
Date date = new Date();
String s=sdfDate.format(date);
//Initial and final predefined time
String ten ="22:00:00";
String twelve ="23:59:59";
//comparing with the system time
try{
if(s.compareTo("twelve")<0 && s.compareTo("ten")>0 ){
out.print("success");
}else{
out.print("failed");
}
}catch(Exception l){
System.out.println(l.toString());
}
我试图在系统时间是23:45:00时检查它。我还通过打印out.print(""+s);
确认了时间。但我收到了失败的消息。我不知道我的循环是否有效。
我该怎么做才能解决这个问题?
答案 0 :(得分:2)
如果您要比较小时数,请不要使用字符串,请使用正确的类型。
在Java中你有:
java.time.LocalTime
org.threeten.bp.LocalTime
(来自外部lib:http://www.threeten.org/threetenbp/)你可以做到:
LocalTime ten = LocalTime.parse("22:00:00");
LocalTime twelve = LocalTime.parse("23:59:59");
// current time
LocalTime now = LocalTime.now();
// compare
if (now.isBefore(twelve) && now.isAfter(ten)) {
// succcess
}
要获取当前时间,您还可以将now
方法与时区一起使用(例如:LocalTime.now(ZoneId.of("America/New_York"))
),如果您需要某个特定位置的时间(now()
没有参数将使用JVM默认时区)。
将字符串转换为表示您正在使用的数据的类型更加可靠。另请注意,此API使用isAfter
和isBefore
等有意义的方法名称,使代码更容易,更易读。
比较字符串可能有效,但使用正确的类型效果会更好。
答案 1 :(得分:0)
试试这个:
if(s.compareTo(twelve) < 0 && s.compareTo(ten) > 0)
通过在twelve
和ten
周围加上引号,您可以与字符串"twelve"
和"ten"
进行比较,而不是引用变量twelve
和{ {1}}你在程序中定义了更多。