Вопрос-ответ

java DateTimeFormatterBuilder fails on testtime [duplicate]

java DateTimeFormatterBuilder завершается с ошибкой во время тестирования [дубликат]

У меня есть простой JUnit-тест для DateTimeFormatterBuilder. Во время выполнения он работает, когда что-то String приходит на Spring-MVC-сервер (@RequestParam)

Во время тестирования он завершается с тем же String значением.

Проверенное значение: 25-May-2018 11:10

Тестируемый метод:

public void getTimeDifference(@RequestParam String startDate, @RequestParam String endDate) {
DateTimeFormatter DATE_TIME_FORMAT = new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern("dd-MMM-yyyy HH:mm").toFormatter();
LocalDateTime.parse(startDate,DATE_TIME_FORMAT);
return messages;
}

Метод тестирования:

@Test
public void testFormat() throws Exception {
final String startDateFormatA = "25-May-2018 11:10";
final String endDateFormatA = "25-May-2018 11:10";
assertEquals("06:00", callDbController.getTimeDifference(startDateFormatA, endDateFormatA)[1]);
}

Мой тест: во время выполнения я устанавливаю точку останова и тестирую ее на дисплее-View:

LocalDateTime.parse("25-May-2018 11:10",DATE_TIME_FORMAT)

Во время тестирования с тем же контекстом spring-aplication я делаю то же самое, что и во время выполнения, и это завершается с ошибкой.

У кого-нибудь есть идеи?

Переведено автоматически
Ответ 1

Название месяца на английском, поэтому вам лучше установить java.util.Locale в форматере.

Если вы не установите его, форматировщик будет использовать локаль JVM по умолчанию. И если это не английский, вы можете получить сообщение об ошибке (и разные среды могут иметь разные конфигурации, поэтому лучше установить языковой стандарт, а не полагаться на JVM по умолчанию).

Просто do toFormatter(Locale.ENGLISH) вместо just toFormatter() и все.

Ответ 2

Вы используете, hh который является clock-hour-of-am-pm (1-12) без добавления информации AM / PM в строку даты.

Вместо этого вы должны использовать час дня (0-23) как в шаблоне: DateTimeFormatter.ofPattern("dd/MMM/yyyy:HH:mm:ss Z");

Или вы можете добавить a в шаблон даты:

DateTimeFormatter.ofPattern("dd/MMM/yyyy:hh:mm:ss a Z");

и передает информацию AM / PM в строке даты:

"20/Mar/2019:00:00:01 AM +0100"


Редактировать:

Согласно комментариям, проблема также может быть связана с используемой вами локализацией, чтобы использовать локаль en / US, просто передайте локаль методу ofPattern:

 Locale locale = new Locale("en", "US");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MMM/yyyy:HH:mm:ss Z", locale);

Но вам все равно нужно исправить значение clock-hour-of-am-pm (hh) на hour-of-day (HH).

java junit