147 votes

Ajouter n heures à une date en Java ?

Comment ajouter n heures à un objet Date ? J'ai trouvé un autre exemple utilisant les jours sur StackOverflow, mais je ne comprends toujours pas comment le faire avec les heures.

3 votes

Utilisez joda-time.sourceforge.net si possible.

3 votes

Utilisez Date de Java 8 et l'heure si possible.

0 votes

@Babar FYI, le Joda-Time Le projet est maintenant en mode de maintenance L'équipe conseille la migration vers le java.time classes. Voir Tutoriel par Oracle .

225voto

Nikita Rybak Points 36641

Vérifiez Calendar classe. Il a add (et quelques autres) pour permettre la manipulation du temps.

Quelque chose comme ceci devrait fonctionner :

Calendar cal = Calendar.getInstance(); // creates calendar
cal.setTime(new Date());               // sets calendar time/date
cal.add(Calendar.HOUR_OF_DAY, 1);      // adds one hour
cal.getTime();                         // returns new date object plus one hour

Vérifiez API pour plus.

4 votes

Il faut juste faire attention si vous avez affaire à l'heure d'été ou à l'heure d'été.

6 votes

Il va sans dire que vous pouvez ajouter des "heures négatives".

6 votes

@CurtainDog Utilisation Calendar.add() s'en occupe automatiquement.

89voto

Sean Patrick Floyd Points 109428

Si vous utilisez Apache Commons / Lang vous pouvez le faire en une seule étape en utilisant DateUtils.addHours() :

Date newDate = DateUtils.addHours(oldDate, 3);

(L'objet original est inchangé)

3 votes

Vous pouvez également utiliser des heures négatives : DateUtils.addHours(oldDate, -1);

0 votes

Dans les coulisses, cela fait exactement ce que fait la réponse de Nikita, mais c'est très simple et facile à lire. De plus, si vous utilisez déjà Apache Commons / Lang... pourquoi pas ?

33voto

Peter Lawrey Points 229686

Pour simplifier l'exemple de @Christopher.

Disons que vous avez une constante

public static final long HOUR = 3600*1000; // in milli-seconds.

Vous pouvez écrire.

Date newDate = new Date(oldDate.getTime() + 2 * HOUR);

Si vous utilisez long pour stocker la date et l'heure au lieu de l'objet Date, vous pouvez faire ce qui suit

long newDate = oldDate + 2 * HOUR;

23voto

Babar Points 962

Avec Joda-Time

DateTime dt = new DateTime();
DateTime added = dt.plusHours(6);

2 votes

+1 un peu inutile pour cela, mais si vous avez l'intention de faire plus de manipulation de date, joda time est une excellente bibliothèque.

3 votes

@JoeriHendrickx Si le programmeur ajoute des heures à une date, alors très Il est probable qu'ils fassent d'autres travaux de datation. Je ne considère pas Joda-Time Ce n'est pas du tout nécessaire ; la première chose que je fais lorsque je crée un nouveau projet est d'ajouter Joda-Time. Même Sun et Oracle sont d'accord pour dire que l'ancien java.util.Date & Calendar doit être abandonné, et ils ont donc ajouté le nouveau joda-Time. paquet java.time.* (inspiré de Joda-Time) à Java 8.

0 votes

J'ai eu des problèmes avec Joda sur Android. J'obtenais toujours ClassNotDefinedException

14voto

Christopher Hunt Points 1287

Quelque chose comme :

Date oldDate = new Date(); // oldDate == current time
final long hoursInMillis = 60L * 60L * 1000L;
Date newDate = new Date(oldDate().getTime() + 
                        (2L * hoursInMillis)); // Adds 2 hours

1 votes

Pour votre information, les anciennes classes de date-heure gênantes telles que java.util.Date , java.util.Calendar et java.text.SimpleDateFormat sont maintenant héritage supprimé par le java.time intégrées dans Java 8 et Java 9. Voir Tutoriel par Oracle .

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