Формат LocalDate epochDay - один выходной - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь преобразовать строку даты в день эпохи с помощью API JavaD LocalDate.Когда я пытаюсь проверить конверсию, это действительно один выходной!

Вот тест

const val DATE_PATTERN = "MMMM d, yyyy"
    @Test
    fun `parse handles different cases`(){
        val case1 = "September 31, 2018"
        val dateTimeFormatter = DateTimeFormatter.ofPattern(DATE_PATTERN, Locale("en", "US"))
        val date1: Long = LocalDate.parse(case1, dateTimeFormatter).toEpochDay()
        val case1Res = LocalDate.ofEpochDay(date1).format(dateTimeFormatter)
        assertEquals(case1, case1Res)
     }

Утверждение не выполняется с

expected: <September 31, 2018> but was: <September 30, 2018>

1 Ответ

0 голосов
/ 26 октября 2018

В комментариях говорится, что в сентябре действительно 30 дней.Причина, по которой этот код не вызывает ошибку при разборе неверной даты, заключается в том, что DateFormatter по умолчанию снисходителен, что означает, что вы можете передать его в сентябре 64 2018 года, и он с радостью проанализирует его для вас и даст правильную дату эпохи.

Вы можете заставить DateFormatter выдавать ошибку в неправильные даты, добавив строгий стиль решателя, например так:

DateTimeFormatter
    .ofPattern(DATE_PATTERN, Locale("en", "US"))
    .withResolverStyle(ResolverStyle.STRICT)

Это приведет к следующей ошибке при разборе указанной даты:

Text 'September 31, 2018' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {YearOfEra=2018, MonthOfYear=9, DayOfMonth=31},ISO of type java.time.format.Parsed

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...