DateTimeFormatter解析秒与毫秒均为0的时间字符串异常问题
问题解析与解决方案
这其实不是解析异常,而是LocalDateTime默认的toString()方法的显示逻辑导致的——它会自动省略末尾连续的零值时间部分,让输出更简洁,但实际上你解析出来的LocalDateTime对象已经正确包含了秒和毫秒的0值。
验证解析结果是否正确
你可以通过获取具体字段值来确认:
DateTimeFormatter dtformatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"); LocalDateTime dt = LocalDateTime.parse("20180301091600000", dtformatter); // 打印秒和纳秒(毫秒转纳秒,0毫秒对应0纳秒) System.out.println(dt.getSecond()); // 输出:0 System.out.println(dt.getNano()); // 输出:0
可以看到,秒和毫秒(纳秒)的0值已经被正确解析并存储了。
如何输出完整的时间格式
如果需要显示成2018-03-01T09:16:00.000这种完整格式,不要依赖默认的toString(),而是用自定义的DateTimeFormatter来格式化输出:
DateTimeFormatter dtformatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"); LocalDateTime dt = LocalDateTime.parse("20180301091600000", dtformatter); // 定义你想要的完整输出格式 DateTimeFormatter fullDisplayFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS"); System.out.println(fullDisplayFormatter.format(dt)); // 输出:2018-03-01T09:16:00.000
或者如果你想输出和输入格式一致的字符串,直接用原来的dtformatter格式化即可:
System.out.println(dtformatter.format(dt)); // 输出:20180301091600000
内容的提问来源于stack exchange,提问作者mynameisJEFF
相关产品推荐
相关产品推荐

