2012-06-14 31 views
13

Ich speichere Nachrichten aus einer Amazon Cloud und ordne sie nach ihrem Zeitstempel in einer sortierten Karte an.Java Datum in Millisekunden

Ich bin Parsen den Zeitstempels aus der Wolke mit dem folgenden Code:

Date timestamp = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS'Z'", Locale.ENGLISH).parse(time); 

und dann in ihr in einer sortierten Karte Ich bin die Speicherung mit der Taste das Datum zu sein. Das Problem besteht darin, dass das Datum nur auf Sekundengenauigkeit herunterkommt. Ich kann mehrere Nachrichten in 1 Sekunde gesendet haben, also muss ich sie mit Millisekundengenauigkeit bestellen. Gibt es eine Datenstruktur, die dies erlaubt?

+3

Zeigen Sie uns den Wert von 'Zeit'. – adarshr

+1

Ihr Format sagt 'SSS' also millis muss da sein –

+0

Wenn' time' UTC timezone ('Z') enthält, verwenden Sie' yyyy-MM-dd'T'hh: mm: ss.SSSZ' anstelle von 'yyyy-MM -dd'T'hh: mm: ss.SSS'Z''. 'Z' wird * greifen *' Z' sowie z.B. '+0100' –

Antwort

20

Solange Ihre Quelle eine höhere Auflösung als 1 Sekunde hat. Sieht nach dem Muster aus, aber Sie haben uns kein Eingabebeispiel gezeigt.

Date ist nur ein Wrapper um eine long Millisekunden seit 1970-01-01. Das hast du schon. Date.getTime() wird das mit Millisekunden-Genauigkeit zurückgeben.

Warum würden Sie denken, dass Date nur eine Sekunde Genauigkeit hat? Date.compareTo(Date anotherDate) vergleicht auf einer Millisekunden-Ebene. So sollte Ihre SortedMap gut funktionieren, es sei denn, Sie tun etwas Seltsames.

+0

Ich dachte, dass es nicht konnte, da ich nicht in der Lage war, die Millisekunden zu bekommen oder sie einzustellen. Aber Sie haben Recht. Dank dafür. Der Fehler kam von der Tatsache, dass ich Nachrichten mit der Geschwindigkeit konsumierte, in der sie hereinkamen. Dies bedeutete, dass die Zeit nicht richtig genutzt wurde. Es wurde behoben, indem 350 Millisekunden gewartet und dann aus der Warteschlange verbraucht wurde. –

1

Ich bin mir nicht sicher, ob Sie das getan haben, aber Sie können Ihren eigenen Komparator erstellen und diesen verwenden.

Als eine Randnotiz, abhängig von Ihrer Anwendung Setup möchten Sie vielleicht vorsichtig sein, wie Sie SimpleDateFormat verwenden, gibt es einige Probleme damit.

Verwandte Themen