2016-02-24 36 views
10

我想将字符串转换为即时。你能帮我吗?解析字符串时间戳即时抛出不支持的字段:InstantSeconds

我得到以下异常:

产生的原因:java.time.temporal.UnsupportedTemporalTypeException:不支持的领域:InstantSeconds 在java.time.format.Parsed.getLong(Parsed.java:203) 在java.time.Instant.from(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); 

我正在使用Java 8 Update 72.

+5

你的第一个输入是不是一瞬间。时区丢失。 –

+0

我得到这个错误试图使用DateTimeFormatter.ofLocalizedDateTime 2-arg的构造函数,其中我可以在互联网上找到0个例子。它不喜欢将FormatStyle.SHORT作为timeFormat 2nd参数传递给方法。 – djangofan

回答

12

以下是如何获得带默认时区的即时消息。由于时区丢失,您的字符串不能被解析为即时通讯。所以你总是可以得到默认的一个

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); 
+2

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