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());
La sortie est:
1988
Mer. 25 janvier 00:00:08 IST 1989
Je passe 25 12 1988
mais je reçois 25 Jan 1989
. Pourquoi?
Les mois sont basés sur zéro dans le calendrier. Donc, 12 est interprété comme décembre + 1 mois. Utilisation
c.set(year, month - 1, day, 0, 0);
C’est ma méthode préférée avant Java 8:
Date date = new GregorianCalendar(year, month - 1, day).getTime();
Je dirais que c'est une approche plus propre que:
calendar.set(year, month - 1, day, 0, 0);
En utilisant Java.time
framework intégré à Java 8
int 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
Si vous souhaitez également des informations sur l'heure (heure, minute, seconde), utilisez des conversions de LocalDate
à LocalDateTime
.
LocalDate.parse("2015-12-22").atStartOfDay() //2015-12-22T00:00
Voir JavaDoc :
month - la valeur utilisée pour définir le champ du calendrier MONTH. La valeur du mois est basée sur 0. par exemple, 0 pour janvier.
Donc, le mois que vous définissez est le premier mois de l’année prochaine.
La représentation du calendrier de Java n’est pas la meilleure, ils y travaillent pour Java 8.). Je vous conseillerais d’utiliser Joda Time ou une autre bibliothèque similaire.
Voici un exemple rapide utilisant LocalDate de la bibliothèque Joda Time:
LocalDate localDate = new LocalDate(year, month, day);
Date date = localDate.toDate();
Ici vous pouvez suivre un tutoriel de démarrage rapide.