117 votes

Création d'un objet date en java à partir de l'année, du mois et du jour.

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
Wed Jan 25 00:00:08 IST 1989

Je passe 25 12 1988 mais je reçois 25 Jan 1989 . Pourquoi ?

131voto

JB Nizet Points 250258

Les mois sont basés sur zéro dans le calendrier. Ainsi, 12 est interprété comme décembre + 1 mois. Utilisez

c.set(year, month - 1, day, 0, 0);

77voto

Fred Porciúncula Points 4612

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 un peu plus propre que :

calendar.set(year, month - 1, day, 0, 0);

33voto

Przemek Points 5682

Java.time

Utilisation de java.time 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 avez également besoin d'informations sur le temps (heure, minute, seconde), utilisez les conversions suivantes LocalDate a LocalDateTime

LocalDate.parse("2015-12-22").atStartOfDay() //2015-12-22T00:00

11voto

Fdiazreal Points 255

La représentation des calendriers de Java n'est pas la meilleure, ils y travaillent pour Java 8. Je vous conseille 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.

6voto

Ziyao Wei Points 13591

Voir JavaDoc :

month - la valeur utilisée pour définir le champ de calendrier MONTH. La valeur du mois est 0. Par exemple, 0 pour janvier.

Ainsi, le mois que vous avez fixé est le premier mois de l'année prochaine.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X