使用/不使用nanoOfSeconds将字符串转换为LocalTime

我需要将一个字符串转换为LocalTime(java-8而不是joda),该字符串可能有也可能没有nanoOfSeconds。 字符串格式的forms为07:06:0507:06:05.123456字符串在秒中可能有或没有小数位,当它出现时,可能有任意数量的字符来表示Nano Seconds部分。

使用DateTimeForamtter等

 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("H:mm:ss"); 

要么

 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("H:mm:ss.SSSSSS"); 

我可以使用IF语句来区分两种格式,例如:

 DateTimeFormatter dtf; if (time1.contains(".") { dtf = DateTimeFormatter.ofPattern("H:mm:ss.SSSSSS); } else { dtf = DateTimeFormatter.ofPattern("H:mm:ss); } 

这工作正常,我很好,但我需要能够在小数点后使用不同数量的位置。

示例数据集可能是:

 [11:07:59.68750, 11:08:00.781250, 11:08:00.773437500, 11:08:01] 

有没有办法允许格式化程序解析小数点后的任意位数而不会在小数位数java.time.format.DateTimeParseException时抛出java.time.format.DateTimeParseException

我希望我遗漏一些非常简单的东西。

没有必要做任何特殊的事情来解析这种格式。 LocalTime.parse(String)已处理可选的纳秒:

 System.out.println(LocalTime.parse("10:15:30")); System.out.println(LocalTime.parse("10:15:30.")); System.out.println(LocalTime.parse("10:15:30.1")); System.out.println(LocalTime.parse("10:15:30.12")); System.out.println(LocalTime.parse("10:15:30.123456789")); 

以上所有解析都很好,另见Javadoc 规范 。

您可以使用格式模式的“可选部分”:

 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("H:mm:ss[.SSSSSS]");