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());
Ausgabe ist:
1988
Mi Jan 25 00:00:08 IST 1989
Ich gehe vorbei, 25 12 1988
aber ich bekomme 25 Jan 1989
. Warum?
Antworten:
Monate basieren im Kalender auf Null. 12 wird also als Dezember + 1 Monat interpretiert. Verwenden
quelle
Das ist mein Lieblingsweg vor Java 8:
Ich würde sagen, dies ist ein sauberer Ansatz als:
quelle
Calendar
Konstanten angegeben werden, z.Calendar.FEBRUARY
.java.time
Verwenden eines
java.time
in Java 8 integrierten FrameworksWenn Sie auch Informationen zur Zeit (Stunde, Minute, Sekunde) benötigen, verwenden Sie eine Konvertierung von
LocalDate
nachLocalDateTime
quelle
LocalDate
hat keine Zeitzone und repräsentiert daher keinen genauen Moment auf der Zeitachse. Wenn Ihr Kontext eine Zeitzone angibt, wenden Sie diese an, um einZonedDateTime
Objekt zu erhalten:LocalDate.parse("2015-12-22").atStartOfDay( ZoneId.of( "America/Montreal" ) )
Javas Kalenderdarstellung ist nicht die beste, sie arbeiten daran für Java 8. Ich würde Ihnen raten, Joda Time oder eine andere ähnliche Bibliothek zu verwenden.
Hier ist ein kurzes Beispiel mit LocalDate aus der Joda Time-Bibliothek:
Hier können Sie einem Schnellstart-Tutorial folgen.
quelle
Siehe JavaDoc :
Der von Ihnen festgelegte Monat ist also der erste Monat des nächsten Jahres.
quelle
Machen Sie sich das Leben leichter, wenn Sie mit Daten, Zeitstempeln und Dauern arbeiten. Verwenden Sie HalDateTime von
http://sourceforge.net/projects/haldatetime/?source=directory
Zum Beispiel können Sie es einfach verwenden, um Ihre Eingabe wie folgt zu analysieren:
Sie können auch Muster zum Parsen und Drucken angeben.
quelle
HalDateTime
.