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());
Wynik to:
1988
Śr 25 stycznia 00:00:08 IST 1989
Mijam, 25 12 1988
ale dostaję 25 Jan 1989
. Czemu?
Odpowiedzi:
Miesiące w Kalendarzu są liczone od zera. Zatem 12 jest interpretowane jako grudzień + 1 miesiąc. Posługiwać się
c.set(year, month - 1, day, 0, 0);
źródło
To mój ulubiony sposób przed Java 8:
Date date = new GregorianCalendar(year, month - 1, day).getTime();
Powiedziałbym, że jest to czystsze podejście niż:
calendar.set(year, month - 1, day, 0, 0);
źródło
Calendar
stałych np.Calendar.FEBRUARY
.getTime()
. Ustawienie informacji w konstruktorze daje czas na początku dnia, podczas gdy to drugie podejście wykorzystuje aktualny czas. Zobacz dokumentację . Więc pierwsze jest prawdopodobnie lepszym podejściem, zakładając, co ludzie faktycznie próbują zrobić.java.time
Korzystanie z
java.time
frameworka wbudowanego w Javę 8int 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
Jeśli potrzebujesz również informacji o czasie (godzina, minuta, sekunda) użyj konwersji z
LocalDate
naLocalDateTime
LocalDate.parse("2015-12-22").atStartOfDay() //2015-12-22T00:00
źródło
LocalDate
nie ma strefy czasowej, więc nie reprezentuje dokładnego momentu na osi czasu. Jeśli kontekst wskazuje strefę czasową, zastosuj ją, aby uzyskaćZonedDateTime
obiekt:LocalDate.parse("2015-12-22").atStartOfDay( ZoneId.of( "America/Montreal" ) )
Reprezentacja kalendarza w Javie nie jest najlepsza, pracują nad tym dla Javy 8. Radziłbym skorzystać z Joda Time lub innej podobnej biblioteki.
Oto krótki przykład użycia LocalDate z biblioteki Joda Time:
LocalDate localDate = new LocalDate(year, month, day); Date date = localDate.toDate();
Tutaj możesz skorzystać z samouczka szybkiego startu.
źródło
Zobacz JavaDoc :
Tak więc ustawiony miesiąc jest pierwszym miesiącem następnego roku.
źródło
Ułatw sobie życie, pracując z datami, znacznikami czasu i czasem trwania. Użyj HalDateTime z
http://sourceforge.net/projects/haldatetime/?source=directory
Na przykład możesz po prostu użyć go do przeanalizowania danych wejściowych w następujący sposób:
HalDateTime mydate = HalDateTime.valueOf( "25.12.1988" ); System.out.println( mydate ); // will print in ISO format: 1988-12-25
Możesz także określić wzorce analizowania i drukowania.
źródło
HalDateTime
.