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());
La salida es:
1988
Miércoles 25 de enero 00:00:08 IST 1989
Estoy pasando 25 12 1988
pero lo consigo 25 Jan 1989
. ¿Por qué?
Respuestas:
Los meses se basan en cero en Calendario. Entonces 12 se interpreta como diciembre + 1 mes. Utilizar
fuente
Esa es mi forma favorita antes de Java 8:
Yo diría que este es un enfoque más limpio que:
fuente
Calendar
constantes, por ejemplo.Calendar.FEBRUARY
.java.time
Usando el
java.time
marco integrado en Java 8Si también necesita información sobre el tiempo (hora, minuto, segundo) utilice alguna conversión de
LocalDate
aLocalDateTime
fuente
LocalDate
no tiene zona horaria y, por lo tanto, no representa un momento exacto en la línea de tiempo. Si su contexto indica una zona horaria, aplíquelo para obtener unZonedDateTime
objeto:LocalDate.parse("2015-12-22").atStartOfDay( ZoneId.of( "America/Montreal" ) )
La representación del Calendario de Java no es la mejor, están trabajando en ella para Java 8. Le aconsejaría que use Joda Time u otra biblioteca similar.
Aquí hay un ejemplo rápido usando LocalDate de la biblioteca Joda Time:
Aquí puede seguir un tutorial de inicio rápido.
fuente
Ver JavaDoc :
Entonces, el mes que establezca es el primer mes del próximo año.
fuente
Facilite su vida al trabajar con fechas, marcas de tiempo y duraciones. Utilice HalDateTime desde
http://sourceforge.net/projects/haldatetime/?source=directory
Por ejemplo, puede usarlo para analizar su entrada de esta manera:
También puede especificar patrones para analizar e imprimir.
fuente
HalDateTime
.