我如何比较时间?

How can I compare hours?

我正在开发一个应用,我需要知道如何比较两个小时。

例如,我的商店在 6:30 上午开门,在 5:00 下午关门。

我需要在 TextView 中表明我的商店在下午 5 点后关门,而在 6:30 之后我的商店在周一至周五营业。

我该怎么做?这是我的尝试:

public void timer() {
    Calendar c = Calendar.getInstance();
    int timeOfDay = c.get(Calendar.HOUR_OF_DAY);
    int open = 6:30; // 1 ERROR HERE WITH ":"
    int close = 17;

    if (timeOfDay < close) {
        hour.setText.("OPEN");
    }
}

但是我遇到了多个错误。当我把 06:30 和 ":" 放在一起时,一个 in int 打开;周一到周五限两个

感谢您的帮助。

常数HOUR_OF_DAY是一个整数,只代表小时。我建议使用 getTime() (see this link) 方法,然后使用返回的 Date 对象。

HOUR_OF_DAY field 是这样工作的。

10:04:15 PM the HOUR_OF_DAY is 22.

你无法得到 6:30 am 因为它只告诉你现在是几点,不是分钟。

您可以通过拨打 MINUTE 获得会议记录。

一些变化是:

public void timer () {
    Calendar c = Calendar.getInstance();
    int timeOfDay = c.get(Calendar.HOUR_OF_DAY);
    int minuteOfHour = c.get(Calendar.MINUTE); -> same as Hour
    int open = 6; -> you shouldn't use ':' with an int
    int openMinutes = 30;
    int close = 17;

    if(timeOfDay >= open && minuteOfHour >= openMinutes && timeOfDay < close){
        hour.setText.("OPEN");
    }}

我想不出一个非常简洁的方法来做到这一点,但也许你可以使用这个方法

public boolean isOpen(Calendar c) {
   int minute = c.get(Calendar.MINUTE);
   int hour = c.get(Calendar.HOUR_OF_DAY);
   return (hour < 17 && (hour > 6 || (hour == 6 && minute >=30)));
}

如果它在 6:30 和 17:00 之间,这应该 return 为真,在任何其他时间为假

(如果小时小于 17,并且 (小时大于6,或者小时6分30以上))

使用以下代码:

        Calendar openingHour = Calendar.getInstance();
        openingHour.set(Calendar.HOUR_OF_DAY, 6);
        openingHour.set(Calendar.MINUTE, 30);
        openingHour.set(Calendar.SECOND, 0);
        openingHour.set(Calendar.MILLISECOND, 0);

        Calendar closingHour = Calendar.getInstance();
        closingHour.set(Calendar.HOUR_OF_DAY, 17);
        closingHour.set(Calendar.MINUTE, 0);
        closingHour.set(Calendar.SECOND, 0);
        closingHour.set(Calendar.MILLISECOND, 0);

        Calendar currentTime = Calendar.getInstance();
        int dayOfWeek = currentTime.get(Calendar.DAY_OF_WEEK);
        if( dayOfWeek % 7 > 1  && currentTime.before(closingHour) && currentTime.after(openingHour)){
           System.out.println("Store is open");
        } else {
           System.out.println("Store is closed");
        }

您应该使用 Java 8 日期和时间库,因为日历和日期已过时。

LocalTime class 应该足够了。

LocalTime open = LocalTime.of(6, 30);
LocalTime closed = LocalTime.of(17, 0);

LocalTime currentTime = LocalTime.now();
if (currentTime.isBefore(open) || currentTime.isAfter(closed)) {
    // Closed
}

然后您可以使用 DateTimeFormatter class 将时间格式化为所需的格式。

如果您想在确定商店的营业时间时也考虑星期几,那么您可以结合使用 LocalDateTime 和上述示例:

LocalDateTime now = LocalDateTime.now();

// The opening days. Static import these from java.time.DayOfWeek
Set<DayOfWeek> daysOpen = new HashSet<>(Arrays.asList(
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY));
// Opening and closing times
LocalTime timeOpen = LocalTime.of(6, 30);
LocalTime timeClosed = LocalTime.of(17, 0);

if (!daysOpen.contains(now.getDayOfWeek()) || now.toLocalTime().isBefore(timeOpen) || now.toLocalTime().isAfter(timeClosed)) {
    System.out.println("Closed");
}
else {
    System.out.println("Open");
}