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 YearMonth
kelas 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 toString
metode 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 Calendar
objek, Anda bisa mengonversi ke GregorianCalendar
menggunakan 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 .