2016-12-12 8 views
1

У меня есть старая программа, и я обновил ее до Java 8. Теперь я хотел бы воспользоваться LocalDateTime. Я уже обновил объект и в базе данных значение читает 10-APR-1990.Тестирование даты из базы данных, которая использует to_date и тестирование на LocalTimeDate

Однако я получаю следующее сообщение об ошибке:

java.time.format.DateTimeParseException: Text '10-APR-90' could not be parsed at index 3

В моем тесте я пытаюсь разобрать его с помощью DateTimeFormatter.

Тест:

@Test 
    public void testLocalDateTime() throws Exception { 

     DateTimeFormatter formatter = 
       DateTimeFormatter.ofPattern("dd-MMM-yy", Locale.US); 

     Tcan1990 applicant = tcan1990Repository.findOne(new Tcan1990PK("000000009", 888067)); 

     assertEquals(LocalDateTime.parse("10-APR-90",formatter),applicant.getPymtDt()); 
    } 

ответ

2

Обновите свой тестовый пример, чтобы использовать регистр без учета регистра и проанализировать строку даты в LocalDate со временем, установленным для начала дня, чтобы получить LocalDateTime.

@Test 
public void testLocalDateTime() throws Exception { 

    DateTimeFormatter formatter = new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern("dd-MMM-yyyy").toFormatter(Locale.US); 

    Tcan1990 applicant = tcan1990Repository.findOne(new Tcan1990PK("000000009", 888067)); 

    assertEquals(LocalDate.parse("10-APR-1990", formatter).atStartOfDay(), applicant.getPymtDt()); 

} 
+0

Я не могу добавить 'кандидат.getPymtDt(). AtStartOfDay()', и я все равно получаю ту же ошибку. Поле LocalDateTIme – Drew1208

+0

Обновлен код для удаления atStartOfDay(). есть ли время в строке, которую вы проходите? Утверждение будет терпеть неудачу. ты в порядке с утверждением только местной даты? assertEquals (LocalDate.parse («10-APR-1990», formatter), претендент.getPymtDt(). toLocalDate()); – Veeram

+0

My IDE предупреждает о «неконвертируемых типах LocalDate и LocalDateTime», и я получил сообщение об ошибке «java.lang.AssertionError: Ожидаемое: 2008-02-08 Актуально: 2008-02-08T00: 00' так кажется работая, но мне нужно исправить разбор – Drew1208

0

Две вещи:

  • Месяц должен быть в ГорбатыйРегистр: "10-Apr-90".
  • Поскольку у вас нет времени на то, что вы разбираете, вы должны использовать LocalDate, а не LocalDateTime.
+1

В большинстве случаев пользователи не могут контролировать точную форму ввода, но должны корректировать форматтера в соответствии с вводом. Поэтому ваш первый совет более или менее бессмыслен, если вы также не рекомендуете какую-либо предварительную обработку строк. –

+0

Очень верно. Однако это была строка с жестким кодом, поэтому я считаю, что ответ остается актуальным для этой конкретной проблемы. –