我正在尝试以(HH:SS)格式比较我的字符串时间
字符串timestart = 08:00 字符串时间= 21:00
我正在尝试构建代码和逻辑,但是不确定时间比较是否正确,我想检查这两个时间字符串是否在timestart条件下大于或大于 等于上午06:00,并且时间小于或等于22:00
代码
int endday = Integer.parseInt(time_to);
int startday = Integer.parseInt(time_start);
if ((startday >= '06:00') && (startday <= '22:00')) &&
((endday >= '06:00') && (endday <= '22:00')) {
System.out.print("passed");
}else{
System.out.print("no");
}
答案 0 :(得分:1)
您可以使用Java 8 Date / Time API,
`DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
String time_start = "08:00";
String time_to = "22:00";
if (LocalTime.parse(time_start, formatter).
isAfter(LocalTime.parse("06:00", formatter)) &&
LocalTime.parse("21:00", formatter).
isBefore(LocalTime.parse(time_to, formatter))) {
System.out.print("passed");
}else{
System.out.print("no");
}`
输出
passed
答案 1 :(得分:1)
Vimukthi_R的答案有助于向您展示正确的库类和方法,并且几乎是正确的。所以我的版本与此类似,但我想向您展示一些变化。
LocalTime minTime = LocalTime.of(6, 0);
LocalTime maxTime = LocalTime.of(22, 0);
String timeStart = "08:00";
String timeEnd = "21:00";
LocalTime startDay = LocalTime.parse(timeStart);
LocalTime endDay = LocalTime.parse(timeEnd);
if (startDay.isBefore(minTime)
|| endDay.isBefore(startDay)
|| endDay.isAfter(maxTime)) {
System.out.print("no");
} else {
System.out.print("passed");
}
由于您想接受6到22个范围内的开始和结束时间,包括时间范围 ,因此isBefore
和isAfter
并没有真正给您确切的答案。我们本来需要方法isBeforeOrOn
和isOnOrAfter
,但它们不存在。我没有为此目的编写辅助方法,而是将整个逻辑颠倒了:如果开始时间是 6之前或结束时间 22,则验证失败
将6和22定义为LocalTime
对象可以解析字符串,但是我更喜欢of
方法(请自行选择)。
对于解析,我们不需要格式化程序,因为您的字符串采用LocalTime
解析为默认值的标准ISO 8601格式。当然,人们可能更喜欢格式化程序,因为它使格式在代码中变得明确。再次选择自己的偏好。
我假设结束时间不能早于开始时间,这将条件简化为三个子条件,而不是四个子条件。如果您不希望这样做,我相信您可以写出四个子条件。
我不确定我的时间比较是否正确
不,您的比较不正确。在Java中,您可以使用>=
和<=
来比较数字,但不能比较字符串或其他对象,例如LocalTime
。另外,正如Johannes Kuhn在评论中说的那样,您无法将08:00
之类的字符串解析为整数。 FallingCoder在评论中说了其余的内容:
此外,单引号仅用于字符。 不是字符串。
链接: Oracle tutorial: Date Time解释了如何使用java.time。