使用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中的日期和時間,請考慮使用它。
有了約達時間,你可以這樣做:
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");
}
如果不指定日期,這是正常的,實際的被認爲是限制後...實現你想要的唯一方法是指定該限制是實際後一天(默認情況下,日期會認爲它是同一天) – Vinze 2012-04-10 09:23:24
好的....所以我會改變它並使用Date類。在計算時間限制時,如果它將小時數23傳遞給0,我將添加1天。所以這將是正確的。謝謝 – user1297810 2012-04-10 11:46:11