Coverting String LocalTime mit/ohne nanoOfSeconds

Ich brauche, um zu konvertieren eine Zeichenfolge in LocalTime (java-8 nicht joda), die können oder maynot haben nanoOfSeconds in der Zeichenfolge. Der format-String ist in der form von
07:06:05 oder 07:06:05.123456
Der string kann oder kann nicht eine Dezimalstelle in der Sekunden und wenn es tut, es könnte eine beliebige Anzahl von Zeichen darstellen, die Nano-Sekunden Teil.

Mit einem DateTimeForamtter wie

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

oder

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

Kann ich verwenden Sie eine IF-Anweisung zur Unterscheidung der beiden Formate wie:

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

Dies funktioniert gut und ich bin OK mit diesem, aber ich muss in der Lage sein, auch eine unterschiedliche Anzahl von Nachkommastellen.

Beispieldaten könnten sein:

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

Gibt es eine Möglichkeit, den formatter, die zum analysieren einer beliebigen Anzahl von Ziffern nach dem Komma, ohne es zu werfen einen java.time.format.DateTimeParseException wenn die Anzahl der Dezimalstellen ist unbekannt?

Ich hoffe, dass ich etwas fehlt wirklich einfach.

  • zur Beantwortung der ersten Frage, es scheint, dass Sie könnte einfach testen Sie die Länge der Zeichenfolge if (stringValue.length() > 7) { //use second formatter } else if (stringValue.length() == 7) { //use first formatter } ich bin mir nicht sicher, ich verstehe die zweite Frage, könnten Sie das näher erläutern?
  • Ich verstehe nicht, die zweite entweder - ich hoffe, es ist irrelevant angesichts meiner Antwort auf die erste 🙂
  • Scheint hässlich zu haben, um zu überprüfen, für eine bestimmte Anzahl von Orten und zu entscheiden, auf ein format basierend auf, dass. Scheint logisch, einen Formatierer, der war ein wenig weniger streng über die Anzahl der Zeichen (aber dann wieder sind wir im Umgang mit strings)
  • Auch für nicht ich sich für eine Kombination von if-Anweisungen und manuell abschneiden des Strings auf eine Feste Anzahl von Positionen `if(strValue.length()> 12) { strValue = strValue.substring(0,12);}. Das ist hässlich und hoffe, jemand hat einen besseren Vorschlag.
InformationsquelleAutor jbolt | 2015-06-11
Schreibe einen Kommentar