Comment incrémenter une date d'un jour de Java?


Je travaille avec une date dans ce format: yyyy-mm-dd.

Comment puis-je incrémenter cette date d'un jour?

Author: Matthias Braun, 2009-01-09

24 answers

Quelque chose comme ça devrait faire l'affaire:

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
 612
Author: Dave, 2009-07-17 15:31:24

Java semble être bien derrière le huit-ball par rapport à C#. Cette méthode utilitaire montre la façon de faire dans Java SE 6 en utilisant le calendrier .ajouter la méthode (probablement le seul moyen facile).

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

Pour ajouter un jour, selon la question posée, appelez-le comme suit:

String sourceDate = "2012-02-29";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = format.parse(sourceDate);
myDate = DateUtil.addDays(myDate, 1);
 176
Author: Lisa, 2012-06-13 17:49:35

Je préfère utiliser DateUtils d'Apache. Vérifiez ceci http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html. C'est pratique surtout lorsque vous devez l'utiliser à plusieurs endroits dans votre projet et que vous ne voudriez pas écrire votre méthode one liner pour cela.

L'API dit:

AddDays(Date date, montant int) : Ajoute un nombre de jours à une date renvoyant un nouvel objet.

Notez qu'il renvoie un nouvel objet Date et ne modifie pas le précédent lui-même.

 60
Author: Risav Karna, 2013-08-10 02:47:12

Java.temps

Sur Java 8 et versions ultérieures, le java.le paquet de temps rend cela à peu près automatique. (Tutoriel)

En supposant String entrée et sortie:

import java.time.LocalDate;

public class DateIncrementer {
  static public String addOneDay(String date) {
    return LocalDate.parse(date).plusDays(1).toString();
  }
}
 58
Author: Daniel C. Sobral, 2015-06-30 17:33:34
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Calendar cal = Calendar.getInstance();
cal.setTime( dateFormat.parse( inputString ) );
cal.add( Calendar.DATE, 1 );
 55
Author: Alex B, 2009-07-17 15:40:49

Construisez un objet Calendar et utilisez la méthode add(Calendar.DATE, 1);

 43
Author: krosenvold, 2009-01-09 17:27:26

Jetez un oeil à Joda-Time (http://joda-time.sourceforge.net/).

DateTimeFormatter parser = ISODateTimeFormat.date();

DateTime date = parser.parseDateTime(dateString);

String nextDay = parser.print(date.plusDays(1));
 39
Author: Willi aus Rohr, 2009-01-09 18:13:05

Veuillez noter que cette ligne ajoute 24 heures:

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

, Mais cette ligne ajoute un jour

cal.add( Calendar.DATE, 1 );

Les jours avec un changement d'heure d'été (25 ou 23 heures), vous obtiendrez des résultats différents!

 37
Author: Florian R., 2010-12-02 14:37:30

Java 8 a ajouté une nouvelle API pour travailler avec les dates et les heures.

Avec Java 8, vous pouvez utiliser les lignes de code suivantes:

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

// add one day
LocalDate januarySecond = januaryFirst.plusDays(1);
 36
Author: micha, 2016-09-11 21:41:20

Vous pouvez utiliser java simple.util lib

Calendar cal = Calendar.getInstance(); 
cal.setTime(yourDate); 
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();
 25
Author: Pawan Pareek, 2015-06-29 11:24:40
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);

Cela donnera la date de demain. c.add(...) les paramètres peuvent être changés de 1 à un autre nombre pour l'incrément approprié.

 22
Author: Akhilesh T., 2017-10-31 17:03:06
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);

Cela prend le nombre de millisecondes depuis epoch from oldDate et ajoute une valeur de 1 jour de millisecondes, puis utilise le constructeur public Date() pour créer une date en utilisant la nouvelle valeur. Cette méthode permet d'ajouter 1 jour, ou n'importe quel nombre d'heures/minutes, pas seulement des jours entiers.

 15
Author: dvaey, 2014-09-15 18:15:33

Si vous utilisez Java 8, alors le faire comme cela.

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

Si vous voulez utiliser SimpleDateFormat, faites-le comme ceci.

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
 15
Author: Avijit Karmakar, 2018-01-14 10:25:55

Depuis Java 1.5 Unité de temps.JOUR.toMillis (1) me semble plus propre.

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));
 11
Author: Jens, 2017-02-24 20:04:52

Apache Commons a déjà ce DateUtils.addDays (Date date, montant int) http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html#addDays%28java.util.Date,%20int%29 que vous utilisez ou vous pouvez aller avec le JodaTime pour le rendre plus propre.

 7
Author: ROCKY, 2013-03-28 18:49:38

Il suffit de passer la date dans la chaîne et le nombre de jours suivants

 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
Author: LMK, 2014-06-16 12:27:55

Si vous souhaitez ajouter une seule unité de temps et que vous vous attendez à ce que d'autres champs soient également incrémentés, vous pouvez utiliser la méthode add en toute sécurité. Voir l'exemple ci-dessous:

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

Imprimera:

1970-12-31
1971-01-01
1970-12-31
 7
Author: terrmith, 2015-02-09 13:58:40

En java 8, vous pouvez utiliser java.time.LocalDate

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

Vous pouvez convertir en objet java.util.Date comme suit.

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

Vous pouvez formater LocalDate dans une chaîne comme suit.

String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
 7
Author: Ramesh-X, 2015-12-01 08:20:22

Utiliser le DateFormat API pour convertir la chaîne en objet Date, puis Calendar API à ajouter un jour. Faites-moi savoir si vous voulez des exemples de code spécifiques, et je peux mettre à jour ma réponse.

 5
Author: Ross, 2009-01-09 17:28:48

C'est très simple, en essayant d'expliquer en un mot simple. obtenez la date du jour comme ci-dessous

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

Définissez maintenant un jour à l'avance avec cette date par calendrier.ajouter une méthode qui prend (constante, valeur). Ici constante pourrait être DATE, heures,min, sec etc. et la valeur est la valeur de constante. Comme pour un jour, la constante ahead est le calendrier.La DATE et sa valeur sont 1 parce que nous voulons une valeur d'avance d'un jour.

System.out.println(calendar.getTime());// print modified date which is la date de demain

Merci

 4
Author: Kushwaha, 2018-07-25 20:42:39

Si vous utilisez Java 8, java.time.LocalDate et java.time.format.DateTimeFormatter peuvent rendre ce travail assez simple.

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
Author: realhu, 2016-02-01 07:50:24

Vous pouvez utiliser ce paquet depuis "org.Apache.commun.lang3.temps":

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 Date myNewDate = DateUtils.addDays(myDate, 4);
 Date yesterday = DateUtils.addDays(myDate, -1);
 String formatedDate = sdf.format(myNewDate);  
 2
Author: Shaheed, 2018-02-27 20:01:11

En Java 8, un moyen simple de le faire est:

Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
 2
Author: dpk, 2018-07-31 06:09:07
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);
 -1
Author: Filip Trajcevski, 2012-08-14 09:44:50