web-dev-qa-db-fra.com

Comment ajouter un jour à une date?

Je veux ajouter un jour à une date particulière. Comment puis je faire ça?

Date dt = new Date();

Maintenant, je veux ajouter un jour à cette date.

197
user93796

Avec un Date dt vous avez plusieurs possibilités:

Solution 1: Vous pouvez utiliser la classe Calendar pour cela:

Date dt = new Date();
Calendar c = Calendar.getInstance(); 
c.setTime(dt); 
c.add(Calendar.DATE, 1);
dt = c.getTime();

Solution 2: Vous devriez sérieusement envisager d’utiliser le bibliothèque Joda-Time, en raison des diverses lacunes de la classe Date. Avec Joda-Time, vous pouvez effectuer les tâches suivantes:

Date dt = new Date();
DateTime dtOrg = new DateTime(dt);
DateTime dtPlusOne = dtOrg.plusDays(1);

Solution 3: Avec Java 8 , vous pouvez également utiliser le nouveau JSR 310 API (inspirée de Joda-Time):

Date dt = new Date();
LocalDateTime.from(dt.toInstant()).plusDays(1);
453
Daniel Rikowski
Date today = new Date();
Date tomorrow = new Date(today.getTime() + (1000 * 60 * 60 * 24));

Date a un constructeur utilisant les millisecondes depuis UNIX-Epoch. La méthode getTime () vous donne cette valeur. Donc, l'ajout des millisecondes pour une journée fait l'affaire. Si vous voulez faire de telles manipulations régulièrement, je vous recommande de définir des constantes pour les valeurs.

Conseil important: Ce n'est pas correct dans tous les cas. Lisez le commentaire AVERTISSEMENT ci-dessous.

64
Mnementh

Comme mentionné dans la réponse en haut, puisque Java 8 il est possible de faire:

Date dt = new Date();
LocalDateTime.from(dt.toInstant()).plusDays(1);

mais cela peut parfois conduire à un DateTimeException comme ceci:

Java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: 2014-11-29T03:20:10.800Z of type Java.time.Instant

Il est possible d'éviter cette exception en passant simplement le fuseau horaire:

LocalDateTime.from(dt.toInstant().atZone(ZoneId.of("UTC"))).plusDays(1);
14
behzad

tl; dr

_LocalDate.of( 2017 , Month.JANUARY , 23 ) 
         .plusDays( 1 )
_

Java.time

Il est préférable d'éviter la classe Java.util.Date . Mais si vous devez le faire, vous pouvez effectuer la conversion entre les anciennes classes de date/heure problématiques et les classes modernes Java.time. Rechercher de nouvelles méthodes ajoutées aux anciennes classes.

Instant

La classe Instant est sur le point d’être équivalente à Date, les deux représentant un moment sur la timeline. Instant est résolu en nanosecondes, alors que Date est en millisecondes.

_Instant instant = myUtilDate.toInstant() ;
_

Vous pouvez ajouter un jour à cela, mais gardez cela à l'esprit en UTC. Ainsi, vous ne comptabiliserez pas d'anomalies telles que l'heure d'été. Spécifiez l'unité de temps avec la classe ChronoUnit .

_Instant nextDay = instant.plus( 1 , ChronoUnit.DAYS ) ;
_

ZonedDateTime

Si vous voulez bien connaître les fuseaux horaires, spécifiez ZoneId pour obtenir un ZonedDateTime. Spécifiez un nom de fuseau horaire approprié au format _continent/region_, tel que America/Montreal , Africa/Casablanca , ou _Pacific/Auckland_. N'utilisez jamais les abréviations de 3-4 lettres telles que EST ou IST car elles sont pas vrais fuseaux horaires, non standardisés et même pas uniques (!).

_ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
ZonedDateTime zdtNextDay = zdt.plusDays( 1 ) ;
_

Vous pouvez également représenter votre période de temps à ajouter, le jour même, sous la forme Period.

_Period p = Period.ofDays( 1 ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ).plus( p ) ;
_

