#android #date #datetime #kotlin
#Android #Дата #дата и время #kotlin
Вопрос:
Я ищу пример с функцией, сравнивающей диапазон дат и часов, например, в ресторане для часов работы, функция возвращает true, если я введу параметры Воскресенье — вторник с 10:00 до 23:00, как лучше всего это сделать? в Java / Kotlin есть несколько экземпляров даты, я немного смущен…
Комментарии:
1. @Raman ваш ответ не был полным, мне это не помогло. теперь у меня есть еще вопросы о моей проблеме…
Ответ №1:
Идиоматический способ Kotlin сделать это — определить часы работы вашего ресторана как ClosedRange<T>
(где T
какое-то значение даты / времени, см. Дальнейшее обсуждение Ниже), а затем использовать in
оператор, чтобы определить, попадает ли указанное вами время в этот диапазон. Смотрите Диапазоны и прогрессии в документации Kotlin.
Для определения диапазона вы используете rangeTo
функцию (или ..
оператор), например:
val range = start..end
Затем вы можете использовать contains
функцию (или in
оператор), например
anInstant in range
чтобы определить, попадает ли данный момент anInstant
в диапазон или нет.
Что касается фактического представления значений даты / времени, это зависит от ваших целевых платформ. Если вы ориентируетесь на JVM или Android, вы можете использовать любой из классов java.time
. Например, вы можете использовать представление даты с учетом зоны, например ZonedDateTime
, или такое, которое игнорирует все зоны вместе, например LocalDateTime
, или такое, которое представляет конкретное Instant
время независимо от зоны, в зависимости от бизнес-правил вашего приложения для обработки часовых поясов.
Если вы ориентируетесь на мультиплатформенность (например, native или JavaScript), то вам, вероятно, захочется изучить кроссплатформенную библиотеку с представлением даты и времени, например kotlinx-datetime.
Ответ №2:
Я не знаю, больше ли вы не ищете ответа, но в любом случае это ответ
fun isNowInRange(start: LocalTime, stop: LocalTime, now: LocalTime): Boolean{
return ( ! now.isBefore( start ) ) amp;amp; ! now.isAfter( stop )
}
и вот как это использовать
isNowInRange(LocalTime.of(9, 0), LocalTime.of(23, 0) // opne
!isNowInRange(LocalTime.of(9, 0), LocalTime.of(23, 0) // closed
и если есть какой-либо ресторан, который открыт после 24 часов ночи, вы можете написать это
if (isNowInRange(LocalTime.of(9, 0), LocalTime.of(23, 0) amp;amp; isNowInRange(LocalTime.of(0, 0), LocalTime.of(4, 0)){
// restaurant is open from 9am till 4am
// do stuff here
}else{
// restaurant closed from 4am till 9am
// do stuff here
}