web-dev-qa-db-fra.com

Comment puis-je incrémenter une date d'un jour en Java?

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

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

495
user48094

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
632
Dave

Java semble être bien en retard sur le huitième ballon par rapport à C #. Cette méthode utilitaire indique comment procéder dans Java SE 6 à l’aide de la méthode Calendar.add (sans doute 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, par 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);
185
Lisa

Java.time

Sur Java 8 et les versions ultérieures, le package Java.time rend cela assez automatique. ( Didacticiel )

En supposant que 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();
  }
}
61
Daniel C. Sobral

Je préfère utiliser DateUtils de Apache. Vérifiez cette 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 utiliser plusieurs endroits dans votre projet et que vous ne voulez pas écrire votre méthode one-liner pour cela. 

L'API dit: 

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

Notez qu'il renvoie un nouvel objet Date et n'apporte aucune modification au précédent.

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

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

44
krosenvold

Jetez un coup d'œil à 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

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 où l'heure d'été est modifiée (25 ou 23 heures), vous obtiendrez des résultats différents!

37
Florian R.

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);
37
micha

vous pouvez utiliser Simple Java.util lib

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

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

22
Akhilesh T.

Si vous utilisez Java 8 , procédez comme suit.

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 souhaitez utiliser SimpleDateFormat , procédez comme suit.

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

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

15
dvaey

Depuis Java 1.5TimeUnit.DAYS.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));
12
Jens

Il suffit de passer la date dans String 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
LMK

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

Va imprimer:

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

Apache Commons a déjà ce DateUtils.addDays (Date date, int montant) 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 utiliser JodaTime pour le rendre plus propre.

7
ROCKY

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
Ramesh-X

C'est très simple, essayer d'expliquer dans un simple mot . Obtenir 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 d’avance avec cette date par la méthode calendar.add qui prend (constante, valeur). Ici, constante pourrait être DATE, heure, minute, seconde, etc. et valeur est la valeur de constante. Comme pour un jour, la constante d'avance est Calendar.DATE et sa valeur est 1 car nous voulons une valeur d'avance.

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

Merci

7
Kushwaha

En Java 8, le moyen le plus simple est de:

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

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

5
Ross

Si vous utilisez Java 8, Java.time.LocalDate et Java.time.format.DateTimeFormatter peuvent vous faciliter la tâche.

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

Si vous utilisez Java SE 8 ou une version supérieure, vous devez utiliser le nouveau API Date/Heure

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

Si vous devez convertir Java.util.Date en Java.time.LocalDate, vous pouvez utiliser cette méthode.

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

Si vous utilisez une version antérieure à Java SE 8, je vous conseille d'utiliser Joda-Time

Joda-Time fournit un remplacement de qualité pour les classes de date et d'heure Java et constitue la bibliothèque de date et d'heure standard de facto pour Java antérieure à 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

Clarifions le cas d'utilisation: vous voulez faire de l'arithmétique de calendrier et commencer/finir avec un Java.util.Date

Quelques approches:

  1. Convertir en chaîne et revenir avec SimpleDateFormat : Ceci est une solution inefficace.
  2. Convertir en LocalDate : Vous perdriez toute information sur l'heure.
  3. Convertir en LocalDateTime : Cela implique plusieurs étapes et vous devez vous soucier du fuseau horaire.
  4. Convertir en époque avec Date.getTime () : C'est efficace, mais vous calculez en millisecondes.

Pensez à utiliser Java.time.Instant :

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

Vous pouvez utiliser ce paquet depuis "org.Apache.commons.lang3.time":

 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

C'est simple en fait. Un jour contient 86400000 millisecondes. Donc, vous obtenez d'abord l'heure actuelle en millis à partir du système en utilisant System.currentTimeMillis(), puis vous ajoutez les 84000000 milliSecondes et utilisez la classe Date pour générer un format de date pour les millisecondes.

Exemple

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

String Today sera le 2019-05-9

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

String Tommorow sera le 2019-05-10

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

String DayAfterTommorow sera le 2019-05-11

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
Filip Trajcevski