这发生在一个(可能更多)日期时间中,其中时间部分在解析中完全错误。编码: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时间组件发生了什么?小时是错误的,分钟和秒被清零。
1 回答
侃侃无极
TA贡献2051条经验 获得超10个赞
这是过时的,和类的问题之一。您不应该使用它,因为它已被 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 最多只能读取三毫秒数字。如果将日期的小数部分截断为三位数,即“2018-11-01T18:07:55.672”而不是“2018-11-01T18:07:55.6725292Z”,则解析过程有效,并且还会更改相应的' S' 模式说明符,即“yyyy-MM-dd'T'HH:mm:ss.SSS'Z'”。
添加回答
举报
0/150
提交
取消