栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java:当秒和毫秒均为0时,DateTimeFormatter无法解析时间字符串吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java:当秒和毫秒均为0时,DateTimeFormatter无法解析时间字符串吗?

tl; dr
其中秒和毫秒为00000,这是解析器失败时

不,解析器成功。您的问题是生成一个字符串,而不是解析。

默认

DateTimeFormatter
抑制秒和分数第二零个值,如记录。

功能,而非错误
您的问题不在于解析,而在于解析后生成字符串。请记住,日期时间对象的文本表示形式是不同的,并且与对象分离。换句话说,日期时间对象没有“格式”。

[String]->

parse
-> [LocalDateTime]->
toString
-> [String]

的文档LocalDateTime::toString明确指出,当在最低有效部分中遇到零值时,将使用尽可能短的格式变化。报价:

输出将是以下ISO-8601格式之一:

uuuu-MM-dd’T’HH:mm

uuuu-MM-dd’T’HH:mm:ss

uuuu-MM-dd’T’HH:mm:ss.SSS

uuuu-MM-dd’T’HH:mm:ss.SSSSSS

uuuu-MM-dd’T’HH:mm:ss.SSSSSSSSS

所使用的格式将是最短的格式,用于输出被省略部分隐含为零的时间的完整值。

例子
关于YCF_L接受的答案中显示的两个示例……

20180301091600001结果是2018-03-01T09:16:00.001

在该示例中,最低有效部分(毫秒)具有非零值,因此将其表示在结果中。

2018030100000000结果是2018-03-01T00:00

在该示例中,小时,分钟,秒,毫秒,微秒和纳秒的最低有效部分全部为零。因此,除了小时和分钟之外,它们的显示都被抑制了,因为文档承诺始终显示年-分钟。

因此,您的两个示例均如文档所述。功能,而不是错误。


解决方案是不使用该

toString
方法中提供的默认格式化程序。而是,使用另一个格式化程序。例如,使用为解析定义的同一自定义格式器。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "yyyyMMddHHmmssSSS" );LocalDateTime ldt = LocalDateTime.parse( "20180301091600000" , f );String outputDefault = ldt.toString();String outputCustom = ldt.format( f );

转储到控制台。

System.out.println( "outputDefault: " + outputDefault );System.out.println( "outputCustom: " + outputCustom );

输出默认值:2018-03-01T09:16

输出自定义:20180301091600000

问题问:

我如何解决它以使其打印2018-03-01T09:16:00.000而不是2018-03-01T09:16?

指定自定义格式器,而不是默认格式器。

DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss:SSS") ; String output = ldt.format( f ) ;

但是请记住,生成的String会抑制LocalDateTime对象中任何微秒或纳秒的显示。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/419249.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号