Как разбирать ZoneDateTime
из строки, которая не содержит zone
и других полей?Как разобрать ZonedDateTime с зоной по умолчанию?
Вот тест на Спока воспроизвести:
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
Как я могу разобрать неполные даты со временем и зоной, установленной по умолчанию?
Спасибо, это выглядит лучше, но не решает проблему:
Таким образом, он не раз, потому что я не могу установить Часовой пояс по умолчанию для парсера. То же самое для других частей, для даты показа. Например, как можно проанализировать строку типа «23: 45» в ZonedDateTime с текущей датой и системным часовым поясом? – stokitoОн отлично работал с использованием java 8u25 для всех 5 примерной строки в вопросе. Итак, не уверен, в чем проблема. – bowmore
Проблема в том, что я хотел бы получить ZonedDateTime insted из LocalDateTime – stokito