jdatepicker hora fecha java datetime datepicker

java - hora - Obtener 18 años antes de la fecha del calendario



time picker java netbeans (2)

En Java, un valor de fecha es solo el número de milisegundos desde un punto fijo en el tiempo, las clases relacionadas no tienen un formato propio que usted pueda cambiar, esto es lo que los formateadores de fecha / hora son para

Calendario

Según su ejemplo, básicamente está ignorando el hecho de que el cambio de cualquiera de los campos del Calendar afectará a todos los demás, por ejemplo ...

Calendar cal = Calendar.getInstance(); cal.set(2015, Calendar.JUNE, 01); // Comment this out for today... cal.add(Calendar.YEAR, -18); cal.add(Calendar.DATE, -1); Date date = cal.getTime(); System.out.println(new SimpleDateFormat("dd/MM/yyyy").format(date));

Que salidas

31/05/1997

Sin embargo, recomendaría usar la nueva API Time API o Joda-Time de Java 8

API de Java 8 Time

LocalDate ld = LocalDate.now(); ld = ld.minusYears(18).minusDays(1); System.out.println(DateTimeFormatter.ofPattern("dd/MM/yyyy").format(ld));

Que salidas

26/06/1997

Caso extremo...

LocalDate ld = LocalDate.of(2015, Month.JUNE, 1); ld = ld.minusYears(18).minusDays(1); System.out.println(DateTimeFormatter.ofPattern("dd/MM/yyyy").format(ld));

Que salidas

31/05/1997

JodaTime

LocalDate ld = new LocalDate(); ld = ld.minusYears(18).minusDays(1); System.out.println(DateTimeFormat.forPattern("dd/MM/yyyy").print(ld));

Que salidas

26/06/1997

Caso extremo...

LocalDate ld = new LocalDate(2015, DateTimeConstants.JUNE, 1); ld = ld.minusYears(18).minusDays(1); System.out.println(DateTimeFormat.forPattern("dd/MM/yyyy").print(ld));

Que salidas

31/05/1997

Necesito obtener la fecha completa (dd / mm / aaaa) que es 18 años a partir de ahora. utilicé el código como Calendar calc = Calendar.getInstance (); calc.add (Calendar.YEAR, -18); que recupera 18 años antes del año, no el mes o la fecha. Necesito un día 18 años antes de la fecha actual, incluso en casos de esquina como el 1 de cualquier mes también. Ejemplo 1-06-2015 es la fecha actual debería ser 31-05-1997. Para ser notado necesito código en java6


Recomendaría usar Joda Time , ya que hará que la manipulación de fechas y las matemáticas sean muy fáciles. Por ejemplo:

DateTime futureDate = new DateTime(); futureDate.minusYears(18).minusDays(1); futureDate.toDate(); // return a regular Date object