tl; dr
Der moderne Ansatz verwendet die Klassen java.time .
YearMonth.from(
ZonedDateTime.parse(
"Mon Mar 14 16:02:37 GMT 2011" ,
DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" )
)
).toString()
2011-03
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.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
Als analysieren ZonedDateTime
.
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
Sie interessieren sich für das Jahr und den Monat. Die java.time-Klassen enthalten YearMonth
zu diesem Zweck eine Klasse.
YearMonth ym = YearMonth.from( zdt );
Bei Bedarf können Sie die Jahres- und Monatszahlen abfragen.
int year = ym.getYear();
int month = ym.getMonthValue();
Die toString
Methode generiert jedoch eine Zeichenfolge im Standardformat ISO 8601 .
String output = ym.toString();
Alles zusammen.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
YearMonth ym = YearMonth.from( zdt );
int year = ym.getYear();
int month = ym.getMonthValue();
Zur Konsole werfen.
System.out.println( "input: " + input );
System.out.println( "zdt: " + zdt );
System.out.println( "ym: " + ym );
Eingabe: Mo 14. März 16:02:37 GMT 2011
zdt: 2011-03-14T16: 02: 37Z [GMT]
ym: 2011-03
Live-Code
Siehe dieser Code ausgeführt wird in IdeOne.com .
Umwandlung
Wenn Sie ein Objekt haben müssenCalendar
, können Sie es GregorianCalendar
mit neuen Methoden konvertieren, die zu den alten Klassen hinzugefügt wurden.
GregorianCalendar gc = GregorianCalendar.from( zdt );
Ü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?
- Java SE 8 und SE 9 und höher
- Eingebaut.
- Teil der Standard-Java-API mit einer gebündelten Implementierung.
- Java 9 fügt einige kleinere Funktionen und Korrekturen hinzu.
- Java SE 6 und SE 7
- Android
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 .