Vous voudrez peut-être le premier moment de ce lendemain. Ne supposez pas que la journée commence à 00:00:00. Des anomalies telles que l'heure d'été (DST) signifient que la journée peut commencer à une autre heure, telle que 01:00:00. Laisser Java.time déterminer le premier moment de la journée à cette date dans cette zone.

_LocalDate today = LocalDate.now( z ) ;
LocalDate tomorrow = today.plus( p ) ;
ZonedDateTime zdt = tomorrow.atStartOfDay( z ) ;
_

À propos de Java.time

Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes gênantes legacy date-heure telles que Java.util.Date , Calendar , & SimpleDateFormat =.

Le projet Joda-Time , actuellement en mode maintenance , recommande la migration vers les classes Java.time .

Pour en savoir plus, consultez le Oracle Tutorial . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 31 .

Vous pouvez échanger Java.time objets directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou une version ultérieure. Pas besoin de chaînes, pas besoin de _Java.sql.*_ classes.

Où obtenir les classes Java.time?

Le projet ThreeTen-Extra étend Java.time avec des classes supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts à Java.time. Vous pouvez trouver ici quelques classes utiles telles que Interval , YearWeek , YearQuarter , et plus .


Mise à jour:La bibliothèque Joda-Time est maintenant en mode maintenance. L'équipe conseille la migration vers les classes Java.time. Je laisse cette section intacte pour l'histoire.

Joda-Time

La bibliothèque Joda-Time 2.3 facilite beaucoup ce type de travail. La classe Java.util.Date fournie avec Java est notoirement gênante et doit être évitée.

Voici un exemple de code.

Votre Java.util.Date est converti en un objet Joda-Time DateTime . Contrairement à j.u.Date, un DateTime connaît vraiment son fuseau horaire attribué. Le fuseau horaire est crucial car ajouter un jour pour obtenir le même heure de l'horloge demain peut vouloir dire faire des ajustements comme pour une journée de 23 ou 25 heures dans le cas de Heure d'été Heure (heure d'été) ici aux États-Unis. Si vous spécifiez le fuseau horaire , Joda-Time peut effectuer ce type d’ajustement. Après avoir ajouté un jour, nous reconvertissons l'objet DateTime en un objet Java.util.Date.

_Java.util.Date yourDate = new Java.util.Date();

// Generally better to specify your time zone rather than rely on default.
org.joda.time.DateTimeZone timeZone = org.joda.time.DateTimeZone.forID( "America/Los_Angeles" );
DateTime now = new DateTime( yourDate, timeZone );
DateTime tomorrow = now.plusDays( 1 );
Java.util.Date tomorrowAsJUDate = tomorrow.toDate();
_

Décharger pour consoler…

_System.out.println( "yourDate: " + yourDate );
System.out.println( "now: " + now );
System.out.println( "tomorrow: " + tomorrow );
System.out.println( "tomorrowAsJUDate: " + tomorrowAsJUDate );
_

Quand couru…

_yourDate: Thu Apr 10 22:57:21 PDT 2014
now: 2014-04-10T22:57:21.535-07:00
tomorrow: 2014-04-11T22:57:21.535-07:00
tomorrowAsJUDate: Fri Apr 11 22:57:21 PDT 2014
_
12
Basil Bourque

J'ai trouvé une méthode simple pour ajouter du temps arbitraire à un objet Date

Date d = new Date(new Date().getTime() + 86400000)

Où:

86 400 000ms = 1 Day  : 24*60*60*1000
 3 600 000ms = 1 Hour :    60*60*1000
11
plailopo

Cela augmentera n'importe quelle date de exactement un

String untildate="2011-10-08";//can take any date in current format    
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );   
Calendar cal = Calendar.getInstance();    
cal.setTime( dateFormat.parse(untildate));    
cal.add( Calendar.DATE, 1 );    
String convertedDate=dateFormat.format(cal.getTime());    
System.out.println("Date increase by one.."+convertedDate);
10
navneet

vous pouvez utiliser cette méthode après import org.Apache.commons.lang.time.DateUtils:

DateUtils.addDays(new Date(), 1));
9
user3204989

Java 8 LocalDate API

LocalDate.now().plusDays(1L);

4
traeper

