Bagaimana cara mengetahui berapa hari memiliki bulan tertentu pada tahun tertentu?
String date = "2010-01-19";
String[] ymd = date.split("-");
int year = Integer.parseInt(ymd[0]);
int month = Integer.parseInt(ymd[1]);
int day = Integer.parseInt(ymd[2]);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.MONTH,month);
int daysQty = calendar.getDaysNumber(); // Something like this
java.util.Date
,java.util.Calendar
, danjava.text.SimpleDateFormat
sekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 dan kemudian. Lihat Tutorial oleh Oracle .Jawaban:
Java 8 dan yang lebih baru
@ Warren M. Nocos. Jika Anda mencoba menggunakan API Tanggal dan Waktu Java 8 yang baru , Anda bisa menggunakan
java.time.YearMonth
kelas. Lihat Tutorial Oracle .Tes: coba sebulan di tahun kabisat:
Java 7 dan sebelumnya
Buat kalender, atur tahun dan bulan dan gunakan
getActualMaximum
Tes : coba sebulan di tahun kabisat:
sumber
Kode untuk java.util.Calendar
Jika Anda harus menggunakan
java.util.Calendar
, saya curiga Anda ingin:Kode untuk Joda Time
Namun secara pribadi, saya sarankan menggunakan Joda Time daripada
java.util.{Calendar, Date}
memulai, dalam hal ini Anda dapat menggunakan:Perhatikan bahwa daripada mem-parsing nilai string secara individual, akan lebih baik untuk mendapatkan API tanggal / waktu apa pun yang Anda gunakan untuk menguraikannya. Di
java.util.*
Anda mungkin menggunakanSimpleDateFormat
; di Joda Time Anda akan menggunakan aDateTimeFormatter
.sumber
Anda dapat menggunakan
Calendar.getActualMaximum
metode:sumber
java.time.LocalDate
Dari Java 1.8, Anda dapat menggunakan metode ini
lengthOfMonth
dijava.time.LocalDate
:sumber
sumber
Ini adalah cara matematika:
Untuk tahun, bulan (1 hingga 12):
sumber
Saya akan mencari solusi seperti ini:
Jika bulan itu bukan Februari (92% dari kasus), itu tergantung pada bulan saja dan lebih efisien untuk tidak melibatkan tahun. Dengan cara ini, Anda tidak perlu memanggil logika untuk mengetahui apakah ini tahun kabisat dan Anda tidak perlu mendapatkan tahun tersebut dalam 92% kasus. Dan itu masih kode bersih dan sangat mudah dibaca.
sumber
Di Java8 Anda bisa menggunakan get ValueRange dari bidang kencan.
Ini memungkinkan Anda untuk membuat parameter pada bidang.
sumber
Sesederhana itu, tidak perlu mengimpor apa pun
sumber
sumber
android.util.MonthDisplayHelper
)sumber
sumber
Penggunaan usang
Calendar
API yang harus dihindari.Dalam Java8 atau versi yang lebih tinggi, ini bisa dilakukan dengan
YearMonth
.Kode contoh:
sumber
Call requires API level 26 (current min is 21): java.time.YearMonth#lengthOfMonth
Mari kita buat sesederhana itu jika Anda tidak ingin hardcode nilai tahun dan bulan dan Anda ingin mengambil nilai dari tanggal dan waktu saat ini:
sumber
Anda dapat menggunakan metode Calendar.getActualMaximum:
Dan bulan-1 adalah Karena bulan mengambil jumlah aslinya bulan sedangkan dalam metode mengambil argumen seperti di bawah ini di Calendar.class
Dan bidang (int) seperti di bawah ini.
sumber
Metode berikut ini akan memberi Anda jumlah hari dalam bulan tertentu
sumber
Varians yang optimal dan berkinerja:
Untuk detail lebih lanjut tentang algoritma lompatan, periksa di sini
sumber
sumber
Ini bekerja dengan baik untuk saya.
Ini adalah Output Sampel
sumber
sumber