0

我正在构建一个应用程序,我需要知道如何比较两个小时。

例如,我的商店早上 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 与“:”放在一起时,一个 int open;两个周一至周五的限制。

谢谢您的帮助。

4

5 回答 5

9

您应该使用 Java 8 Date & Time 库,因为 Calendar 和 Date 已过时。

LocalTime应该足够了。

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该类将时间格式化为所需的格式。

如果您想在确定商店的营业时间时也考虑星期几,那么您可以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");
}
于 2018-08-20T21:03:04.090 回答
0

该常量HOUR_OF_DAY是一个仅表示小时的整数。我建议使用该方法getTime()请参阅此链接),然后使用返回的Date对象。

于 2018-08-20T20:39:43.130 回答
0

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

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 之间应该返回 true,在任何其他时间返回 false

(如果小时小于 17,并且(小时大于 6,或小时为 6,分钟为 30 或更高))

于 2018-08-20T20:51:55.207 回答
-1

像这样的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");
    }}
于 2018-08-20T20:44:46.483 回答
-1

使用以下代码:

        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");
        }
于 2018-08-20T20:57:30.683 回答