我想计算餐厅的营业时间。我有两个字符串,例如:
String start_hour = "09:00";
String end_hour = "18:00";
例如当前时间:
Calendar now = Calendar.getInstance();
String current_hour = now.get(Calendar.HOUR_OF_DAY) + ":" + now.get(Calendar.MINUTE);
I calculate open hours with this method:
public boolean isRestaurantOpenNow() {
try {
Calendar now = Calendar.getInstance();
String current_hour = now.get(Calendar.HOUR_OF_DAY) + ":" + now.get(Calendar.MINUTE);
String st_hour = "09:00";
String en_hour = "18:00";
@SuppressLint("SimpleDateFormat") final SimpleDateFormat format = new SimpleDateFormat("HH:mm");
Date sth = null;
sth = format.parse(st_hour);
Date enh = format.parse(en_hour);
Date nowh = format.parse(current_hour );
if (nowh != null) {
if (nowh.before(enh) && nowh.after(sth)) {
// restaurant is open
return true;
} else {
// restaurant is close
return false;
}
}
} catch (ParseException ignored) {
}
return false;
}
但是我对此有些疑问。当start_hour为“ 13:00”且end_hour为“ 05:00”时,此方法工作不正确。因为从第二天开始的05:00小时。我该如何解决这个问题?
答案 0 :(得分:1)
代替
nowh.before(enh) && nowh.after(sth)
使用
nowh.before(enh) && nowh.after(sth) && sth.before(enh)
|| enh.before(sth) && !(nowh.before(enh) && nowh.after(sth))
除此之外,我认为Calendar类应该以不同的方式使用...
答案 1 :(得分:1)
public boolean isRestaurantOpenNow() {
LocalTime startHour = LocalTime.parse("13:00");
LocalTime endHour = LocalTime.parse("05:00");
LocalTime currentHour = LocalTime.now(ZoneId.systemDefault());
if (startHour.isBefore(endHour)) { // Both are on the same day
return currentHour.isAfter(startHour) && currentHour.isBefore(endHour);
} else { // end is on the next day
return currentHour.isBefore(endHour) || currentHour.isAfter(startHour) ;
}
}
立即尝试(我的时区为21:20):
System.out.println(isRestaurantOpenNow());
输出为:
true
java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。