Parse String timestamp to Instant throws Unsupported field:InstantSeconds

kei*_*iki 22 java parsing timestamp java-8

我正在尝试将String转换为Instant.你能帮我吗?

我得到以下异常:

引起:java.time.temporal.UnsupportedTemporalTypeException:不支持的字段:java.time.Instant.from上的java.time.format.Parsed.getLong(Parsed.java:203)中的InstantSeconds(Instant.java:373)

我的代码基本上看起来像这样

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String timestamp = "2016-02-16 11:00:02";
TemporalAccessor temporalAccessor = formatter.parse(timestamp);
Instant result = Instant.from(temporalAccessor);
Run Code Online (Sandbox Code Playgroud)

我使用的是Java 8 Update 72.

Mic*_*man 24

以下是如何使用默认时区获取Instant.您的String无法直接解析为Instant,因为缺少时区.因此,您始终可以获得默认值

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    String timestamp = "2016-02-16 11:00:02";
    TemporalAccessor temporalAccessor = formatter.parse(timestamp);
    LocalDateTime localDateTime = LocalDateTime.from(temporalAccessor);
    ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.systemDefault());
    Instant result = Instant.from(zonedDateTime);
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,我最近要求在不事先知道确切格式的情况下解析String到Date,本质上是尝试解析代表有效日期的任何字符串.所以我写了一篇关于我如何解决这个问题的文章.这是链接:https://www.linkedin.com/pulse/java-8-javatime-package-parsing-any-string-date-michael-gantman?trk = pulse_spock-articles (3认同)

jde*_*dex 15

一种更简单的方法是在声明格式化程序对象时将默认时区添加到格式化程序对象中

final DateTimeFormatter formatter = DateTimeFormatter
                                    .ofPattern("yyyy-MM-dd HH:mm:ss")
                                    .withZone(ZoneId.systemDefault());
Instant result = Instant.from(formatter.parse(timestamp));
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个解决方案的紧凑性。 (2认同)