Java-String-zu-Datum-Konvertierung
Was ist der beste Weg, um zu konvertieren eine String
im format "January 2, 2010' an eine Date
in Java?
Schließlich möchte ich brechen Sie den Monat, den Tag und das Jahr als ganze zahlen, so dass ich verwenden können,
Date date = new Date();
date.setMonth()..
date.setYear()..
date.setDay()..
date.setlong currentTime = date.getTime();
konvertieren Sie das Datum in der Zeit.
InformationsquelleAutor der Frage littleK | 2010-11-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist der harte Weg, und diejenigen, die
java.util.Date
setter-Methoden als veraltet markiert worden seit Java 1.1 (1997). Einfach formatieren Sie das Datum mit" = SimpleDateFormat
mit einem format pattern-matching der input-string.In Ihrem speziellen Fall des "2. Januar 2010" als input-string:
MMMM
Muster für esd
Muster.yyyy
Muster.Hinweis auf die Bedeutung der expliziten
Locale
argument. Wenn Sie es weglassen, dann wird es mit dem Standardgebietsschema die nicht unbedingt Englisch in den Monat name des input-string. Wenn das Gebietsschema nicht übereinstimmen mit den input-string, dann würden Sie verwechseln bekommenjava.text.ParseException
zwar auch dann, wenn die format-Muster scheint gültig.Hier ist ein Auszug der Bedeutung aus in der javadocder alle verfügbaren format Muster:
Beachten Sie, dass die Muster groß-und Kleinschreibung und dass text-basierte Muster von vier Zeichen oder mehr stellen die volle form; ansonsten eine kurze oder abgekürzte form verwendet wird, falls verfügbar. So z.B.
MMMMM
oder mehr ist unnötig.Hier sind einige Beispiele für gültige
SimpleDateFormat
Muster zu analysieren, einen bestimmten string zu Datum:Ein wichtiger Hinweis ist, dass
SimpleDateFormat
ist nicht thread-sicher. In anderen Worten, Sie sollten sich nie erklären, und weisen Sie es als eine statische oder Instanz-variable und dann wiederverwenden von verschiedenen Methoden/threads. Sie sollten immer erstellen, damit neue innerhalb der Methode lokal.Java 8 update
Wenn Sie geschehen, um auf Java 8 oder höher, dann verwenden Sie
DateTimeFormatter
(auch hier, klicken Sie auf den link, um zu sehen, alle vordefinierten Formatierungen und Formate Muster; das tutorial ist hier verfügbar). Diese neue API, inspiriert von JodaTime.Hinweis: wenn Ihr format-Muster-Fall zu enthalten, die den Teil der Zeit, dann verwenden Sie
LocalDateTime#parse(text, Formatierung)
stattLocalDate#parse(text, Formatierung)
. Und, wenn Ihr format-Muster-Fall zu enthalten Zeit-zone, dann verwenden SieZonedDateTime#parse(text, Formatierung)
statt.Hier ist ein Auszug der Bedeutung aus in der javadocder alle verfügbaren format Muster:
Tun, beachten Sie, dass es mehrere vordefinierte Formatierungen für die beliebtesten Muster. Also anstatt z.B.
DateTimeFormatter.ofPattern("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
könnten SieDateTimeFormatter.RFC_1123_DATE_TIME
. Dies ist möglich, weil Sie, im Gegensatz zuSimpleDateFormat
thread-sicher. So kann man auch eigene definieren, wenn nötig.Für ein bestimmtes input-string-format, Sie brauchen nicht, eine explizite
DateTimeFormatter
: ein standard - ISO 8601 Datum, wie 2016-09-26T17:44:57Z, kann analysiert werden, direkt mitLocalDateTime#parse(text)
wie es bereits jetzt verwendet dieISO_LOCAL_DATE_TIME
formatter. EbensoLocalDate#parse(text)
analysiert ein ISO-Datum ohne Zeit-Komponente (sieheISO_LOCAL_DATE
), undZonedDateTime#parse(text)
analysiert ein ISO-Datum mit offset-und Zeit-zone Hinzugefügt (sieheISO_ZONED_DATE_TIME
).InformationsquelleAutor der Antwort BalusC
Ach ja, die Java-Date-Diskussion wieder. Umgang mit manipulation von Datum verwenden wir DatumKalenderGregorianCalendarund "=SimpleDateFormat. Zum Beispiel über Ihre. Januar als Datum des Eingangs:
Dann können Sie manipulieren, dass Sie mit etwas wie:
InformationsquelleAutor der Antwort pn1 dude
InformationsquelleAutor der Antwort Ruthreshwar
Mit Java 8 bekommen wir eine neue Date /Time API (JSR 310).
Folgende Weise analysiert werden kann, das Datum in Java 8, ohne sich auf Joda-Time:
LocalDate ist die standard-Java-8-Klasse für die Darstellung eines Datums (ohne Zeit). Wenn Sie wollen, um zu analysieren, Werte mit Datum und Uhrzeit-Informationen, die Sie verwenden sollten LocalDateTime. Für Werte mit Zeitzonen verwenden ZonedDateTime. Beide bieten eine
parse()
Methode ähnlichLocalDate
:In der Liste die Formatierung von Zeichen aus DateTimeFormatter-Javadoc:
InformationsquelleAutor der Antwort micha
Während einige der Antworten sind technisch korrekt, Sie sind nicht ratsam.
Beliebten open-source -, free-of-cost-Bibliothek verwendet werden kann, über mehrere Versionen von Java. Viele Beispiele für die Verwendung finden Sie auf StackOverflow. Lesen einige davon werden dir helfen, dich schnell auf Touren.
Diese neuen Klassen sind inspiriert von Joda-Time wird definiert durch JSR-310. Diese Klassen in Java 8. Ein Projekt ist im Gange, um Rückportierung dieser Klassen, um Java 7, aber das Zurückportieren ist nicht unterstützt durch Oracle.
Datum hat sowohl eine Datum-Teil und einem time-of-day-Teils)
Der Anfang von einem Tag, hängt von der Zeitzone. Wenn Sie scheitern, um eine Zeitzone angeben, die JVM die default-Zeitzone angewendet wird. Das bedeutet, dass das Verhalten des Codes ändern, wenn die Ausführung auf anderen Computern oder mit einer geänderten Einstellung der Zeitzone. Wahrscheinlich nicht das, was Sie wollen.
Die Gebietsschema-Sprache legt fest, wie zu interpretieren die Worte (Namen von Monat und Tag) begegnet während der Analyse. (Die Antwort von BalusC verarbeitet das richtig.) Auch das Gebietsschema wirkt sich auf die Ausgabe einige Formatierungen bei der Erzeugung eines string-Darstellung des Datum-Zeit.
Joda-Time
Einige Notizen über Joda-Time Folgen.
Zeitzone
In Joda-Timeein DateTime Objekt wirklich kennt seinen eigenen zugeordneten Zeit-zone. Dies steht im Gegensatz zu java.util.Date-Klasse, die scheintum über ein Zeit-zone aber nicht.
Beachten Sie in dem Beispiel-code unten, wie wir an einem Zeit-zone-Objekt, um das Formatierungsprogramm die parst den string. Die Zeitzone wird verwendet, um zu interpretieren, dass die Datum-Zeit als geschehen in dieser Zeit-zone. So müssen Sie denken, und bestimmen Sie die Zeitzone, vertreten durch das string-input.
Da Sie keine Zeit haben, Teil in Ihrem input-string, Joda-Time, weist der erste moment, der den Tag des angegebenen Zeit-zone, wie die time-of-Tag. In der Regel bedeutet dies
00:00:00
aber nicht immer, weil der Daylight Saving Time (DST) oder andere Anomalien. Übrigens, Sie können das gleiche tun, um DateTime-Instanz durch den AufrufwithTimeAtStartOfDay
.Formatter Muster
Verwendeten Zeichen in einem formatter-Muster sind ähnlich in der Joda-Time, um diese in java.util.Datum/Kalender, aber nicht genau das gleiche. Lesen Sie sorgfältig die doc.
Unveränderlichkeit
Normalerweise verwenden wir das immutable-Klassen in Joda-Time. Anstatt eine vorhandene zu ändern-Datum /Uhrzeit-Objekt, nennen wir Methoden, erstellen Sie eine neue Instanz basierend auf das andere Objekt, mit dem Sie die meisten Aspekte kopiert, außer, wo Veränderungen gewünscht wurden. Ein Beispiel ist der Aufruf von
withZone
im letzten Zeile unten. Unveränderlichkeit machen hilft Joda-Time sehr thread-sicher und können auch einige arbeiten mehr klar.Konvertierung
Benötigen Sie java.util.Date-Objekte für die Verwendung mit anderen Klassen/Frameworks, die nicht wissen, über die Joda-Time-Objekten. Zum Glück ist es sehr einfach, hin und her bewegen.
Geht aus einer von java.util.Date-Objekt (hier benannt
date
) zu Joda-Time DateTime...Gehen in die andere Richtung von Joda-Time, java.util.Date-Objekt...
Beispielcode
Beim laufen...
InformationsquelleAutor der Antwort Basil Bourque
Während auf den Umgang mit dem " = SimpleDateFormat Klasse, es ist wichtig, daran zu erinnern, dass Datum ist nicht thread-sicher und können Sie nicht teilen, ein einzelnes Date-Objekt mit mehreren threads.
Auch dort ist großer Unterschied zwischen "m" und "M", wo kleine Fall wird verwendet, für Minuten und Kapital Fall dient die für den Monat. Das gleiche mit "d" und "D". Dies kann zu subtilen bugs, die oft übersehen werden. Sehen Javadoc oder Anleitung zum Konvertieren von Zeichenfolgen in Datumsangaben in Java weitere details.
InformationsquelleAutor der Antwort Jim
Es funktioniert gut für mich.
InformationsquelleAutor der Antwort Luna Kong
Auch, " = SimpleDateFormat ist nicht verfügbar für einige der client-side Technologien, wie GWT.
Ist es eine gute Idee, gehen Sie zum Kalender.getInstance(), und Ihre Anforderung wird zum vergleichen von zwei dates; gehen Sie für das lange Datum.
InformationsquelleAutor der Antwort Vaishali Kulkarni
Einfache zwei-Formatierer, die wir verwendet haben:
Wir analysieren die vollständige Datums-Zeit-format:
InformationsquelleAutor der Antwort siddharth patel
Meiner bescheidenen test-Programm. Ich benutze es zum spielen, um mit dem formatter und look-up-langen-Termine, die finde ich in den log-files (aber wer hat Sie dort hingestellt...).
Mein test-Programm:
Test-Ergebnisse:
InformationsquelleAutor der Antwort Dimitri Dewaele
Hatte ich eine Aufgabe, wo ich den code schreiben, dass würde nehmen Sie eine beliebige Zeichenfolge und versucht, es zu konvertieren zu einem Zeitpunkt, wenn der string das format ist nicht im Voraus bekannt.
Schrieb ich ein Interessantes Hilfsprogramm. Hier ist der Artikel beschreibt die Idee: Java 8 java.Zeit-Paket: Analyse-string zu Datum. Realisiert wurde dies in Java 8, aber die Idee könnte umgesetzt werden, die in früheren Versionen als gut.
InformationsquelleAutor der Antwort Michael Gantman
Für Android
Kalender.getInstance().getTime() gibt
Verwenden
InformationsquelleAutor der Antwort Code Spy
Versuchen, diese
InformationsquelleAutor der Antwort Madhuka Dilhan