为了账号安全,请及时绑定邮箱和手机立即绑定

SimpleDateFormat 无法正确解析时间

SimpleDateFormat 无法正确解析时间

阿晨1998 2022-06-15 15:20:15
这发生在一个(可能更多)日期时间中,其中时间部分在解析中完全错误。编码: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'”。


查看完整回答
反对 回复 2022-06-15
  • 1 回答
  • 0 关注
  • 203 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信