tl; dr
Pendekatan modern menggunakan kelas 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
Hindari kelas tanggal waktu lama
Cara modern adalah dengan kelas java.time. Kelas tanggal-waktu lama sepertiCalendar telah terbukti tidak dirancang dengan baik, membingungkan, dan menyusahkan.
Tentukan formatter khusus untuk mencocokkan input string Anda.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
Parse sebagai a ZonedDateTime.
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
Anda tertarik pada tahun dan bulan. Kelas java.time termasuk YearMonthkelas untuk tujuan itu.
YearMonth ym = YearMonth.from( zdt );
Anda dapat menginterogasi untuk angka tahun dan bulan jika diperlukan.
int year = ym.getYear();
int month = ym.getMonthValue();
Tetapi toStringmetode ini menghasilkan string dalam format standar ISO 8601 .
String output = ym.toString();
Kumpulkan semuanya.
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();
Dump ke konsol.
System.out.println( "input: " + input );
System.out.println( "zdt: " + zdt );
System.out.println( "ym: " + ym );
input: Sen 14 Mar 16:02:37 GMT 2011
zdt: 2011-03-14T16: 02: 37Z [GMT]
ym: 2011-03
Kode langsung
Lihat kode ini berjalan di IdeOne.com .
Konversi
Jika Anda harus memiliki Calendarobjek, Anda bisa mengonversi ke GregorianCalendarmenggunakan metode baru yang ditambahkan ke kelas lama.
GregorianCalendar gc = GregorianCalendar.from( zdt );
Tentang java.time
The java.time kerangka dibangun ke Jawa 8 dan kemudian. Kelas-kelas ini menggantikan tua merepotkan warisan kelas tanggal-waktu seperti java.util.Date, Calendar, &SimpleDateFormat .
Proyek Joda-Time , sekarang dalam mode pemeliharaan , menyarankan migrasi ke java.time.
Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasi adalah JSR 310 .
Di mana mendapatkan kelas java.time?
- Java SE 8 dan SE 9 dan yang lebih baru
- Built-in
- Bagian dari API Java standar dengan implementasi yang dibundel.
- Java 9 menambahkan beberapa fitur dan perbaikan kecil.
- Java SE 6 dan SE 7
- Android
Proyek ThreeTen-Extra memperpanjang java.time dengan kelas tambahan. Proyek ini adalah ajang pembuktian untuk kemungkinan penambahan masa depan ke java.time. Anda mungkin menemukan beberapa kelas berguna di sini seperti Interval, YearWeek, YearQuarter, dan lebih .