2012-01-04 33 views
7

Necesito contar de nuevo 90 días, 120 días y 160 días para algunos artículos. ¿Cómo codificaría esto? Sigo buscando el código de Java, pero eso me trae errores cuando estoy desarrollando para Android.Cómo restar x cantidad de días a partir de la fecha de hoy

Necesito tomar la fecha de hoy y restar la cantidad de días x y hacer que el resultado se muestre en la pantalla nada más. Gracias

+2

¿Puede ser más específico sobre los errores y el código que los produjo? – ObscureRobot

+0

posible duplicado de [¿Cómo restar X días de una fecha utilizando el calendario de Java?] (Http://stackoverflow.com/questions/212321/how-to-subtract-x-days-from-a-date-using-java -calendar) –

Respuesta

18

Usted debe utilizar la clase Calendar:

//Calendar set to the current date 
Calendar calendar=Calendar.getInstance(); 
//rollback 90 days 
calendar.add(Calendar.DAY_OF_YEAR, -90); 
//now the date is 90 days back 
Log.i("MyApp","90 days ago:"+calendar.getTime().toString()); 
+0

roll() se está agregando a los campos, no restando. Pero no es correcto, porque no cambia los campos más grandes. Consulte http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html – nagylzs

+0

tiene razón. gracias. actualizaré mi respuesta –

7

utilizar el objeto Calendario ...

Calendar calendar = Calendar.getInstance(); 
calendar.add(Calendar.DATE, -90); //etc 
0

tl; dr

LocalDate.now(ZoneId.of("America/Montreal")) 
     .minusDays(90) 

java.time

Otras respuestas aquí son anticuados. La forma moderna es con las clases java.time.

LocalDate

La clase LocalDate representa un valor de sólo fecha sin la hora del día y sin zona horaria.

Una zona horaria es crucial para determinar una fecha. Para cualquier momento dado, la fecha varía alrededor del mundo por zona. Por ejemplo, unos minutos después de la medianoche en Paris France es un nuevo día mientras aún está "ayer" en Montréal Québec.

ZoneId z = ZoneId.of("America/Montreal") ; 
LocalDate today = LocalDate.now(z) ; 

Luego puede agregar o restar días.

LocalDate ago090 = today.minusDays(90) ; 
LocalDate ago120 = today.minusDays(120) ; 
LocalDate ago160 = today.minusDays(160) ; 

para generar una cadena en el formato estándar ISO 8601 de AAAA-MM-DD, llame toString. Para otros formatos, busque Desbordamiento de pila para la clase DateTimeFormatter para ver muchos ejemplos y discusiones.

String output = ago120.toString() ; 

Sobre java.time

El marco java.time está incorporado en Java 8 y versiones posteriores. Estas clases suplantan a las viejas y problemáticas clases de fecha y hora legacy, como java.util.Date, Calendar, & SimpleDateFormat. El proyecto Joda-Time, ahora en maintenance mode, recomienda la migración a java.time.

Para obtener más información, consulte el Oracle Tutorial. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310.

¿Dónde obtener las clases java.time?

  • Java SE 8 y SE 9 y más tarde
    • incorporado.
    • Parte de la API estándar de Java con una implementación integrada.
    • Java 9 agrega algunas características menores y correcciones.
  • Java SE 6 y SE 7
    • Gran parte de la funcionalidad de back-java.time está portado a Java 6 & 7 en ThreeTen-Backport.
  • Android
    • El proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente) para Android específicamente.
    • Ver How to use….

El proyecto se extiende ThreeTen-Extra java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval, YearWeek, YearQuarter y more.

Cuestiones relacionadas