Saltar al contenido

¿Cómo restar X día de un objeto Date en Java?

Solución:

Java 8 y posterior

Con el cambio de API de fecha y hora de Java 8, use LocalDate

LocalDate date = LocalDate.now().minusDays(300);

Del mismo modo, puedes tener

LocalDate date = someLocalDateInstance.minusDays(300);

Consulte https://stackoverflow.com/a/23885950/260990 para obtener la traducción entre java.util.Date <--> java.time.LocalDateTime

Date in = new Date();
LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault());
Date out = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());

Java 7 y versiones anteriores

Usar Calendar‘s add() método

Calendar cal = Calendar.getInstance();
cal.setTime(dateInstance);
cal.add(Calendar.DATE, -30);
Date dateBefore30Days = cal.getTime();

@JigarJoshi es la buena respuesta y, por supuesto, también la recomendación de @Tim para usar .joda-time.

Solo quiero agregar más posibilidades para restar días de un java.util.Date.

Apache-commons

Una posibilidad es utilizar apache-commons-lang. Puedes hacerlo usando DateUtils como sigue:

Date dateBefore30Days = DateUtils.addDays(new Date(),-30);

Por supuesto, agregue el commons-lang dependencia para hacer solo la resta de fecha, probablemente no sea una buena opción, sin embargo, si ya está usando commons-lang es una buena elección. También existen métodos convenientes para addYears,addMonths,addWeeks y así sucesivamente, eche un vistazo a la API aquí.

Java 8

Otra posibilidad es aprovechar las nuevas LocalDate de Java 8 utilizando minusDays(long days) método:

LocalDate dateBefore30Days = LocalDate.now(ZoneId.of("Europe/Paris")).minusDays(30);

Simplemente use esto para obtener la fecha antes de 300 días, reemplace 300 con sus días:

Date date = new Date(); // Or where ever you get it from
Date daysAgo = new DateTime(date).minusDays(300).toDate();

Aquí,

DateTime es org.joda.time.DateTime;

Date es java.util.Date

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *