it-swarm.com.de

Erstellen eines Java Datumsobjekts aus Jahr, Monat, Tag

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

Ich gehe vorbei 25 12 1988 aber ich bekomme 25 Jan 1989. Warum?

78
JAVAGeek

Monate sind im Kalender nullbasiert. 12 wird also als Dezember + 1 Monat interpretiert. Verwenden

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

Das ist mein Lieblingsweg vor Java 8:

Date date = new GregorianCalendar(year, month - 1, day).getTime();

Ich würde sagen, dies ist ein sauberer Ansatz als:

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

Java.time

Mit Java.time Framework eingebaut in 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

Wenn Sie auch Informationen zur Zeit (Stunde, Minute, Sekunde) benötigen, verwenden Sie eine Umrechnung von LocalDate in LocalDateTime.

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

Siehe JavaDoc :

month - der Wert, der zum Einstellen des MONATS-Kalenderfelds verwendet wird. Der Monatswert ist 0-basiert. beispielsweise 0 für Januar.

Der von Ihnen festgelegte Monat ist also der erste Monat des nächsten Jahres.

6
zw324

Javas Kalenderdarstellung ist nicht die beste, sie arbeiten daran für Java 8. Ich rate Ihnen, Joda Time oder eine andere ähnliche Bibliothek zu verwenden.

Hier ist ein kurzes Beispiel für LocalDate aus der Joda Time-Bibliothek:

LocalDate localDate = new LocalDate(year, month, day);
Date date = localDate.toDate();

hier Sie können einem Schnellstart-Tutorial folgen.

6
Fdiazreal