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

时间:2015-06-11 18:12:01

标签: java java-8 formatter java-time localtime

我需要将字符串转换为LocalTime(java-8而不是joda),该字符串可能包含或者可能不包含nanoOfSeconds。 String格式的形式为     {{#each player in players}} {{player}} {{/each}} players: function(){ return this.get('collection')[this.get('selection')]; }.property('collection.[]', 'selection') 字符串在秒中可能有或没有小数位,当它出现时,可以有任意数量的字符来表示Nano Seconds部分。

使用DateTimeForamtter,例如

07:06:05

07:06:05.123456

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

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

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

示例数据集可能是:

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

有没有办法允许格式化程序解析小数点后的任意位数而不会在小数位数未知时抛出DateTimeFormatter dtf; if (time1.contains(".") { dtf = DateTimeFormatter.ofPattern("H:mm:ss.SSSSSS); } else { dtf = DateTimeFormatter.ofPattern("H:mm:ss); }

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

2 个答案:

答案 0 :(得分:27)

没有必要做任何特殊的事情来解析这种格式。 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 spec

答案 1 :(得分:8)

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

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