2016-02-24 43 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 –