這發(fā)生在一個(可能更多)日期時間中,其中時間部分在解析中完全錯誤。編碼:import java.text.*;import java.util.*;public class TestTimeParse { public static void main(String[] args) { SimpleDateFormat dateFmt = (SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.getDefault()); dateFmt.applyPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'"); ParsePosition pos = new ParsePosition(0); Date date = dateFmt.parse("2018-11-01T18:07:55.6725292Z", pos); System.out.println("Text 2018-11-01T18:07:55.6725292Z parses as " + date); }}輸出:文本 2018-11-01T18:07:55.6725292Z 解析為 Thu Nov 01 20:00:00 MDT 2018時間組件發(fā)生了什么?小時是錯誤的,分鐘和秒被清零。
1 回答

侃侃無極
TA貢獻2051條經(jīng)驗 獲得超10個贊
這是過時的,和類的問題之一。您不應(yīng)該使用它,因為它已被 Java 8 中的新日期和時間 API 所取代。它在包中可用。DateCalendarSimpleDateFormatjava.time
String str = "2018-11-01T18:07:55.6725292Z";
String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'";
LocalDateTime ts = LocalDateTime.parse(str, DateTimeFormatter.ofPattern(pattern));
System.out.println("Text 2018-11-01T18:07:55.6725292Z parses as " + ts);
似乎 SimpleDateFormat 最多只能讀取三毫秒數(shù)字。如果將日期的小數(shù)部分截斷為三位數(shù),即“2018-11-01T18:07:55.672”而不是“2018-11-01T18:07:55.6725292Z”,則解析過程有效,并且還會更改相應(yīng)的' S' 模式說明符,即“yyyy-MM-dd'T'HH:mm:ss.SSS'Z'”。
添加回答
舉報
0/150
提交
取消