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

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

comment incrémenter cette date d'un jour?

473
demandé sur Matthias Braun 2009-01-09 20:20:09

24 réponses

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
répondu Dave 2009-07-17 15:31:24

Java semble être bien derrière le huit-ball comparé à C#. Cette méthode d'utilité montre la façon de faire en 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
répondu Lisa 2012-06-13 17:49:35

je préfère utiliser DateUtils D'Apache. Vérifier cette http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html . C'est pratique surtout quand 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, int amount): ajoute un nombre de jours à une date de retour d'un nouvel objet.

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

60
répondu Risav Karna 2013-08-10 02:47:12

de java.temps

sur Java 8 et plus tard, le java.le paquet de temps rend cela plus ou moins automatique. ( Tutoriel )

en supposant String entrées et sorties:

import java.time.LocalDate;

public class DateIncrementer {
  static public String addOneDay(String date) {
    return LocalDate.parse(date).plusDays(1).toString();
  }
}
58
répondu 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
répondu Alex B 2009-07-17 15:40:49

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

43
répondu krosenvold 2009-01-09 17:27:26

regardez Joda-Time ( http://joda-time.sourceforge.net / ).

DateTimeFormatter parser = ISODateTimeFormat.date();

DateTime date = parser.parseDateTime(dateString);

String nextDay = parser.print(date.plusDays(1));
39
répondu 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 (25 ou 23 heures) vous obtiendrez des résultats différents!

37
répondu 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
répondu micha 2016-09-11 21:41:20

vous pouvez utiliser du java Simple.util lib

Calendar cal = Calendar.getInstance(); 
cal.setTime(yourDate); 
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();
25
répondu 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);

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

22
répondu 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 l'époque de oldDate et ajoute 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
répondu dvaey 2014-09-15 18:15:33

si vous utilisez Java 8 , faites comme ceci.

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 , alors 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
répondu Avijit Karmakar 2018-01-14 10:25:55

Since Java 1.5 TimeUnit.JOUR.toMillis (1) semble plus propre pour moi.

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
répondu Jens 2017-02-24 20:04:52

Apache Commons possède déjà ces DateUtils.addDays (Date date, int amount) 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 pourriez aller avec le JodaTime pour le rendre plus propre.

7
répondu ROCKY 2013-03-28 18:49:38

il suffit de passer la date en Chaîne de caractères et le nombre de jours prochains

 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
répondu LMK 2014-06-16 12:27:55

si vous voulez ajouter une seule unité de temps et que vous vous attendez à ce que d'autres champs soient incrémentés, vous pouvez utiliser en toute sécurité la méthode add. 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()));

Affichera:

1970-12-31
1971-01-01
1970-12-31
7
répondu 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 java.util.Date objet comme suit.

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

vous pouvez former LocalDate dans une chaîne de caractères comme suit.

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

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

5
répondu Ross 2009-01-09 17:28:48

c'est très simple, essayer d'expliquer en un mot simple. obtenez la date d'aujourd'hui comme ci-dessous

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

maintenant un jour d'avance avec cette date par calendrier.ajouter la 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, devant constante est le Calendrier.La DATE et sa valeur sont 1 parce que nous voulons un jour à l'avance la valeur.

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

Merci

4
répondu Kushwaha 2018-07-25 20:42:39

si vous utilisez Java 8, java.time.LocalDate et java.time.format.DateTimeFormatter peuvent rendre ce travail très 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
répondu realhu 2016-02-01 07:50:24

vous pouvez utiliser ce paquet de" org.Apache.commun.lang3.heure":

 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
répondu Shaheed 2018-02-27 20:01:11

Dans Java 8 moyen simple de le faire est:

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