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.
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
Vous devez vous connecter pour publier un commentaire.
Il n'est pas nécessaire de faire quelque chose de spécial pour analyser ce format.
LocalTime.parse(String)
déjà poignées en option nanosecondes:Tous les ci-dessus analyser fine, voir aussi la Javadoc spec.
:
?OriginalL'auteur JodaStephen
Vous pourriez utiliser "sections facultatives" du modèle de format pour cette:
Il serait utile si vous préciser votre question à expliquer ce que vous entendez.
question 2 a j'ai besoin d'analyser un nombre inconnu de décimales après la virgule. Il pourrait être 0 ou plus (la virgule pourrait même ne pas être inclus) et donc les deux différentes signatures
Ce n'est pas encore très clair. Donner des exemples de ce que vous proposez serait beaucoup plus clair.
Pas beaucoup de choses, dites-vous si il y a plus de 3 décimales, il vous reste qu'à analyser les trois premiers? Encore une fois, exemples de l'aide de l'échantillon d'entrée et de sortie attendue.
OriginalL'auteur Jon Skeet