it-swarm.com.de

Wie kann ich ein Datum in Java um einen Tag erhöhen?

Ich arbeite mit einem Datum in diesem Format: yyyy-mm-dd.

Wie kann ich dieses Datum um einen Tag erhöhen?

495
user48094

So etwas sollte den Trick tun:

String dt = "2008-01-01";  // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(dt));
c.add(Calendar.DATE, 1);  // number of days to add
dt = sdf.format(c.getTime());  // dt is now the new date
632
Dave

Java scheint sich im Vergleich zu C # deutlich hinter den Achteln zu befinden. Diese Dienstprogrammmethode zeigt den Weg in Java SE 6 mit der Calendar.add-Methode (vermutlich der einzig einfache Weg).

public class DateUtil
{
    public static Date addDays(Date date, int days)
    {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DATE, days); //minus number would decrement the days
        return cal.getTime();
    }
}

Um einen Tag für die gestellte Frage hinzuzufügen, rufen Sie ihn folgendermaßen auf:

String sourceDate = "2012-02-29";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = format.parse(sourceDate);
myDate = DateUtil.addDays(myDate, 1);
185
Lisa

Java.time

Auf Java 8 und höher macht das Paket Java.time dies ziemlich automatisch. ( Tutorial )

Angenommen, String Eingabe und Ausgabe:

import Java.time.LocalDate;

public class DateIncrementer {
  static public String addOneDay(String date) {
    return LocalDate.parse(date).plusDays(1).toString();
  }
}
61

Ich bevorzuge die Verwendung von DateUtils von Apache. Überprüfen Sie diese http://commons.Apache.org/proper/commons-lang/javadocs/api-2.6/org/Apache/commons/lang/time/DateUtils.html . Dies ist vor allem dann praktisch, wenn Sie mehrere Stellen in Ihrem Projekt verwenden müssen und dafür nicht Ihre Einzeilenmethode schreiben möchten. 

Die API sagt: 

addDays (Date Date, Int. Betrag): Fügt einem Datum eine Anzahl von Tagen hinzu, um ein neues Objekt zurückzugeben.

Beachten Sie, dass ein neues Date-Objekt zurückgegeben wird und das vorherige Objekt selbst nicht geändert wird.

61
Risav Karna
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Calendar cal = Calendar.getInstance();
cal.setTime( dateFormat.parse( inputString ) );
cal.add( Calendar.DATE, 1 );
56
Alex B

Erstellen Sie ein Kalenderobjekt und verwenden Sie die Methode add (Calendar.DATE, 1).

44
krosenvold

Werfen Sie einen Blick auf Joda-Time ( https://www.joda.org/joda-time/ ).

DateTimeFormatter parser = ISODateTimeFormat.date();

DateTime date = parser.parseDateTime(dateString);

String nextDay = parser.print(date.plusDays(1));
39
Willi aus Rohr

Bitte beachten Sie, dass diese Zeile 24 Stunden hinzufügt:

d1.getTime() + 1 * 24 * 60 * 60 * 1000

aber diese Zeile fügt einen Tag hinzu

cal.add( Calendar.DATE, 1 );

An Tagen mit Sommerzeitumstellung (25 oder 23 Stunden) erhalten Sie unterschiedliche Ergebnisse!

37
Florian R.

Java 8 fügte eine neue API zum Arbeiten mit Datum und Uhrzeit hinzu.

Mit Java 8 können Sie die folgenden Codezeilen verwenden:

// parse date from yyyy-mm-dd pattern
LocalDate januaryFirst = LocalDate.parse("2014-01-01");

// add one day
LocalDate januarySecond = januaryFirst.plusDays(1);
37
micha

sie können Simple Java.util lib verwenden

Calendar cal = Calendar.getInstance(); 
cal.setTime(yourDate); 
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();
26
Pawan Pareek
Date today = new Date();               
SimpleDateFormat formattedDate = new SimpleDateFormat("yyyyMMdd");            
Calendar c = Calendar.getInstance();        
c.add(Calendar.DATE, 1);  // number of days to add      
String tomorrow = (String)(formattedDate.format(c.getTime()));
System.out.println("Tomorrows date is " + tomorrow);

Dies wird das Datum von morgen geben. c.add(...)-Parameter können für die entsprechende Schrittweite von 1 auf eine andere Zahl geändert werden.

22
Akhilesh T.

Wenn Sie Java 8 verwenden, machen Sie es so.

LocalDate sourceDate = LocalDate.of(2017, Month.MAY, 27);  // Source Date
LocalDate destDate = sourceDate.plusDays(1); // Adding a day to source date.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // Setting date format

String destDate = destDate.format(formatter));  // End date

