int day = Integer.parseInt(request.getParameter("day")); // 25
int month = Integer.parseInt(request.getParameter("month")); // 12
int year = Integer.parseInt(request.getParameter("year")); // 1988
System.out.println(year);
Calendar c = Calendar.getInstance();
c.set(year, month, day, 0, 0);
b.setDob(c.getTime());
System.out.println(b.getDob());
Outputnya adalah:
1988
Rabu 25 Jan 00:00:08 IST 1989
Saya lewat 25 12 1988
tapi saya mengerti 25 Jan 1989
. Mengapa?
Jawaban:
Bulan berbasis nol di Kalender. Jadi 12 diartikan sebagai desember + 1 bulan. Menggunakan
c.set(year, month - 1, day, 0, 0);
sumber
Itu cara favorit saya sebelum Java 8:
Date date = new GregorianCalendar(year, month - 1, day).getTime();
Saya akan mengatakan ini adalah pendekatan yang lebih bersih daripada:
calendar.set(year, month - 1, day, 0, 0);
sumber
Calendar
konstanta misalnya.Calendar.FEBRUARY
.getTime()
. Menyetel info di konstruktor memberikan waktu di awal hari dimana pendekatan terakhir menggunakan waktu saat ini. Lihat dokumennya . Jadi yang pertama mungkin adalah pendekatan yang lebih baik, dengan asumsi apa yang sebenarnya coba dilakukan orang.java.time
Menggunakan
java.time
kerangka kerja bawaan Java 8int year = 2015; int month = 12; int day = 22; LocalDate.of(year, month, day); //2015-12-22 LocalDate.parse("2015-12-22"); //2015-12-22 //with custom formatter DateTimeFormatter.ofPattern formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); LocalDate.parse("22-12-2015", formatter); //2015-12-22
Jika Anda juga membutuhkan informasi tentang waktu (jam, menit, detik) gunakan beberapa konversi dari
LocalDate
menjadiLocalDateTime
LocalDate.parse("2015-12-22").atStartOfDay() //2015-12-22T00:00
sumber
LocalDate
tidak memiliki zona waktu sehingga tidak mewakili momen yang tepat di garis waktu. Jika konteks Anda menunjukkan zona waktu, terapkan untuk mendapatkanZonedDateTime
objek:LocalDate.parse("2015-12-22").atStartOfDay( ZoneId.of( "America/Montreal" ) )
Representasi Kalender Java bukanlah yang terbaik, mereka sedang mengerjakannya untuk Java 8. Saya akan menyarankan Anda untuk menggunakan Joda Time atau pustaka serupa lainnya.
Berikut adalah contoh cepat menggunakan LocalDate dari perpustakaan Joda Time:
LocalDate localDate = new LocalDate(year, month, day); Date date = localDate.toDate();
Di sini Anda dapat mengikuti tutorial mulai cepat.
sumber
Lihat JavaDoc :
Jadi, bulan yang Anda tetapkan adalah bulan pertama tahun depan.
sumber
Jadikan hidup Anda mudah saat bekerja dengan tanggal, stempel waktu, dan durasi. Gunakan HalDateTime from
http://sourceforge.net/projects/haldatetime/?source=directory
Misalnya Anda bisa menggunakannya untuk mengurai input Anda seperti ini:
HalDateTime mydate = HalDateTime.valueOf( "25.12.1988" ); System.out.println( mydate ); // will print in ISO format: 1988-12-25
Anda juga dapat menentukan pola penguraian dan pencetakan.
sumber
HalDateTime
.