2012-08-23 23 views
61

Come aggiungo x giorni a una data in Java?Aggiunta di giorni a una data in Java

Ad esempio, la data è (gg/mm/aaaa) = 01/01/2012

Aggiunta 5 giorni, l'uscita dovrebbe essere 06/01/2012.

+3

Non ci sono più duplicati per questa domanda di carattere generale 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

Cerca date timeout Joda-Time per molti esempi. –

+0

Perché non approvare nessuno? – bharatpatel

risposta

12

Se stai usando Joda-Time (e ci sono un sacco di buoni motivi per - una semplice, API intuitiva e filo-sicurezza), allora si può fare questo banalmente:

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

che invia 5 giorni a partire da oggi , per esempio.

+0

Come posso ottenere la data prima di 10 giorni dalla data corrente usando joda nel formato aaaa-mm-gg – vishal

+1

Controlla i DateTimeFormatters specifici per Joda –

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); 

Puoi giorni anche Sottrarre come 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

perché impostaTempo su new Date(), tuttavia Calendar.getInstance(). GetTime() restituisce lo stesso ? – Jayanth

14

Ecco qualche semplice codice per dare uscita come currentdate + D days = some 'x' date (futura data):

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

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

È un semplice codice per fornire l'output come data corrente + D giorni = qualche data 'x' (data futura) .. – user3136058

26

java.time

Con Java 8 Date and Time API è possibile utilizzare la classe LocalDate.

LocalDate.now().plusDays(nrOfDays) 

Vedere Oracle Tutorial.

+2

Risposta corretta. Suggerirei anche di passare un fuso orario (['ZoneId'] (http://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html)) al [' now'] (http://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#now-java.time.ZoneId-) metodo piuttosto che fare affidamento implicitamente sul [fuso orario predefinito attuale] della JVM (http://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#systemDefault--). Questo valore predefinito può cambiare in qualsiasi momento * durante il runtime *! Meglio specificare il fuso orario desiderato/previsto. –

+0

Questo non funziona come scritto. Modifica 'plus (nrOfDays)' a 'piùDays (nrOfDays) 'o il più ingombrante' più (nrOfDays, ChronoUnit.DAYS) ', che richiederebbe l'importazione di' java.time.temporal.ChronoUnit' oltre a 'java.time .LocalDate'. – MarredCheese

+0

Grazie a @MarredCheese, ho modificato la risposta di conseguenza. –

5

semplice, senza alcun altro API:

Per aggiungere 8 giorni:

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

Questo codice non tiene conto del fatto che i giorni non sono sempre lunghi 24 ore. Tecnicamente, questo aggiunge 192 ore invece di 8 giorni. Può essere corretto in base a ciò che la situazione definisce come "giorni". –

+0

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

+0

Problema con l'utilizzo di codice come questo è che puoi facilmente overflow int e quindi andare negativo: 90 giorni * 24 * 60 * 60 * 1000 = (int) -813934592 Questo ti porta _backwards_. –

Problemi correlati