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());
Выход:
1988,
среда, 25 января, 00:00:08, IST 1989
Я прохожу, 25 12 1988
но получаю 25 Jan 1989
. Зачем?
Ответы:
Месяцы в календаре отсчитываются от нуля. Таким образом, 12 интерпретируется как декабрь + 1 месяц. Использовать
c.set(year, month - 1, day, 0, 0);
источник
Это мой любимый способ до Java 8:
Date date = new GregorianCalendar(year, month - 1, day).getTime();
Я бы сказал, что это более чистый подход, чем:
calendar.set(year, month - 1, day, 0, 0);
источник
Calendar
констант, например.Calendar.FEBRUARY
.getTime()
. Информация о настройке в конструкторе дает время в начале дня, тогда как последний подход использует текущее время. См. Документы . Так что первый, вероятно, лучший подход, если исходить из того, что люди на самом деле пытаются делать.java.time
Использование
java.time
фреймворка, встроенного в Java 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
Если вам нужна также информация о времени (час, минута, секунда), используйте преобразование из
LocalDate
вLocalDateTime
LocalDate.parse("2015-12-22").atStartOfDay() //2015-12-22T00:00
источник
LocalDate
не имеет часового пояса и поэтому не представляет точный момент на временной шкале. Если в вашем контексте указан часовой пояс, примените его, чтобы получитьZonedDateTime
объект:LocalDate.parse("2015-12-22").atStartOfDay( ZoneId.of( "America/Montreal" ) )
Представление календаря в Java не самое лучшее, над ним работают для Java 8. Я бы посоветовал вам использовать Joda Time или другую подобную библиотеку.
Вот быстрый пример использования LocalDate из библиотеки Joda Time:
LocalDate localDate = new LocalDate(year, month, day); Date date = localDate.toDate();
Здесь вы можете воспользоваться кратким руководством по началу работы.
источник
См. JavaDoc :
Итак, установленный вами месяц - это первый месяц следующего года.
источник
Сделайте свою жизнь проще, работая с датами, отметками времени и продолжительностью. Используйте HalDateTime из
http://sourceforge.net/projects/haldatetime/?source=directory
Например, вы можете просто использовать его для анализа ввода следующим образом:
HalDateTime mydate = HalDateTime.valueOf( "25.12.1988" ); System.out.println( mydate ); // will print in ISO format: 1988-12-25
Вы также можете указать шаблоны для анализа и печати.
источник
HalDateTime
.