SimpleDateFormat 无法正确解析时间

这发生在一个(可能更多)日期时间中,其中时间部分在解析中完全错误。


编码:


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


时间组件发生了什么?小时是错误的,分钟和秒被清零。


阿晨1998
浏览 257回答 1
1回答

侃侃无极

这是过时的,和类的问题之一。您不应该使用它,因为它已被 Java 8 中的新日期和时间 API 所取代。它在包中可用。DateCalendarSimpleDateFormatjava.timeString 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'”。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java