Требуется стандартный формат для языкового стандарта вашего пользователя
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(
FormatStyle.MEDIUM, FormatStyle.SHORT)
.withLocale(Locale.UK);
ZoneId userTimeZone = ZoneId.of("Europe/London");
// Require a comma between date and time
String returnedFromWebPage = "2 Sep 2018, 09:00";
// Remove any space before the date or after the time
returnedFromWebPage = returnedFromWebPage.trim();
try {
ZonedDateTime dateTime = LocalDateTime.parse(returnedFromWebPage, formatter)
.atZone(userTimeZone);
if (dateTime.isBefore(ZonedDateTime.now(userTimeZone))) {
System.out.println("A valid date time");
} else {
System.out.println("Not in the past");
}
} catch (DateTimeParseException dtpe) {
System.out.println("Not a valid date time format");
}
Вывод при запуске на Java 10:
Допустимое время даты
Java10 с данными локали по умолчанию, считает, что нотация даты и времени в Великобритании может выглядеть как 2 Sep 2018, 09:00
(в зависимости от того, как долго или коротко вы хотите это сделать), то есть с запятой между датой и временем, в противном случае, как ваша строка ввода,Поэтому одно из предложений - посмотреть, могут ли ваши пользователи согласиться с этим, и таким образом ввести дату и время.Если это верно, что это соответствует британским нормам, я полагаю, что они будут счастливы.
Теперь я не знаю, являются ли ваши пользователи британцами вообще.Java имеет локализованные форматы для сотен языков.Я думаю, что вы должны в первую очередь использовать язык ваших пользователей.Если они говорят на суахили, стандартный формат кажется без запятой:
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(
FormatStyle.MEDIUM, FormatStyle.SHORT)
.withLocale(Locale.forLanguageTag("sw"));
ZoneId userTimeZone = ZoneId.of("Africa/Nairobi");
String returnedFromWebPage = "2 Sep 2018 09:00";
С этими изменениями код также печатает A valid date time
.
При необходимости создайте свой собственный форматер
Если ваши пользователи недовольны каким-либо из встроенных в Java форматов, вам нужно указать формат, который они хотят использовать:
DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("d MMM uuuu HH:mm", Locale.ENGLISH);
String returnedFromWebPage = "2 Sep 2018 09:00";
Это также приведет к тому, что кодпечать A valid date time
.