Coverting String to LocalTime with/without nanoOfSeconds

时间秒杀一切 提交于 2020-01-02 01:06:06

问题


I need to convert a string to LocalTime (java-8 not joda) that may or maynot have nanoOfSeconds in the string. The String format is in the form of 07:06:05 or 07:06:05.123456 The string may or may not have a decimal place in the seconds and when it does there could be any number of characters to represent the Nano Seconds part.

Using a DateTimeForamtter such as

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

or

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

I can use an IF statement to distinguish between the two formats such as:

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

This works fine and I'm OK with this but I need to be able to also use a varying number of positions after the decimal point.

A sample data set might be:

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

Is there a way to allow the formatter to parse any number of digits after the decimal without it throwing a java.time.format.DateTimeParseException when the number of decimal places is unknown?

I'm hoping I missing something really simple.


回答1:


There is no need to do anything special to parse this format. LocalTime.parse(String) already handles optional nanoseconds:

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"));

All the above parse fine, see also the Javadoc spec.




回答2:


You could use "optional sections" of the format pattern for this:

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


来源:https://stackoverflow.com/questions/30788369/coverting-string-to-localtime-with-without-nanoofseconds

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!