2012-08-23 12 views
61

Wie füge ich x Tage zu einem Datum in Java hinzu?Hinzufügen von Tagen zu einem Datum in Java

Zum Beispiel mein Datum ist (dd/mm/yyyy) = 01/01/2012

Zugabe von 5 Tagen sollte der Ausgang 06/01/2012 sein.

+3

Es gibt mehr Duplikate für diese allgemeine Frage sind http://stackoverflow.com/questions/2623610/subtracting-days- in-a-calendar-object http://stackoverflow.com/questions/428918/how-can-i-increment-a-date-by-on-day-in-java – AurA

+0

Suche nach Joda-Time DateTime plusDays für viele Beispiele. –

+0

Warum nicht jemand genehmigen? – bharatpatel

Antwort

12

Wenn Sie mit Joda-Time (und es gibt viele gute Gründe - eine einfache, intuitive API und Thread-Sicherheit), dann können Sie dies tun trivialer:

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

5 Tage geben von heute , beispielsweise.

+0

Wie bekomme ich Datum vor 10 Tagen ab dem aktuellen Datum mit Joda im JJJJ-MM-TT-Format – vishal

+1

Überprüfen Sie die Joda-spezifische 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); 

Sie können auch subtrahieren Tage wie 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

warum setTime zu neuen Date(), jedoch Calendar.getInstance(). GetTime() ergibt das gleiche ? – Jayanth

14

Hier einige einfache Code-Ausgabe als currentdate + D days = some 'x' date (Datum in der Zukunft) zu geben:

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 ist ein einfacher Code, um die Ausgabe als aktuelles Datum + D Tage = einige 'x' Datum (zukünftiges Datum) .. – user3136058

26

java.time

Mit dem Java 8 Date and Time API können Sie die Klasse LocalDate verwenden.

LocalDate.now().plusDays(nrOfDays) 

Siehe die Oracle Tutorial.

+2

Richtige Antwort. Ich würde auch vorschlagen, eine Zeitzone (['ZoneId'] (http://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html)) an die [' now'] http://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#now-java.time.ZoneId-) Methode anstatt sich implizit auf die [aktuelle Standardzeitzone] der JVM zu verlassen (http://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#systemDefault--). Dieser Standard kann sich jederzeit während der Laufzeit * ändern! Besser die gewünschte/erwartete Zeitzone angeben. –

+0

Dies funktioniert nicht wie geschrieben. Ändern Sie 'plus (nrOfDays)' entweder in 'plusDays (nrOfDays)' oder in das umständlichere 'plus (nrOfDays, ChronoUnit.DAYS)', was den Import von 'java.time.temporal.ChronoUnit' zusätzlich zu' java.time erfordern würde .LocalDate'. – MarredCheese

+0

Danke @MarredCheese, ich habe die Antwort entsprechend geändert. –

5

Einfach, ohne andere API:

bis 8 Tage hinzu:

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

Dieser Code berücksichtigt nicht die Tatsache, dass Tage nicht immer 24 Stunden lang sind. Technisch bedeutet dies 192 Stunden statt 8 Tage. Kann korrekt sein, je nachdem, was die Situation als "Tage" definiert. –

+0

'public static Datum addRemoveDays (Datum d, int Tage) { long ltime = d.getTime() + Tage * 24 * 60 * 60 * 1000; Rückgabe neues Datum (ltime); } ... Datum danes = new Date(); //28.4.2016 Datum tooOld = MyUtil.addRemoveDays (danes, -80); //18.5.2016 FEHLER ??? ' – MatejC

+0

Problem mit der Verwendung von Code wie dies ist, dass Sie leicht überlaufen Int und dann gehen kann negativ: 90 Tage * 24 * 60 * 60 * 1000 = (int) -813934592 Dies dauert _backwards_. –

Verwandte Themen