时间比较
2022-09-01 06:24:42
我有时间,它必须由用户以该格式输入。hh:mm
但是,我想比较时间(例如11:22)是在上午10点到下午6点之间吗?但是我该如何比较呢?
我有时间,它必须由用户以该格式输入。hh:mm
但是,我想比较时间(例如11:22)是在上午10点到下午6点之间吗?但是我该如何比较呢?
Java(还没有)有一个好的内置类(它有一个用于JDBC查询的类,但这不是你想要的)。Time
一种选择是使用JodaTime API及其LocalTime类。
坚持使用内置的Java API,你就会陷入java.util.Date的困境。您可以使用 SimpleDateFormat 来解析时间,然后比较函数查看它是在其他时间之前还是之后:Date
SimpleDateFormat parser = new SimpleDateFormat("HH:mm");
Date ten = parser.parse("10:00");
Date eighteen = parser.parse("18:00");
try {
Date userDate = parser.parse(someOtherDate);
if (userDate.after(ten) && userDate.before(eighteen)) {
...
}
} catch (ParseException e) {
// Invalid date was entered
}
或者,您可以只使用一些字符串操作,也许是正则表达式来提取小时和分钟部分,将它们转换为数字并进行数字比较:
Pattern p = Pattern.compile("(\d{2}):(\d{2})");
Matcher m = p.matcher(userString);
if (m.matches() ) {
String hourString = m.group(1);
String minuteString = m.group(2);
int hour = Integer.parseInt(hourString);
int minute = Integer.parseInt(minuteString);
if (hour >= 10 && hour <= 18) {
...
}
}
这完全取决于你想要完成什么。
使用 Java 8+,您可以使用新的 Java 时间 API:
解析时间:
LocalTime time = LocalTime.parse("11:22")
要进行日期比较,您必须和 - 请注意,这些方法是严格的LocalTime::isBefore
LocalTime::isAfter
所以你的问题就简单了:
public static void main(String[] args) {
LocalTime time = LocalTime.parse("11:22");
System.out.println(isBetween(time, LocalTime.of(10, 0), LocalTime.of(18, 0)));
}
public static boolean isBetween(LocalTime candidate, LocalTime start, LocalTime end) {
return !candidate.isBefore(start) && !candidate.isAfter(end); // Inclusive.
}
对于包含性开头但排他性结尾(半开),请使用此行。
return !candidate.isBefore(start) && candidate.isBefore(end); // Exclusive of end.