2012-08-23 18 views
61

Jak dodać x dni do daty w Javie?Dodawanie dni do daty w Javie

Na przykład, data jest my (dd/mm/rok) = 01/01/2012

dodanie 5 dni, wynik powinien być 06/01/2012.

+3

Istnieje więcej duplikaty dla tego ogólnego pytania 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

Wyszukaj Joda-Time DateTime plusDays for many przykłady. –

+0

Dlaczego nie zatwierdzić nikogo? – bharatpatel

Odpowiedz

12

Jeśli używasz Joda-Time (i istnieje wiele dobrych powodów, aby - prostego, intuicyjnego interfejsu API i wątku bezpieczeństwa), to można to zrobić trywialnie:

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

dać 5 dni od dzisiaj , na przykład.

+0

Jak mogę uzyskać datę przed upływem 10 dni od bieżącej daty przy użyciu joda w formacie rrrr-mm-dd – vishal

+1

Zapoznaj się z właściwością 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); 

Można również odjąć dni jak 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

, dlaczego setTime do nowej daty(), jednak Calendar.getInstance(). GetTime() daje taki sam ? – Jayanth

14

Oto prosty kod, aby dać wyjście jako currentdate + D days = some 'x' date (przyszła 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

Jest to prosty kod dający wynik jako aktualna data + D dni = niektóre "x" data (data na przyszłość) .. – user3136058

26

java.time

Z Java 8 Date and Time API można użyć klasy LocalDate.

LocalDate.now().plusDays(nrOfDays) 

Zobacz Oracle Tutorial.

+2

Prawidłowa odpowiedź. Proponowałbym również przekazanie strefy czasowej (['ZoneId'] (http://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html)) do [' teraz'] (http://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#now-java.time.ZoneId-) metoda zamiast polegać niejawnie na JVM [aktualna domyślna strefa czasowa] (http://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#systemDefault--). To ustawienie domyślne może się zmienić w dowolnym momencie * podczas pracy *! Lepiej określić pożądaną/spodziewaną strefę czasową. –

+0

To nie działa tak, jak napisano. Zmień 'plus (nrOfDays)' na 'plusDays (nrOfDays)' lub bardziej uciążliwy 'plus (nrOfDays, ChronoUnit.DAYS)', co wymagałoby zaimportowania 'java.time.temporal.ChronoUnit' oprócz' java.time ' .LocalDate'. – MarredCheese

+0

Dzięki @MarredCheese, odpowiednio zmodyfikowałem odpowiedź. –

5

Proste, bez jakiegokolwiek innego API:

Aby dodać 8 dni:

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

Ten kod nie uwzględnia faktu, że dni nie zawsze są 24-godzinne. Technicznie dodaje się 192 godziny zamiast 8 dni. Może być poprawny w zależności od tego, co określamy jako "dni". –

+0

"public static Date addRemoveDays (Data d, int dni) { long ltime = d.getTime() + dni * 24 * 60 * 60 * 1000; return new Date (ltime); } ... Data danes = new Date(); //28.4.2016 Data tooOld = MyUtil.addRemoveDays (danes, -80); //18.5.2016 BŁĄD ??? – MatejC

+0

Problem z używaniem takiego kodu polega na tym, że możesz z łatwością przepełnić int, a następnie przejść negatywnie: 90 dni * 24 * 60 * 60 * 1000 = (int) -813934592 To zabierze Cię wstecz. –