Как проанализировать ZonedDateTime с зоной по умолчанию?

Как разобратьZoneDateTime из строки, которая не содержитzone и другие поля?

Вот тест в Споке для воспроизведения:

import spock.lang.Specification
import spock.lang.Unroll

import java.time.ZoneId
import java.time.ZoneOffset
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter

@Unroll
class ZonedDateTimeParsingSpec extends Specification {
    def "DateTimeFormatter.ISO_ZONED_DATE_TIME parsing incomplete date: #value #expected"() {
        expect:
        ZonedDateTime.parse(value, DateTimeFormatter.ISO_ZONED_DATE_TIME) == expected
        where:
        value                           | expected
        '2014-04-23T04:30:45.123Z'      | ZonedDateTime.of(2014, 4, 23, 4, 30, 45, 123_000_000, ZoneOffset.UTC)
        '2014-04-23T04:30:45.123+01:00' | ZonedDateTime.of(2014, 4, 23, 4, 30, 45, 123_000_000, ZoneOffset.ofHours(1))
        '2014-04-23T04:30:45.123'       | ZonedDateTime.of(2014, 4, 23, 4, 30, 45, 123_000_000, ZoneId.systemDefault())
        '2014-04-23T04:30'              | ZonedDateTime.of(2014, 4, 23, 4, 30, 0, 0, ZoneId.systemDefault())
        '2014-04-23'                    | ZonedDateTime.of(2014, 4, 23, 0, 0, 0, 0, ZoneId.systemDefault())
    }
}

Первые два теста пройдены, все остальные не пройдены с DateTimeParseException:

«2014-04-23T04: 30: 45.123» не удалось проанализировать по индексу 23«2014-04-23T04: 30» не удалось проанализировать по индексу 16«2014-04-23» не удалось проанализировать по индексу 10

Как я могу разобрать неполные даты с часовым поясом, установленным по умолчанию?

Ответы на вопрос(2)

Ваш ответ на вопрос