Ich bin neu in Java, arbeite normalerweise mit PHP.
Ich versuche diesen String zu konvertieren:
Mon Mar 14 16:02:37 GMT 2011
In ein Kalenderobjekt, damit ich das Jahr und den Monat wie folgt abrufen kann:
String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);
Wäre es eine schlechte Idee, es manuell zu analysieren? Verwenden Sie eine Teilstring-Methode?
Jeder Rat würde helfen, danke!
Antworten:
Hinweis: Je
Locale
nach Umgebung / Anforderung einstellenSiehe auch
quelle
java.time
. Diese Frage / Antwort kommt bei Google ziemlich gut zur Geltung.tl; dr
Der moderne Ansatz verwendet die Klassen java.time .
Vermeiden Sie ältere Datums- und Zeitklassen
Der moderne Weg ist mit java.time Klassen. Die alten Datums-
Calendar
und Uhrzeitklassen haben sich als schlecht gestaltet, verwirrend und problematisch erwiesen.Definieren Sie einen benutzerdefinierten Formatierer, der Ihrer Zeichenfolgeneingabe entspricht.
Als analysieren
ZonedDateTime
.Sie interessieren sich für das Jahr und den Monat. Die java.time-Klassen enthalten
YearMonth
zu diesem Zweck eine Klasse.Bei Bedarf können Sie die Jahres- und Monatszahlen abfragen.
Die
toString
Methode generiert jedoch eine Zeichenfolge im Standardformat ISO 8601 .Alles zusammen.
Zur Konsole werfen.
Live-Code
Siehe dieser Code ausgeführt wird in IdeOne.com .
Umwandlung
Wenn Sie ein Objekt haben müssen
Calendar
, können Sie esGregorianCalendar
mit neuen Methoden konvertieren, die zu den alten Klassen hinzugefügt wurden.Über java.time
Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie
java.util.Date
,Calendar
, &SimpleDateFormat
.Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu java.time.
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
Woher bekomme ich die java.time-Klassen?
Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time. Sie können einige nützliche Klassen hier wie finden
Interval
,YearWeek
,YearQuarter
, und mehr .quelle
Nun, ich denke, es wäre eine schlechte Idee, den Code zu replizieren, der bereits in Klassen wie vorhanden ist
SimpleDateFormat
.Auf der anderen Seite würde ich persönlich empfehlen, Joda Time zu vermeiden
Calendar
undDate
vollständig zu verwenden, wenn Sie können, und stattdessen Joda Time als weitaus besser gestaltete Datums- und Uhrzeit-API zu verwenden. Sie müssen sich beispielsweise bewusst sein, dass dies nicht threadsicherSimpleDateFormat
ist. Daher benötigen Sie bei jeder Verwendung entweder Thread-Locals, Synchronisierung oder eine neue Instanz. Joda Parser und Formatierer sind threadsicher.quelle
java.time
ist der richtige Weg, Basil Bourque gab eine ausgezeichnete Antwort.Es muss kein neuer Kalender erstellt werden. SimpleDateFormat verwendet bereits einen Kalender darunter.
(Ich kann noch keinen Kommentar abgeben, deshalb habe ich eine neue Antwort erstellt.)
quelle
SimpleDateFormat
ist großartig, beachte nur, dassHH
es sich von derhh
Arbeit mit Stunden unterscheidet.HH
wird 24 Stunden Stunden und hh wird 12 Stunden Stunden zurückgeben.Das Folgende gibt beispielsweise die 12-Stunden-Zeit zurück:
Während dies 24 Stunden Zeit zurückgibt:
quelle
Analysieren Sie eine Zeit mit der Zeitzone,
Z
im Muster für die ZeitzoneAusgabe: Es wird die UTC-Zeit zurückgegeben
Wenn wir die Zeitzone nicht wie folgt einstellen
yyyy-MM-dd'T'HH:mm:ss
.SimpleDateFormat
verwendet die eingestellte ZeitzoneSetting
quelle
Ja, es wäre eine schlechte Praxis, es selbst zu analysieren. Schauen Sie sich SimpleDateFormat an , es verwandelt den String in ein Datum und Sie können das Datum in eine Kalenderinstanz setzen.
quelle
Einfache Methode:
quelle