Убедитесь, что строка «2 сентября 2018 09:00» является допустимым форматом даты - PullRequest
0 голосов
/ 20 сентября 2018

Я знаю, что есть несколько вопросов, требующих подтверждения действительной даты.Но я не смог узнать точный формат.Поэтому, пожалуйста, не помечайте это как дубликат.

У меня есть дата, возвращенная в виде строки Например, 2 сентября 2018 09:00 на моей веб-странице.Мне нужно убедиться, что это дата в рамках моих тестов на селен.Спасибо, если кто-то может помочь мне проверить это в качестве действительного формата даты в Java.

Спасибо

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Требуется стандартный формат для языкового стандарта вашего пользователя

    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.

0 голосов
/ 20 сентября 2018

Я нашел способ.Размещать, так как это будет полезно.

            String dateformat = "A valid date time format";
    String notValidDateFormat = "Not a valid date time format" ;
    final DateFormat fmt = new SimpleDateFormat("dd MMM yyyy hh:mm");
    Date input = null;
    try {
        input = fmt.parse(offerDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    if (input.before(new Date())) {
        return dateformat;
    }
    return notValidDateFormat;
}
...