0
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], type org.threeten.bp.format.DateTimeBuilder

4

2 回答 2

0

改用LocalDateLocalDateTime像这样:

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

但此调用需要最小 api 26。对于较旧的 API,请参见此处

于 2019-11-05T02:17:43.900 回答
0

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

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

假设结果timeZoneIdentifierEurope/Bucharesta ZonedDateTime2019-11-04T02:00+02:00[Europe/Bucharest]

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

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

于 2019-11-05T16:59:23.013 回答