2017-03-22 26 views
0

這裏被解析爲我此日期字符串"2016-08-30T06:18:17:698-0600"java.time.format.DateTimeParseException:文本 '2016-08-30T06:18:17:698-0600' 無法在指數24

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-DD'T'HH:mm:ss:SSS'-'XXX"); 
    String attDate = "2016-08-30T06:18:17:698-0600"; 
    //attDate = attDate.substring(0, 19); 
    System.out.println("####attask date: "+attDate); 
    LocalDateTime dt = LocalDateTime.parse(attDate, formatter); 
    System.out.println(dt); 
java8代碼

使用LocalDate被截斷的日期字符串可以解決這個問題,但我不能簡單地刪除Time和使用LocalDate代替LocalDateTime

請建議是怎麼回事錯在這裏。我也需要爲什麼你的答案會起作用。

+0

'無法分析:無法從TemporalAccessor獲得LocalDateTime:{DAYOFYEAR = 30,WeekBasedYear [WeekFields [星期日, 1]] = 2016,OffsetSeconds = -21600,MonthOfYear = 8},對於YYYY-MM-DD'T'HH:mm:ss,ISO解析爲類型爲java.time.format.Parsed的06:18:17.698。 SSSXX' – veer7

回答

1

如果您將圖案更改爲yyyy-MM-dd'T'HH:mm:ss.SSSZ,它將打印2016-08-30T06:18:17.123

但在你的代碼,日期與:以毫秒爲單位,當正確的是.

完整代碼:

 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
     String attDate = "2016-08-30T06:18:17.123-0600"; 
     //attDate = attDate.substring(0, 19); 
     System.out.println("####attask date: "+attDate); 
     LocalDateTime dt = LocalDateTime.parse(attDate, formatter); 
     System.out.println(dt); 

輸出:

####attask date: 2016-08-30T06:18:17.123-0600 
2016-08-30T06:18:17.123 
+0

以':'爲單位的模式也可以工作。由於這是我們從API獲得的格式,我們必須遵循它。這裏是工作的模式'yyyy-MM-dd'T'HH:mm:ss:SSSZ' – veer7

3

區域偏移中的減號是區域偏移表達式的一部分,您不應該將其作爲文字轉義。

+0

格式'YYYY-MM-DD'T'HH:mm :ss:SSS-XXX'和'YYYY-MM-DD'T'HH:mm:ss:SSS-XXX'不起作用 – veer7

+1

你不需要它,'XX'轉換爲'-0600'。你在做什麼意味着Java正在尋找'「2016-08-30T06:18:17:698--06:00」'。 – Christian

+0

順便說一句,您收到的錯誤消息證實了這一點。 在索引24(即位置25)處,您有'0600'中的第一個'0'。 Java認爲你在模式中指定的文字「-'後面必須跟着一個」+「或」-',它構成偏移量的一部分。但你立即提供一個數字('0600'),所以解析失敗。 – Christian

相關問題