Wenn Sie SimpleDateFormat verwenden möchten, machen Sie es so.

String sourceDate = "2017-05-27";  // Start date

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse(sourceDate)); // parsed date and setting to calendar

calendar.add(Calendar.DATE, 1);  // number of days to add
String destDate = sdf.format(calendar.getTime());  // End date
16
Avijit Karmakar
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);

Dies nimmt die Anzahl der Millisekunden seit oldDate von Epoch und addiert Millisekunden im Wert von einem Tag. Anschließend wird mit dem öffentlichen Konstruktor Date () ein Datum mit dem neuen Wert erstellt. Mit dieser Methode können Sie 1 Tag oder eine beliebige Anzahl von Stunden/Minuten hinzufügen, nicht nur ganze Tage.

15
dvaey

Seit Java 1.5TimeUnit.DAYS.toMillis (1) sieht ich sauberer aus.

SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Date day = dateFormat.parse(string);
// add the day
Date dayAfter = new Date(day.getTime() + TimeUnit.DAYS.toMillis(1));
12
Jens

Geben Sie einfach das Datum in String und die Anzahl der nächsten Tage ein 

 private String getNextDate(String givenDate,int noOfDays) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal = Calendar.getInstance();
        String nextDaysDate = null;
    try {
        cal.setTime(dateFormat.parse(givenDate));
        cal.add(Calendar.DATE, noOfDays);

       nextDaysDate = dateFormat.format(cal.getTime());

    } catch (ParseException ex) {
        Logger.getLogger(GR_TravelRepublic.class.getName()).log(Level.SEVERE, null, ex);
    }finally{
    dateFormat = null;
    cal = null;
    }

    return nextDaysDate;

}
7
LMK

Wenn Sie eine einzelne Zeiteinheit hinzufügen möchten und erwarten, dass auch andere Felder inkrementiert werden, können Sie die add-Methode problemlos verwenden. Siehe Beispiel unten:

SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.set(1970,Calendar.DECEMBER,31);
System.out.println(simpleDateFormat1.format(cal.getTime()));
cal.add(Calendar.DATE, 1);
System.out.println(simpleDateFormat1.format(cal.getTime()));
cal.add(Calendar.DATE, -1);
System.out.println(simpleDateFormat1.format(cal.getTime()));

Wird drucken:

1970-12-31
1971-01-01
1970-12-31
7
terrmith

Apache Commons hat bereits DateUtils.addDays (Date Date, Int. Betrag) http://commons.Apache.org/proper/commons-lang/apidocs/org/Apache/commons/lang3/time/DateUtils.html#addDays % 28Java.util.Date,% 20int% 29 die Sie verwenden oder Sie könnten mit JodaTime arbeiten, um es sauberer zu machen.

7
ROCKY

In Java 8 können Sie Java.time.LocalDate verwenden.

LocalDate parsedDate = LocalDate.parse("2015-10-30"); //Parse date from String
LocalDate addedDate = parsedDate.plusDays(1);   //Add one to the day field

Sie können das Objekt Java.util.Date wie folgt konvertieren.

Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

Sie können LocalDate wie folgt in einen String umwandeln.

String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
7
Ramesh-X

Es ist sehr einfach, zu versuchen, es in einem einfachen Wort zu erklären 

Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today's date
calendar.add(Calendar.DATE, 1);

Setzen Sie jetzt einen Tag mit diesem Datum nach der calendar.add-Methode, die (Konstante, Wert) übernimmt. Hier könnte Konstante DATUM, Stunden, Min, Sek usw. sein und der Wert ist der Wert von Konstante. Wie für einen Tag ist die Vorauskonstante Calendar.DATE und der Wert 1, da wir einen Tag voraus sein möchten.

