Saya baru mengenal Java, biasanya bekerja dengan PHP.
Saya mencoba mengonversi string ini:
Senin 14 Maret 16:02:37 GMT 2011
Menjadi Obyek Kalender sehingga saya dapat dengan mudah menarik Tahun dan Bulan seperti ini:
String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);
Akankah ide buruk untuk menguraikannya secara manual? Menggunakan metode substring?
Saran apa pun akan membantu terima kasih!
Jawaban:
Catatan: atur
Locale
sesuai dengan lingkungan / kebutuhan AndaLihat juga
sumber
java.time
. Tanya Jawab ini tampil cukup menonjol di google.tl; dr
Pendekatan modern menggunakan kelas java.time .
Hindari kelas tanggal waktu lama
Cara modern adalah dengan kelas java.time. Kelas tanggal-waktu lama seperti
Calendar
telah terbukti tidak dirancang dengan baik, membingungkan, dan menyusahkan.Tentukan formatter khusus untuk mencocokkan input string Anda.
Parse sebagai a
ZonedDateTime
.Anda tertarik pada tahun dan bulan. Kelas java.time termasuk
YearMonth
kelas untuk tujuan itu.Anda dapat menginterogasi untuk angka tahun dan bulan jika diperlukan.
Tetapi
toString
metode ini menghasilkan string dalam format standar ISO 8601 .Kumpulkan semuanya.
Dump ke konsol.
Kode langsung
Lihat kode ini berjalan di IdeOne.com .
Konversi
Jika Anda harus memiliki
Calendar
objek, Anda bisa mengonversi keGregorianCalendar
menggunakan metode baru yang ditambahkan ke kelas lama.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?
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 .sumber
Yah, saya pikir itu akan menjadi ide yang buruk untuk mereplikasi kode yang sudah ada di kelas seperti
SimpleDateFormat
.Di sisi lain, secara pribadi saya menyarankan untuk menghindari
Calendar
danDate
sepenuhnya jika Anda bisa, dan menggunakan Joda Time sebagai gantinya, API tanggal dan waktu yang dirancang jauh lebih baik. Misalnya, Anda harus menyadari bahwaSimpleDateFormat
itu bukan thread-safe, jadi Anda perlu thread-local, sinkronisasi, atau contoh baru setiap kali Anda menggunakannya. Joda parser dan formatters adalah benang-aman.sumber
java.time
adalah jalan yang harus ditempuh, Basil Bourque memberikan jawaban yang sangat baik.Tidak ada Kalender baru yang perlu dibuat, SimpleDateFormat sudah menggunakan Kalender di bawahnya.
(Saya belum bisa berkomentar, itu sebabnya saya membuat jawaban baru)
sumber
SimpleDateFormat
bagus, hanya catatan yangHH
berbeda darihh
ketika bekerja dengan jam.HH
akan kembali 24 jam berbasis dan akan kembali 12 jam berbasisMisalnya, yang berikut ini akan mengembalikan waktu 12 jam:
Sementara ini akan kembali 24 jam:
sumber
Pisahkan waktu dengan zona waktu,
Z
polanya adalah untuk zona waktuOutput: ini akan mengembalikan waktu UTC
Jika kita tidak mengatur zona waktu dalam pola seperti
yyyy-MM-dd'T'HH:mm:ss
.SimpleDateFormat
akan menggunakan zona waktu yang telah ditetapkanSetting
sumber
Ya itu akan menjadi praktik buruk untuk menguraikannya sendiri. Lihatlah SimpleDateFormat , itu akan mengubah String menjadi Date dan Anda dapat mengatur Date menjadi instance Calendar.
sumber
Metode sederhana:
sumber