Konvertierung eines time String ISO 8601-format
Ich versuche zum erstellen einer Zeichenfolge in ein format wie 2015-08-20T08:26:21.000 Z
zu 2015-08-20T08:26:21Z
Ich weiß, es kann getan werden, mit einigen String-splitting-Techniken, aber ich Frage mich, ob es eine elegante Lösung für die, die (mit minimalen änderungen am code).
Beide der oben genannten Zeit, die Saiten, das Letzte was ich brauchen, ist Datum im ISO 8601 . http://tools.ietf.org/html/rfc3339#section-5.6
Ich habe versucht ein paar ähnliche Fragen wie Konvertierung eines Datums-string in Millisekunden in java aber nicht eigentlich lösen, der Zweck.
Habe auch versucht mit :
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");
String nowAsString = df.format(new Date());
Aber es noch nicht tun, keine String-zu-String-Konvertierungen. Immer den folgenden Fehler:
23:04:13,829 WARNEN [RuntimeExceptionMapper] gefangen RuntimeException: {}: java.lang.IllegalArgumentException: Cannot format given Object as a Date
Gibt es eine Bibliothek, die jemand vorschlagen kann ?
Dank.
- Joda-Time. Siehe: jodatime
- Was Typ Date?
- Eingang und Ausgang sind beide strings. Aber diese strings tatsächlich repräsentieren unterschiedliche Zeitzonen.
- Eine DateFormat-String hat zu Zeitpunkt und Datum, zu-String-Konvertierung. Sie möchten die String-zu-String-Konvertierung. So können Sie verwenden Sie ein Datumsformat, das zu tun-String zu Datum-Konvertierung, und eine, die tut, Datum Zu-String-Konvertierung. Und Nein, Sie repräsentieren nicht den Unterschied Zeitzonen. Hat man eine Millisekunde Teil und der andere nicht. Das ist der einzige Unterschied. Die endgültige Z-bedeutet, Zulu-Zeit, d.h. UTC-Zeitzone.
- Also org.joda.Zeit.format.DateTimeFormatter ?
- Also Ihr Ziel ist die Beseitigung des
.000
? Dein Titel ist verwirrend, da die beiden Datum-Zeit-strings in deinem ersten Satz sind gültig ISO-8601 - strings.
Du musst angemeldet sein, um einen Kommentar abzugeben.
tl;dr
Datum- /Zeit-Formatierer
Wenn alles, was Sie wollen zu tun ist, beseitigen Sie die
.000
, dann verwenden Sie die Datum-Zeit-Objekte zu Parsen Ihre input-string-Wert, dann erstellen Sie einen neuen string-Darstellung von Datum-Uhrzeit-Wert in einem anderen format.ISO 8601
Durch die Art und Weise, wenn das Ihr Ziel ist, die Frage der Titel keinen Sinn machen, da sowohl die Streicher bereits im ersten Satz sind gültig ISO 8601 - formatierte Zeichenfolgen.
2015-08-20T08:26:21.000Z
2015-08-20T08:26:21Z
java.Zeit
Java 8 und später hat die neue java.Zeit-Paket. Diese neuen Klassen verdrängen die alten java.util.Datum/.Kalender & java.text."=SimpleDateFormat Klassen. Die alten Klassen waren verwirrend, lästig und fehlerhaft.
Sofortige
Wenn alle Sie wollen, ist die UTC-Zeitzone, dann können Sie die
Instant
Klasse. Diese Klasse repräsentiert einen Punkt auf der Zeitleiste, ohne Rücksicht auf eine bestimmte Zeitzone (im Grunde UTC).DateTimeFormatter.ISO_INSTANT
Ruft einen Augenblick der
toString
erzeugt eine Stringdarstellung der date-time-Wert mit einemDateTimeFormatter.ISO_INSTANT
formatter Instanz. Dieser Formatierer wird automatisch flexibel über die in Sekundenbruchteilen. Wenn der Wert eine ganze Sekunde, keine Dezimalstellen generiert werden (offenbar, was die Frage will). Für einen Bruchteil der Sekunde), Ziffern erscheinen in Gruppen von 3, 6, oder 9, wie erforderlich ist, um die Darstellung des Wertes bis zu Nanosekunden-Auflösung. Hinweis: dieses format überschreiten kann ISO-8601-limit von Millisekunden (3 Nachkommastellen).Beispiel-code
Hier finden Sie einige Beispiel-code in Java 8 Update 51.
Wechsel auf einen Bruchteil der Sekunde
.08
Wenn Sie interessiert sind, in jeder Zeit-zone als UTC, dann machen Sie
ZonedDateTime
Objekt aus, dassInstant
.Dein format ist einfach nicht richtig versuchen dieses :-
Konvertierung eines date -
String
unbekannter Formatierung in ein DatumString
verwendet bekannt Formatierung kann durchgeführt werden mit zweiDateFormat
Objekte - eine dynamisch konfiguriert, um zu analysieren, das format der EingabeString
, und konfiguriert sind zum erzeugen der formatierten AusgabeString
. Für Ihre situation am EingangString
Formatierung ist nicht angegeben und muss vom Anrufer, aber die AusgabeString
Formatierung kann so konfiguriert werden, ISO-8601 zu formatieren, ohne zusätzlichen input. Im wesentlichen erzeugen einer ISO 8601 formatiertes DatumString
Ausgabe erfordert zwei Eingaben durch den Anrufer - einString
enthält das formatierte Datum und anderenString
enthält dieSimpleDateFormat
- format.Hier ist die beschriebene Umwandlung von Java-code (ich habe absichtlich ausgelassen haben null Kontrollen und überprüfungen, fügen Sie diese als geeignet für den code):
Wenn Sie ändern möchten, die Methode bitte beachten Sie, dass
SimpleDateFormat
ist nicht thread-sicher, und dass Sie sollten nicht es verwenden, die aus einem statischen Kontext, ohne eine Problemumgehung für multi-threaded-code (ThreadLocal
wird Häufig verwendet, um zu tun, nur so ein workaround fürSimpleDateFormat
).Einen zusätzlichen "gotcha" ist die Verwendung eines
Locale
während der Bau derSimpleDateFormat
Objekte - entfernen Sie nicht dieLocale
Konfiguration. Es ist nicht sicher, um das system zu wählen, um die Standard -Locale
denn, der Benutzer/Maschine spezifisch. Wenn Sie lassen Sie es für die Verwendung mit Standard -Locale
, laufen Sie Gefahr, transiente Fehler, weil Ihre Entwicklung Maschine verwendet eineLocale
anders als dieLocale
deiner end-Anwender. Sie nicht haben, um meine ausgewählte ENGLISCHLocale
ist es völlig in Ordnung, verwenden Sie ein anderes Gebietsschema (Sie sollten verstehen, die Regeln, dassLocale
und ändern Sie den code entsprechend aber). Angabe keineLocale
und die Auslastung der system-Standardwert ist falsch, aber, und wird wahrscheinlich dazu führen, dass viele frustrierende Stunden versuchen, zu diagnostizieren, eine schwer nachvollziehbare Fehler.Bitte verstehen Sie, dass diese Lösung nicht ideal, da Java 8 und die Einbeziehung der JodaTime-basierte Klassen, wie
Instant
. Ich entschied mich für die Antwort, die die Verwendung der veralteten API ' s, weil das waren, was Sie Schienen betroffenen mit in Ihre Frage. Wenn Sie mit Java 8 habe ich stark den Drang verspürt zu lernen und nutzen Sie die neuen Klassen, wie Sie eine Verbesserung in fast jeder denkbaren Weise.