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());
O resultado é:
1988
Quarta, 25 de janeiro 00:00:08 IST 1989
Estou passando, 25 12 1988
mas entendo 25 Jan 1989
. Por quê?
Respostas:
Os meses são baseados em zero no Calendário. Portanto, 12 é interpretado como dezembro + 1 mês. Usar
fonte
Essa é minha maneira favorita antes do Java 8:
Eu diria que esta é uma abordagem mais limpa do que:
fonte
Calendar
constantes, por exemplo.Calendar.FEBRUARY
.java.time
Usando a
java.time
estrutura integrada em Java 8Se você também precisar de informações sobre o tempo (hora, minuto, segundo), use alguma conversão de
LocalDate
paraLocalDateTime
fonte
LocalDate
não tem fuso horário e, portanto, não representa um momento exato na linha do tempo. Se o seu contexto indicar um fuso horário, aplique-o para obter umZonedDateTime
objeto:LocalDate.parse("2015-12-22").atStartOfDay( ZoneId.of( "America/Montreal" ) )
A representação do calendário do Java não é das melhores, eles estão trabalhando nisso para o Java 8. Aconselho você a usar o Joda Time ou outra biblioteca semelhante.
Aqui está um exemplo rápido usando LocalDate da biblioteca Joda Time:
Aqui você pode seguir um tutorial de início rápido.
fonte
Veja JavaDoc :
Portanto, o mês que você definir é o primeiro mês do próximo ano.
fonte
Facilite sua vida ao trabalhar com datas, carimbos de data / hora e durações. Use HalDateTime de
http://sourceforge.net/projects/haldatetime/?source=directory
Por exemplo, você pode apenas usá-lo para analisar sua entrada assim:
Você também pode especificar padrões para análise e impressão.
fonte
HalDateTime
.