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