我如何比较时间?
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");
}
我正在开发一个应用,我需要知道如何比较两个小时。
例如,我的商店在 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");
}