2012-08-23 27 views
61

¿Cómo agrego x días a una fecha en Java?Agregar días a una fecha en Java

Por ejemplo, mi fecha es (dd/mm/aaaa) = 01/01/2012

la adición de 5 días, la salida debe ser 06/01/2012.

+3

hay más duplicados para esta pregunta general http://stackoverflow.com/questions/2623610/subtracting-days- in-a-calendar-object http://stackoverflow.com/questions/428918/how-can-i-increment-a-date-by-one-day-in-java – AurA

+0

Buscar Joda-Time DateTime plusDays para muchos ejemplos. –

+0

¿Por qué no aprobar uno? – bharatpatel

Respuesta

12

Si está utilizando Joda-Time (y hay un montón de buenas razones para - una API simple, intuitiva e hilo de seguridad) entonces usted puede hacer esto trivialmente:

(new LocalDate()).plusDays(5); 

para dar 5 días a partir de hoy , por ejemplo.

+0

¿Cómo puedo obtener una fecha anterior a 10 días a partir de la fecha actual usando joda en el formato aaa-mm-dd – vishal

+1

? Consulte la fecha específica de Joda DateTimeFormatters –

19
Calendar cal = Calendar.getInstance();  
cal.set(Calendar.DAY_OF_MONTH, 1); 
cal.set(Calendar.MONTH, 1); 
cal.set(Calendar.YEAR, 2012); 
cal.add(Calendar.DAY_OF_MONTH, 5); 

Puede también Restar días como Calendar.add(Calendar.DAY_OF_MONTH, -5);

78
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
Calendar c = Calendar.getInstance(); 
c.setTime(new Date()); // Now use today date. 
c.add(Calendar.DATE, 5); // Adding 5 days 
String output = sdf.format(c.getTime()); 
System.out.println(output); 
+9

por qué setTime a la nueva fecha(), sin embargo Calendar.getInstance(). GetTime() produce el mismo ? – Jayanth

14

Aquí hay un código sencillo para dar salida como currentdate + D days = some 'x' date (fecha futura):

DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 

Calendar c = Calendar.getInstance();  
c.add(Calendar.DATE, 5); 
System.out.println(dateFormat.format(c.getTime())); 
+0

Es un código simple para dar salida como currentdate + D days = alguna 'x' date (fecha futura) .. – user3136058

26

java.time

Con Java 8 Date and Time API puede usar la clase LocalDate.

LocalDate.now().plusDays(nrOfDays) 

Ver el Oracle Tutorial.

+2

Respuesta correcta. También sugeriría pasar una zona horaria (['ZoneId'] (http://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html)) a [' now'] (http://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#now-java.time.ZoneId-) método en lugar de confiar implícitamente en la [zona horaria predeterminada actual] de la JVM (http://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#systemDefault--). ¡Ese valor predeterminado puede cambiar en cualquier momento * durante el tiempo de ejecución *! Es mejor especificar el huso horario deseado/esperado. –

+0

Esto no funciona como está escrito. Cambie 'plus (nrOfDays)' a 'plusDays (nrOfDays)' o el más engorroso 'plus (nrOfDays, ChronoUnit.DAYS)', lo que requeriría importar 'java.time.temporal.ChronoUnit' además de' java.time .LocalDate'. – MarredCheese

+0

Gracias @MarredCheese, modifiqué la respuesta en consecuencia. –

5

simple, sin ninguna otra API:

Para añadir 8 días:

Date today=new Date(); 
long ltime=today.getTime()+8*24*60*60*1000; 
Date today8=new Date(ltime); 
+6

Este código no tiene en cuenta el hecho de que los días no siempre son de 24 horas. Técnicamente, esto agrega 192 horas en lugar de 8 días. Puede ser correcto dependiendo de lo que la situación define como "días". –

+0

'public static Date addRemoveDays (Date d, int days) { long ltime = d.getTime() + días * 24 * 60 * 60 * 1000; return new Date (ltime); } ... Date danes = new Date(); //28.4.2016 Fecha tooOld = MyUtil.addRemoveDays (danes, -80); //18.5.2016 ERROR ??? ' – MatejC

+0

El problema con el uso de este código es que puede desbordar fácilmente int y luego pasar a negativo: 90 días * 24 * 60 * 60 * 1000 = (int) -813934592 Esto lo lleva _backwards_. –

Cuestiones relacionadas