使用单个DateTimeFormatter在Java8中解析本地时间的HH:mm:ss和H:mm:ss

8

我正在尝试使用Java 8中的LocalTime.parse()方法解析08:24:55 (HH:mm:ss)8:24:55 (H:mm:ss)。以下代码成功执行并打印08:24:55

LocalTime time=LocalTime.parse("08:24:55", DateTimeFormatter.ofPattern("HH:mm:ss"));
System.out.println(time);

但是同样的代码对于输入8:24:55会失败并抛出错误:

异常线程中的“main”java.time.format.DateTimeParseException:无法在索引0处解析文本“8:24:55”

有什么建议可以处理这两种情况吗?


也许你可以根据字符串的长度进行条件模式匹配?例如:如果(timestr.length() == 8),则pattern= "HH:mm:ss"; 如果(timestr.length == 7),则pattern= "H:mm:ss"; - Zachary Craig
1
@zack6849,不需要那样做。在答案中有更简单的解决方案。 - Ole V.V.
1
@OleV.V. 你可能会注意到我的评论是在Juan回答之前的,事实上我一旦看到他的回答就点赞了,我认为没有理由删除我的评论。 - Zachary Craig
2个回答

13

在您的模式中只使用一个H

LocalTime time= LocalTime.parse("08:24:55", DateTimeFormatter.ofPattern("H:mm:ss"));

输出:

08:24:55


1
您可以通过以下方式使一些“times”变为可选项:

 DateTimeFormatter.ofPattern("H[H]:mm:ss")

7
这个想法不太好,因为可选的部分永远不会成功,只会导致性能下降。把它去掉,满足于“H:mm:ss”就好了。 - Meno Hochschild

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接