tl; dr
LocalDate.now().minusDays( 10 )
Es mejor especificar la zona horaria.
LocalDate.now( ZoneId.of( "America/Montreal" ) ).minusDays( 10 )
Detalles
Las antiguas clases de fecha y hora incluidas con las primeras versiones de Java, como java.util.Date
/.Calendar
, han demostrado ser problemáticas, confusas y defectuosas. Evítales.
java.time
Java 8 y posterior suplanta esas clases antiguas con el nuevo marco java.time. Ver tutorial . Definido por JSR 310 , inspirado en Joda-Time , y ampliado por el proyecto ThreeTen-Extra . El proyecto ThreeTen-Backport transfiere las clases a Java 6 y 7; el proyecto ThreeTenABP para Android.
La pregunta es vaga, no está clara si solicita una fecha solamente o una fecha y hora.
LocalDate
Para una fecha solamente, sin hora del día, use la LocalDate
clase. Tenga en cuenta que una zona horaria es crucial para determinar una fecha como "hoy".
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );
LocalDate tenDaysAgo = today.minusDays( 10 );
ZonedDateTime
Si se refería a una fecha y hora, use la Instant
clase para obtener un momento en la línea de tiempo en UTC . Desde allí, ajústese a una zona horaria para obtener un ZonedDateTime
objeto.
Instant now = Instant.now(); // UTC.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
ZonedDateTime tenDaysAgo = zdt.minusDays( 10 );

Sobre java.time
El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases suplantar la vieja problemáticos heredados clases de fecha y hora como java.util.Date
, Calendar
, y SimpleDateFormat
.
El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .
Para obtener más información, consulte el Tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .
Puede intercambiar objetos java.time directamente con su base de datos. Utilice un controlador JDBC compatible con JDBC 4.2 o posterior. No hay necesidad de cuerdas, no hay necesidad dejava.sql.*
clases.
¿Dónde obtener las clases java.time?
El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Usted puede encontrar algunas clases útiles aquí, como Interval
, YearWeek
, YearQuarter
, y más .
java.util.Calendar
ahora son heredadas , suplantadas por las clases java.time . Ver Tutorial de Oracle .