Сравните 24-часовые строки с Java - PullRequest
1 голос
/ 11 марта 2020

У меня есть следующее строковое представление 24 часа, например 1423 и 1956

Я хотел бы проверить, находится ли текущее время (с часовым поясом) между этой парой

my текущее решение получает часы и минуты дня, используя

int h = Instant.now().atZone(ZoneId.systemDefault()).getHour()
int t = Instant.now().atZone(ZoneId.systemDefault()).getMinute()

, создавая 4 di git строки из чисел и проводя сравнение строк

Мне не нравится мое решение вообще, какой элегантный способ сделать это?

Ответы [ 3 ]

6 голосов
/ 11 марта 2020

Вы можете преобразовать строковое представление времени в LocalTime следующим образом:

var formatter = DateTimeFormatter.ofPattern("HHmm");
var lowerTime = LocalTime.parse("1423", formatter);
var upperTime = LocalTime.parse("1956", formatter);

Затем вы можете использовать isAfter() / isBefore методы, чтобы проверить, находится ли оно между:

var nowTime = LocalTime.now(ZoneId.systemDefault());
boolean inBetween = nowTime.isAfter(lowerTime) && nowTime.isBefore(upperTime);
5 голосов
/ 11 марта 2020

Создайте объект LocalTime, используя ссылку ZonedDateTime.now () и последующий вызов ZonedDateTime # toLocalTime. Затем создайте объект DateTimeFormatter, используя Pattern HHmm , который обозначает часы (HH) и минуты (mm). Затем вы можете создать LocalTime из времени начала 1423, используя шаблон, и время окончания 1956 года из шаблона. Затем вы можете создать логическое значение, представляющее, является ли ваше время промежуточным, определяя, находится ли текущее время после времени начала и до времени окончания.

    LocalTime time = ZonedDateTime.now().toLocalTime();

    DateTimeFormatter pattern = DateTimeFormatter.ofPattern("HHmm");

    LocalTime startTime = LocalTime.parse("1423", pattern);

    LocalTime endTime = LocalTime.parse("1956", pattern);

    boolean between = time.isAfter(startTime) && time.isBefore(endTime);
1 голос
/ 11 марта 2020

Как вы заметили в вопросе, ваши строки в 24-часовом периоде с ведущими нулями, так что вы можете сравнить их как строки. Вот более удобный способ преобразования текущего времени в строку в требуемом формате:

String now = DateTimeFormatter.ofPattern("HHmm")
                              .withZone(ZoneId.systemDefault())
                              .format(Instant.now());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...