J'ai besoin de convertir une chaîne en LocalTime (Java-8 pas joda) qui peut ou non avoir nanoOfSeconds dans la chaîne. Le format String est sous la forme de 07:06:05
ou 07:06:05.123456
La chaîne peut ou non avoir une décimale dans les secondes et lorsqu'elle le fait, il peut y avoir un nombre quelconque de caractères pour représenter la partie Nano Seconds.
Utilisation d'un DateTimeForamtter tel que
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("H:mm:ss");
ou
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("H:mm:ss.SSSSSS");
Je peux utiliser une instruction IF pour distinguer les deux formats tels que:
DateTimeFormatter dtf;
if (time1.contains(".") {
dtf = DateTimeFormatter.ofPattern("H:mm:ss.SSSSSS);
} else {
dtf = DateTimeFormatter.ofPattern("H:mm:ss);
}
Cela fonctionne bien et je suis d'accord avec cela, mais je dois également pouvoir utiliser un nombre variable de positions après la virgule décimale.
Un exemple d'ensemble de données peut être:
[11:07:59.68750, 11:08:00.781250, 11:08:00.773437500, 11:08:01]
Existe-t-il un moyen d'autoriser le formateur à analyser n'importe quel nombre de chiffres après la décimale sans lancer un Java.time.format.DateTimeParseException
lorsque le nombre de décimales est inconnu?
J'espère avoir raté quelque chose de vraiment simple.
Il n'est pas nécessaire de faire quoi que ce soit de spécial pour analyser ce format. LocalTime.parse(String)
gère déjà les nanosecondes facultatives:
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"));
Vous pouvez utiliser des "sections facultatives" du modèle de format pour cela:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("H:mm:ss[.SSSSSS]");