Je préfère joda pour l'arithmétique de date et d'heure car elle est beaucoup mieux lisible:

Date tomorrow = now().plusDays(1).toDate();

Ou

endOfDay(now().plus(days(1))).toDate()
startOfDay(now().plus(days(1))).toDate()
4
remipod

utilisez l'objet DateTime obj.Add pour ajouter ce que vous voulez, jour, heure, etc. Espérons que cela fonctionne :)

4
Vinay Pandey

Pour rendre cela un peu moins spécifiqueJava, le principe de base serait de convertir en un format de date linéaire, en jours juliens, en jours juliens modifiés, en secondes depuis certaines époques, etc., ajoutez votre jour et en reconvertissant.

La raison en est que vous résolvez le problème du type "obtenez le jour bissextile, la seconde relevée, etc." à quelqu'un qui a, avec un peu de chance, pas réussi à résoudre ce problème.

Je vous avertirai qu'il peut être difficile de mettre en place ces routines de conversion. Il existe un nombre incroyable de façons différentes de perdre du temps, le dernier exemple le plus en vue étant celui de MS, le Zune de MS. Ne vous moquez pas trop de la SP, cependant, il est facile de tout gâcher. Cela n'aide pas qu'il y ait plusieurs formats de temps différents, par exemple, TAI vs TT.

3
Bruce ONeel

meilleure chose à utiliser:

      long currenTime = System.currentTimeMillis();
      long oneHourLater = currentTime + TimeUnit.HOURS.toMillis(1l);

De même, vous pouvez ajouter des mois, des jours, des minutes, etc.

3
gaurav414u

Dans des cas très spéciaux Si vous avez demandé à faire votre propre cours de date, éventuellement de votre professeur de programmation informatique; Cette méthode ferait un très bon travail.

public void addOneDay(){
    int [] months = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    day++;
    if (day> months[month-1]){
        month++;
        day = 1;
        if (month > 12){
            year++;
            month = 1;
        }
    }
}
3
Burak

API Java 8 Time:

Instant now = Instant.now(); //current date
Instant after= now.plus(Duration.ofDays(300));
Date dateAfter = Date.from(after);
3
GKislin

La version Java 1.8 contient une mise à jour Nice pour l'API de temps de données.

Voici un extrait de code:

    LocalDate lastAprilDay = LocalDate.of(2014, Month.APRIL, 30);
    System.out.println("last april day: " + lastAprilDay);
    LocalDate firstMay = lastAprilDay.plusDays(1);
    System.out.println("should be first may day: " + firstMay);
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd");
    String formatDate = formatter.format(firstMay);
    System.out.println("formatted date: " + formatDate);

Sortie:

last april day: 2014-04-30
should be first may day: 2014-05-01
formatted date: 01

Pour plus d'informations, voir les documentations Java de cette classe:

2
nazar_art

Je vais vous montrer comment nous pouvons le faire dans Java 8. Voici:

public class DemoDate {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        System.out.println("Current date: " + today);

        //add 1 day to the current date
        LocalDate date1Day = today.plus(1, ChronoUnit.DAYS);
        System.out.println("Date After 1 day : " + date1Day);
    }
}

Le résultat:

Current date: 2016-08-15
Date After 1 day : 2016-08-16
2
PAA

vous voulez après des jours trouver la date de ce code essayez ..

public Date getToDateAfterDays(Integer day) {
        Date nowdate = new Date();
        Calendar cal = Calendar.getInstance();
        cal.setTime(nowdate);
        cal.add(Calendar.DATE, day);
        return cal.getTime();
    }
2
Hakan Anlamaz

Vous pouvez essayer la librairie Java.util.Date comme ceci-

int no_of_day_to_add = 1;

Date today = new Date();
Date tomorrow = new Date( today.getYear(), today.getMonth(), today.getDate() + no_of_day_to_add );

Modifiez la valeur de no_of_day_to_add comme vous le souhaitez.

J'ai réglé la valeur de no_of_day_to_add sur 1 parce que vous ne vouliez ajouter qu'un jour.

Plus d'informations peuvent être trouvées dans cette documentation .

1
Abrar Jahin