627 votes

Comment 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 ?

11 votes

Si vous utilisez Java 8 ou une version plus récente, vous pouvez utiliser la nouvelle interface utilisateur date/heure. Voir cette réponse : stackoverflow.com/a/23910924/1115554

5 votes

Nouveau DateTime().plusDays(1).toDate() ? ???

732voto

Dave Points 2633

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

2 votes

C.roll(Calendar.DATE, true) ; serait un peu mieux pour plus de clarté.

51 votes

@Esko, c.roll(Calendar.DATE, true) ne déroulera pas le mois le dernier jour du mois.

18 votes

@Ammar c'est une mauvaise idée si vous n'avez rien compris.

235voto

Lisa Points 1261

MISE À JOUR (mai 2021) : Il s'agit d'une réponse vraiment dépassée pour un vieux, vieux Java. Pour Java 8 et plus, voir https://stackoverflow.com/a/20906602/314283

Java semble bien en retard par rapport à C#. Cette méthode utilitaire montre la façon de faire dans Java SE 6 en utilisant la fonction Méthode Calendar.add (vraisemblablement 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);

7 votes

Pour information, les anciennes classes de date et d'heure terriblement gênantes telles que java.util.Date , java.util.Calendar y java.text.SimpleDateFormat sont maintenant héritage supprimé par le java.time intégrées à Java 8 et aux versions ultérieures. Voir Tutoriel par Oracle .

68voto

Risav Karna Points 198

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 voulez pas écrire votre méthode unique pour cela.

L'API dit :

addDays(Date date date, int amount) : Ajoute un nombre de jours à une date en retournant un nouvel objet.

Notez qu'elle renvoie un nouvel objet Date et n'apporte pas de modifications à l'objet précédent lui-même.

65voto

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

44voto

Willi aus Rohr Points 1744

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

3 votes

Vous pouvez supprimer les appels à l'analyseur syntaxique pour construire le DateTime. Utilisez DateTime date = new DateTime(dateString) ; Ensuite, nextDay est ISODateTimeFormat.date().print(date.plusDays(1)) ; Voir joda-time.sourceforge.net/api-release/org/joda/time/ pour plus d'informations.

0 votes

Pour un exemple de code plus détaillé utilisant Joda-Time, voir ma réponse à une question similaire, Comment ajouter un jour à une date ? .

2 votes

FYI Le projet Joda-Time est maintenant en mode maintenance, et conseille de migrer vers le projet java.time classes. Les deux efforts ont été menés par le même homme, Stephen Colebourne. Ils partagent donc des concepts similaires, et la migration n'est pas difficile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X