如何按当前时间从营业时间开始/关闭



我有一个关于在线餐厅订单的android项目。 我在时间逻辑
方面遇到了一些问题

我在String之前得到了餐厅的营业或关门时间:

  • 餐厅 1 : open at "16:00"close at "02.00"
  • 餐厅 2 : open at "02.00"close at "16:00"

如果这个时间at "18:00"餐厅1应该开放。

我已经像这样尝试了下面的代码,但餐厅1仍然关闭:

val open = "16:00"
val close = "02:00"
val calendar = Calendar.getInstance()
val time = calendar.time
val currentTime: String = SimpleDateFormat("HH:mm").format(time)
if(currentTime.compareTo(open) >= 0 currentTime.compareTo(close) < 0){
    // do something is open
}
else{
    // do something is close
}

我使用kotlin,也许有人也可以帮助我使用java

如果要比较时间值(小时和分钟(,则不应将它们作为字符串进行比较,而应将它们作为它们真正表示的事物进行比较:一天中的时间。

在java中

,有java.time类(在JDK中>= 8(。在旧版本中,Threeten 向后移植中提供了相同的类。

最初我以为我可以使用LocalTime(代表一天中某个时间的类(,但问题是当地时间从午夜开始,到晚上 11:59 结束,因此它无法处理第二天关闭的餐厅 1 的情况。

因此,您必须在LocalDateTime(表示日期和时间(或ZonedDateTime(如果要考虑夏令时效果(之间进行选择。我使用的是后者,但两种类型的代码相似:

// timezone I'm working on (use JVM default, or a specific one, like ZoneId.of("America/New_York")
ZoneId zone = ZoneId.systemDefault();
// today
LocalDate today = LocalDate.now(zone);
// times
// 16:00
LocalTime fourPM = LocalTime.of(16, 0); // or LocalTime.parse("16:00") if you have a String
// 02:00
LocalTime twoAM = LocalTime.of(2, 0); // or LocalTime.parse("02:00") if you have a String
// restaurant 1: opens today 16:00, closes tomorrow 02:00
ZonedDateTime rest1Start = today.atTime(fourPM).atZone(zone);
ZonedDateTime rest1End = today.plusDays(1).atTime(twoAM).atZone(zone);
// restaurant 2: opens today 02:00, closes today 16:00
ZonedDateTime rest2Start = today.atTime(twoAM).atZone(zone);
ZonedDateTime rest2End = today.atTime(fourPM).atZone(zone);
// time to check
String timeToCheck = "18:00";
// set time - or use ZonedDateTime.now(zone) to get the current date/time
ZonedDateTime zdt = today.atTime(LocalTime.parse(timeToCheck)).atZone(zone);
// check if it's open
if (rest1Start.isAfter(zdt) || rest1End.isBefore(zdt)) {
    // restaurant 1 is closed
} else {
    // restaurant 1 is open
}
// do the same with restaurant 2

如果您不需要考虑 DST 更改,则可以使用LocalDateTime - 只需省略对atZone的调用,结果就是LocalDateTime

相关内容

  • 没有找到相关文章

最新更新