java.time
Wir haben neue Technologie für dieses Problem: Rahmen java.time in Java gebaut 8 und höher.
Ihre Eingabezeichenfolge entspricht dem Standard ISO 8601-Format. Dieser Standard wird standardmäßig in den java.time-Klassen zum Parsen/Erzeugen von textuellen Darstellungen von Datum-Uhrzeit-Werten verwendet.
OffsetDateTime odt = OffsetDateTime.parse("2012-10-01T09:45:00.000+02:00");
Ihre Frage schlägt vor, dass Sie auf eine ganze Sekunde abschneiden möchten.
OffsetDateTime odtTruncatedToWholeSecond = odt.truncatedTo(ChronoUnit.SECONDS);
Es scheint, Sie möchten die Offset- und Zeitzoneninfo weglassen. Der vordefinierte Formatierer DateTimeFormatter.ISO_LOCAL_DATE_TIME
macht das.
Und anscheinend möchten Sie ein Leerzeichen in der Mitte anstelle des Standards T
verwenden. Sie könnten dafür einen eigenen Formatierer definieren, aber ich würde einfach eine Zeichenfolgenmanipulation durchführen, um die T
durch einen SPACE zu ersetzen.
String output = odtTruncatedToWholeSecond.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME).replace("T" , " ");
einfach String Manipulations
Da die Kommentare zu der Frage vorschlagen, streng genommen Sie Ihr Ziel durch die Arbeit nur mit Streichern erreichen können und nicht auf irgendwelche Datum Zeitobjekte konvertieren. Aber ich gebe diese Antwort hier, vorausgesetzt, Sie haben möglicherweise andere Geschäftslogik, um mit diesen Datum-Zeit-Werten zu arbeiten.
Über java.time
Der java.time Rahmen in Java 8 gebaut und später. Diese Klassen ersetzen die problematischen alten legacy Datum-Uhrzeit-Klassen wie java.util.Date
, Calendar
, & SimpleDateFormat
.
Das Projekt Joda-Time, jetzt in maintenance mode, rät zur Migration auf die Klassen java.time.
Weitere Informationen finden Sie unter Oracle Tutorial. Und suchen Sie nach Stack Overflow für viele Beispiele und Erklärungen. Spezifikation ist JSR 310.
Sie können java.time Objekte direkt mit Ihrer Datenbank austauschen. Verwenden Sie eine JDBC driver konform mit JDBC 4.2 oder höher. Keine Notwendigkeit für Strings, keine Notwendigkeit für java.sql.*
Klassen.
Wo erhalten Sie die Klassen java.time?
- Java SE 8, Java SE 9 und später
- Built-in.
- Teil der Standard-Java-API mit einer gebündelten Implementierung.
- Java 9 fügt einige kleinere Funktionen und Korrekturen hinzu.
- Java SE 6 und Java SE 7
- Ein großer Teil der java.time Funktionalität zurückportiert zu Java 6 & 7 in ThreeTen-Backport.
- Android
- Spätere Versionen von Android-Bundle Implementierungen der java.time Klassen.
- Für frühere Android, das ThreeTenABP Projekt passt ThreeTen-Backport (oben erwähnt). Siehe How to use ThreeTenABP….
Das ThreeTen-Extra Projekt erstreckt java.time mit zusätzlichen Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Erweiterungen von java.time. Hier finden Sie einige nützliche Klassen wie Interval
, , YearQuarter
und more.
Substringing ist viel schneller/einfacher als die Konvertierung zu/von einem Datumsobjekt Verwendung in Java sein kann. Sie zerlegen das Original in zwei Teilstrings (fixed offsets) und verketten es dann mit einem Leerzeichen dazwischen. –
Warum ist das? Ich könnte bis zu 100 Daten in einem einzigen Durchgang analysieren. – Gooey
Sie glauben nicht, dass zwei Teilstring-Operationen mit fest codierten Offsets plus ein paar Verkettungsoperationen schneller wären als das Erstellen und Ausführen von zwei Datumsformatierern? –