比较java中的小时数

use*_*810 4 java time date-format hour

首先原谅我的英语:-(

我在java上有几个小时的问题.让我们通过一个例子看到它:

DateFormat datos = new SimpleDateFormat ("hh:mm:ss");
        Date ac, lim;
        String actual,limit;
        actual="18:01:23";
        limit="00:16:23";

        ac=datos.parse(actual);
        lim=datos.parse(limit);


        if(ac.compareTo(lim)==-1){.......
Run Code Online (Sandbox Code Playgroud)

我需要解决这种情况,其中限制已经过了午夜,而实际小时则是午夜之前.我的程序说实际已经达到极限并且它不正确,因为在这个例子中,它还有6个小时才能完成.

我试图用DateFormat类解决它,但它没有看到这种情况.我也尝试使用Time类,但不推荐使用它的方法.

我怎么解决这个问题?

Jes*_*per 13

使用HH而不是hh在你的SimpleDateFormat:

DateFormat datos = new SimpleDateFormat("HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)

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");
}
Run Code Online (Sandbox Code Playgroud)

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");
}
Run Code Online (Sandbox Code Playgroud)