between java.time.LocalTime (next day)

2019-02-13 03:13发布

Please suggest if there is an API support to determine if my time is between 2 LocalTime instances, or suggest a different approach.

I have this entity:

 class Place {
   LocalTime startDay;
   LocalTime endDay;
 }

which stores the working day start and end time, i.e. from '9:00' till '17:00', or a nightclub from '22:00' till "5:00".

I need to implement a Place.isOpen() method that determines if the place is open at a given time.

A simple isBefore/isAfter does not work here, because we also need to determine if the end time is on the next day.

Of course, we can compare the start and end times and make a decision, but I want something without additional logic, just a simple between() call. If LocalTime is not sufficient for this purpose, please suggest other.

2条回答
手持菜刀,她持情操
2楼-- · 2019-02-13 03:38

This looks cleaner for me:

 if (start.isBefore(end)) {
     return start.isBefore(date.toLocalTime()) && end.isAfter(date.toLocalTime());
 } else {
     return date.toLocalTime().isAfter(start) || date.toLocalTime().isBefore(end);
 }
查看更多
迷人小祖宗
3楼-- · 2019-02-13 03:43

If I understand correctly, you need to make two cases depending on whether the closing time is on the same day as the opening time (9-17) or on the next day (22-5).

It could simply be:

public static boolean isOpen(LocalTime start, LocalTime end, LocalTime time) {
  if (start.isAfter(end)) {
    return !time.isBefore(start) || !time.isAfter(end);
  } else {
    return !time.isBefore(start) && !time.isAfter(end);
  }
}
查看更多
登录 后发表回答