System.out.println(calendar.getTime());// print modified date which is Datum von morgen

Vielen Dank

7
Kushwaha

In Java 8 ist der einfache Weg:

Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
6
dpk

Verwenden Sie die DateFormat - API, um den String in ein Date-Objekt zu konvertieren, und fügen Sie dann mit der Calendar - API einen Tag hinzu. Lassen Sie mich wissen, wenn Sie bestimmte Codebeispiele benötigen, und ich kann meine Antwort aktualisieren.

5
Ross

Wenn Sie Java 8 verwenden, können Java.time.LocalDate und Java.time.format.DateTimeFormatter diese Arbeit ganz einfach machen.

public String nextDate(String date){
      LocalDate parsedDate = LocalDate.parse(date);
      LocalDate addedDate = parsedDate.plusDays(1);
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-mm-dd");
      return addedDate.format(formatter); 
}
2
realhu

Wenn Sie Java SE 8 oder höher verwenden, sollten Sie die neue Datum/Uhrzeit-API verwenden

 int days = 7;       
 LocalDate dateRedeemed = LocalDate.now();
 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/YYYY");

 String newDate = dateRedeemed.plusDays(days).format(formatter);   
 System.out.println(newDate);

Wenn Sie eine Konvertierung von Java.util.Date nach Java.time.LocalDate durchführen müssen, können Sie diese Methode verwenden.

  public LocalDate asLocalDate(Date date) {
      Instant instant = date.toInstant();
      ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
      return zdt.toLocalDate();
  }

Wenn Sie eine Version vor Java SE 8 verwenden, empfehle ich Joda-Time

Joda-Time bietet einen hochwertigen Ersatz für die Java Datums- und Zeitklassen und ist die faktische Standardbibliothek für Datums- und Zeitangaben für Java vor Java SE 8

   int days = 7;       
   DateTime dateRedeemed = DateTime.now();
   DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/YYYY");

   String newDate = dateRedeemed.plusDays(days).toString(formatter);   
   System.out.println(newDate);
2
Eduardo Eljaiek

Lassen Sie uns den Anwendungsfall näher erläutern: Sie möchten Kalenderarithmetik durchführen und mit einem Java.util.Date beginnen/enden. 

Einige Ansätze:

  1. Mit SimpleDateFormat in String konvertieren und zurück: Dies ist eine ineffiziente Lösung.
  2. Konvertieren in LocalDate : Sie würden alle Uhrzeitinformationen verlieren.
  3. In LocalDateTime konvertieren: Dies erfordert mehr Schritte und Sie müssen sich um die Zeitzone kümmern.
  4. Konvertieren Sie mit Date.getTime () in eine Epoche: Dies ist effizient, aber Sie rechnen mit Millisekunden.

Erwägen Sie die Verwendung von Java.time.Instant :

Date _now = new Date();
Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
Date _newDate = Date.from(_instant);
1
Chad Juliano

Sie können dieses Paket aus "org.Apache.commons.lang3.time" verwenden:

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 Date myNewDate = DateUtils.addDays(myDate, 4);
 Date yesterday = DateUtils.addDays(myDate, -1);
 String formatedDate = sdf.format(myNewDate);  
1
Shaheed

Es ist eigentlich einfach. Ein Tag enthält 86400000 Millisekunden. Sie erhalten also zuerst die aktuelle Zeit in Millis vom System, indem Sie System.currentTimeMillis() verwenden. Fügen Sie dann die 84000000 Millisekunden hinzu und verwenden Sie die Klasse Date, um ein Datumsformat für die Millisekunden zu generieren.

Beispiel

String Today = new Date(System.currentTimeMillis()).toString();

String Today wird der 09.05.2019 sein

String Tommorow = new Date(System.currentTimeMillis() + 86400000).toString();

String Morgen wird 2019-05-10 sein

String DayAfterTommorow = new Date(System.currentTimeMillis() + (2 * 86400000)).toString();

String DayAfterTommorow wird der 11. Mai 2019 sein

1
Mike T
startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender
0
Popal
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);
0