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?
Réponses:
Les mois sont basés sur zéro dans Calendar. Donc 12 est interprété comme décembre + 1 mois. Utilisation
la source
C'est ma méthode préférée avant Java 8:
Je dirais que c'est une approche plus propre que:
la source
Calendar
constantes, par exemple.Calendar.FEBRUARY
.java.time
Utilisation du
java.time
framework intégré à Java 8Si vous avez également besoin d'informations sur l'heure (heure, minute, seconde), utilisez une conversion de
LocalDate
àLocalDateTime
la source
LocalDate
n'a pas de fuseau horaire et ne représente donc pas un moment exact sur la chronologie. Si votre contexte indique un fuseau horaire, appliquez-le pour obtenir unZonedDateTime
objet:LocalDate.parse("2015-12-22").atStartOfDay( ZoneId.of( "America/Montreal" ) )
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:
Ici, vous pouvez suivre un tutoriel de démarrage rapide.
la source
Voir JavaDoc :
Ainsi, le mois que vous définissez est le premier mois de l'année prochaine.
la source
Simplifiez-vous la vie lorsque vous travaillez avec des dates, des horodatages et des durées. Utiliser HalDateTime à partir de
http://sourceforge.net/projects/haldatetime/?source=directory
Par exemple, vous pouvez simplement l'utiliser pour analyser votre entrée comme ceci:
Vous pouvez également spécifier des modèles pour l'analyse et l'impression.
la source
HalDateTime
.