Coverting Chaîne à LocalTime avec/sans nanoOfSeconds

J'ai besoin de convertir une chaîne de caractères à LocalTime (java-8 pas joda) qui peut ou ne peut pas avoir nanoOfSeconds dans la chaîne. La Chaîne de format est dans la forme de
07:06:05 ou 07:06:05.123456
La chaîne peut ou peut ne pas avoir une décimale dans les secondes et quand il le fait, il pourrait être n'importe quel nombre de caractères pour représenter les Nano Secondes de la partie.

À l'aide d'un DateTimeForamtter comme

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

ou

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

Je peux utiliser une instruction if pour distinguer entre 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 OK avec ça, mais j'ai besoin d'être en mesure d'utiliser également un nombre variable de positions après la virgule.

Un échantillon de données peut être:

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

Est-il un moyen pour permettre au formateur d'analyser n'importe quel nombre de chiffres après la virgule sans lui jeter un java.time.format.DateTimeParseException lorsque le nombre de décimales est inconnu?

J'espère que je manque quelque chose de vraiment simple.

pour répondre à la première question, il semble que vous pourriez simplement de tester la longueur de la chaîne if (stringValue.length() > 7) { //use second formatter } else if (stringValue.length() == 7) { //use first formatter } je ne suis pas sûr de comprendre la deuxième question, pourriez-vous élaborer?
Je ne comprends pas la deuxième soit - j'espère que c'est pas de ma réponse à la première 🙂
Semble laid d'avoir à vérifier pour un nombre précis de places et de décider sur un format basé sur cela. Semble logique d'avoir un formateur qui a été un peu moins stricte sur le nombre de caractères (mais là encore nous avons affaire à des chaînes de caractères)
Bien pour pas je me contenterai d'une combinaison de si les déclarations et manuellement la troncation de la chaîne en un nombre fixe de positions " si(strValue.length()> 12) { strValue = strValue.substring(0,12);}. C'est moche et j'espère que quelqu'un a une meilleure suggestion.

OriginalL'auteur jbolt | 2015-06-11