使用HH
而不是hh
在你的SimpleDateFormat
:
DateFormat datos = new SimpleDateFormat("HH:mm:ss");
hh
是 12 小时制(小时从 1 到 12)。
HH
是 24 小时制(小时从 0 到 23)。
但除此之外,还有其他问题。类Date
不是很适合只包含一个时间。如果这样做,它将被解析为 01-01-1970 和指定的时间。所以 18:01:23 变成 01-01-1970, 18:01:23 和 00:16:23 变成 01-01-1970, 00:16:23。您可能想将 18:01:23 与第二天的 00:16:23 进行比较。
尝试这样的事情:
String actual = "18:01:23";
String limit = "00:16:23";
String[] parts = actual.split(":");
Calendar cal1 = Calendar.getInstance();
cal1.set(Calendar.HOUR_OF_DAY, Integer.parseInt(parts[0]));
cal1.set(Calendar.MINUTE, Integer.parseInt(parts[1]));
cal1.set(Calendar.SECOND, Integer.parseInt(parts[2]));
parts = limit.split(":");
Calendar cal2 = Calendar.getInstance();
cal2.set(Calendar.HOUR_OF_DAY, Integer.parseInt(parts[0]));
cal2.set(Calendar.MINUTE, Integer.parseInt(parts[1]));
cal2.set(Calendar.SECOND, Integer.parseInt(parts[2]));
// Add 1 day because you mean 00:16:23 the next day
cal2.add(Calendar.DATE, 1);
if (cal1.before(cal2)) {
System.out.println("Not yet at the limit");
}
Joda Time库是一个流行的 Java 日期和时间库,它比标准的 Java 日期和日历 API 设计得更好;如果您必须在 Java 中处理日期和时间,请考虑使用它。
使用 Joda Time,您可以这样做:
String actual = "18:01:23";
String limit = "00:16:23";
DateTimeFormatter df = DateTimeFormat.forPattern("HH:mm:ss");
DateTime ac = df.parseLocalTime(actual).toDateTimeToday();
DateTime lim = df.parseLocalTime(limit).toDateTimeToday().plusDays(1);
if (ac.isBefore(lim)) {
System.out.println("Not yet at the limit");
}