org.threeten.bp.format.DateTimeParseException

org.threeten.bp.format.DateTimeParseException

提问人:ghita 提问时间:11/4/2019 更新时间:11/6/2019 访问量:1216

问:

val dateFormatter= DateTimeFormatterBuilder()
        .appendPattern("yyyy-MM-dd")
        .toFormatter()  

val begin = (LocalDateTime.parse("2019-11-04", dateFormatter).atOffset(ZoneOffset.UTC)
                    .toInstant()).atZone(ZoneId.of(timeZoneIdentifier))

当我尝试像这样解析日期时,出现以下错误:

无法解析文本“2019-11-04”:无法从 TemporalAccessor 获取 LocalDateTime:DateTimeBuilder[, ISO, null, 2019-11-04, null],键入 org.threeten.bp.format.DateTimeBuilder

Android Kotlin 日期解析 threetenabp

答:

0赞 Matheus Lima 11/5/2019 #1

改用,像这样:LocalDateLocalDateTime

val begin = (LocalDate.parse("2019-11-04", dateFormatter).atOffset(ZoneOffset.UTC)
                .toInstant()).atZone(ZoneId.of(timeZoneIdentifier))

但是此调用需要最小 api 26。有关较旧的 API,请参阅此处

评论

0赞 Anonymous 11/6/2019
我无法编译它。我得到 atOffset(ZoneOffset) 方法对于 LocalDate 类型未定义
0赞 Anonymous 11/6/2019 #2

由于 ISO 8601 格式和其他 java.time 类将 ISO 8601 格式解析为默认格式,因此您不需要任何显式格式化程序。只是这个:2019-11-04LocalDate

    val begin = LocalDate.parse("2019-11-04")
            .atStartOfDay(ZoneOffset.UTC)
            .withZoneSameInstant(ZoneId.of(timeZoneIdentifier))

假设结果是 。timeZoneIdentifierEurope/BucharestZonedDateTime2019-11-04T02:00+02:00[Europe/Bucharest]

不能将字符串解析为 .这不仅需要日期,还需要一天中的时间,如您所知,您的字符串仅包含前者。LocalDateTime

链接:维基百科文章:ISO 8601