利用HH
代わりのhh
:
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
ok ...だから私はそれを変更してDateクラスを使用します。私はそれが時の番号23を0に渡す場合、タイムリミットを計算するとき1日を追加します。それは正しいでしょう。ありがとうございました – user1297810