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 augmenter cette date d’un jour?

Quelque chose comme ça devrait faire l’affaire:

 Ssortingng 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 

Java semble bien se placer derrière le huit balles par rapport au C #. Cette méthode d’utilitaire montre comment faire en Java SE 6 en utilisant la méthode Calendar.add (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 append un jour, selon la question posée, appelez-le comme suit:

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

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 seule méthode pour cela.

L’API dit:

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

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

java.time

Sur Java 8 et versions ultérieures, le package java.time rend cette opération assez automatique. ( Tutoriel )

En supposant une entrée et une sortie de Ssortingng :

 import java.time.LocalDate; public class DateIncrementer { static public Ssortingng addOneDay(Ssortingng date) { return LocalDate.parse(date).plusDays(1).toSsortingng(); } } 
 SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" ); Calendar cal = Calendar.getInstance(); cal.setTime( dateFormat.parse( inputSsortingng ) ); cal.add( Calendar.DATE, 1 ); 

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

Jetez un coup d’œil à Joda-Time ( http://joda-time.sourceforge.net/ ).

 DateTimeFormatter parser = ISODateTimeFormat.date(); DateTime date = parser.parseDateTime(dateSsortingng); Ssortingng nextDay = parser.print(date.plusDays(1)); 

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!

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

vous pouvez utiliser Simple java.util lib

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

Cela donnera la date de demain. c.add(...) peuvent être modifiés de 1 à un autre pour un incrément approprié.

 long timeadj = 24*60*60*1000; Date newDate = new Date (oldDate.getTime ()+timeadj); 

Cela prend le nombre de millisecondes écoulé depuis l’époque à partir 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 vous permet d’append 1 jour, ou n’importe quel nombre d’heures / minutes, pas seulement des jours entiers.

Si vous utilisez Java 8 , faites-le comme ça.

 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 Ssortingng destDate = destDate.format(formatter)); // End date 

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

 Ssortingng 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 Ssortingng destDate = sdf.format(calendar.getTime()); // End date 

Depuis Java 1.5 TimeUnit.DAYS.toMillis (1) me semble plus propre.

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

Apache Commons a déjà ce 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 que vous pouvez utiliser avec JodaTime pour le rendre plus propre.

Passez simplement la date en chaîne et le nombre de jours suivants

  private Ssortingng getNextDate(Ssortingng givenDate,int noOfDays) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); Ssortingng 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; } 

Si vous souhaitez append 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 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 

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

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

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

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

Vous pouvez LocalDate en une chaîne comme suit.

 Ssortingng str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); 

Utilisez l’API DateFormat pour convertir la chaîne en object Date, puis utilisez l’API du Calendar pour append une journée. Faites-moi savoir si vous voulez des exemples de code spécifiques, et je peux mettre à jour ma réponse.

C’est très simple, essayer d’expliquer en un mot simple. obtenir 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, placez un jour à l’avance avec cette date par la méthode calendar.add qui prend (constante, valeur). La constante peut être DATE, heures, min, sec etc. et la valeur est la valeur de constante. Comme pour une journée, la constante à venir est Calendar.DATE et sa valeur est 1 car nous voulons une valeur à un jour.

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

Merci

Vous pouvez utiliser ce paquet de “org.apache.commons.lang3.time”:

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

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

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

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

 Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY)) 
 Date newDate = new Date(); newDate.setDate(newDate.getDate()+1); System.out.println(newDate);