web-dev-qa-db-fra.com

Création de Java date de l'année, du mois, 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
Mer. 25 janvier 00:00:08 IST 1989

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

78
JAVAGeek

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);  
93
JB Nizet

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);
53
Fred Porciúncula

Java.time

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
23
Przemek

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.

6
zw324

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.

6
Fdiazreal