java date format mit 6-stelliger Mikro - /milli-Sekunde
Aus der Postgres-Datenbank bin ich immer eine 6-stellige Mikrosekunde (eigentlich eine ) z.B. 2014-11-10 04:05:06.999999
nun wenn ich ein Datum im format "yyyy-MM-dd HH:mm:ss.SSS" es wandelt die 999999 entsprechenden Sekunden/Minuten was in falsche Datum. Siehe code-snippet unten
String dt = "2014-11-10 04:05:06.999999";
String timeseriesFormat = "yyyy-MM-dd HH:mm:ss.SSS";
SimpleDateFormat dateFormat = new SimpleDateFormat(timeseriesFormat);
Date date = dateFormat.parse(dt);
System.out.println(dateFormat.format(date));
Ergebnisse im 2014-11-10 04:21:45.999
Möchte ich eher abschneiden, die letzten 3 stellen und halten Sie ein Datum der 2014-11-10 04:05:06.999.
Wie man es abschneiden? Ich will nicht verwenden Sie keinen Rahmen wie joda usw.
Sind die Mikrosekunden coming out 0-gepolsterte?
2014-11-10 04:05:06.15
vs. 2014-11-10 04:05:06.000015
einen Unterschied macht.InformationsquelleAutor user1712512 | 2014-11-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Doppelte zu dieser Custom date format nicht analysiert werden kann.
Fazit ist
SimpelDateFormat
unterstützt keine Mikrosekunde, und Sie müssen Ihre eigenen parserVersuchen, diese
Java 8 und höher jetzt hat solch ein parser-built-in, in der java.Zeit Rahmen. Siehe meine Antwort.
InformationsquelleAutor smushi
java.sql.Timestamp
Sollten Sie mit Ihrem JDBC-Treiber zu bekommen
java.sql.Timestamp
Objekt. Diese Klasse ist ein hack, aber es funktioniert. Es ist ein java.util.Datum, sondern tracks die Sekundenbruchteile, Auflösung von Nanosekunden statt Millisekunden. Es wird also die Erhaltung der Mikrosekunden verwendet Postgres.Können Sie es verwenden, als java.util.Datum aber in anderen Kontexten verlieren Sie Ihre extra-Auflösung.
java.Zeit
Tipp: schau mal in java.Zeit Paket in Java 8. Es bietet eine full-date-time-Bibliothek, deren Objekte Nanosekunden-Auflösung. Die java.sql.Timestamp-Klasse verfügt über Methoden zum hin und her konvertieren.
Beachten Sie, dass in java.die Zeit einen Formatierer codiert Parsen pattern-string funktioniert nicht für eine variable Anzahl von Sekundenbruchteilen Ziffern. Sehen Sie, diese Frage, JSR-310 - parsing Sekunden Bruchteil mit variabler Länge zur Diskussion. Die Lösung ist die Verwendung eines
DateTimeFormatterBuilder
Objekt zu sagen, dass wir erwarten, dass jede Zahl mit null, einer oder mehreren Ziffern (bis zu neun) für einen Bruchteil der Sekunde.Unserer input-string hat keine Zeit-zone noch der offset von UTC. Also müssen wir zuerst den Prozess als einen "lokalen" Datum-Zeit, nicht gebunden an einen moment auf der Zeitachse.
Let ' s binden Sie es auf der Zeitachse, indem ein offset von UTC. Ich gehe davon aus, dass bei dieser Frage die bestimmt Offsets von UTC selbst.
Schließlich wollen wir umwandeln in eine java.sql-Typ für die Kommunikation mit der Datenbank. Wir müssen eine
Instant
, einen moment auf der Zeitachse, immer in UTC-per definition. Können Sie sich vorstellen wie einOffsetDateTime
alsInstant
plus ein offset von UTC. Zum konvertieren in java.sql, die wir brauchen, um Streifen entfernt den offset von der UTC-Komponente durch Extraktion nur eine einfacheInstant
.Dump in die Konsole.
InformationsquelleAutor Basil Bourque
Versuchen
dt.substring(0, dt.length() - 3)
Dieser Kommentar widerspricht deiner Frage, die sagt, Sie haben einen String.
InformationsquelleAutor benji