Ajout de n heures à une date en Java?

Comment append des heures à un object Date? J’ai trouvé un autre exemple en utilisant des jours sur StackOverflow, mais je ne comprends toujours pas comment le faire avec des heures.

Vérifiez la classe de calendrier. Il a la méthode add (et quelques autres) pour permettre la manipulation du temps. Quelque chose comme ça 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, one hour in the future 

Vérifiez l’ API pour plus d’informations.

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’object d’origine est inchangé)

Pour simplifier @ l’exemple de Christopher.

Dites que vous avez une constante

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

Tu peux écrire.

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

Si vous utilisez long pour stocker la date / heure au lieu de l’object Date que vous pouvez faire

 long newDate = oldDate + 2 * HOUR; 

Avec Joda-Time

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

tl; dr

 myJavaUtilDate.toInstant() .plusHours( 8 ) 

Ou…

 myJavaUtilDate.toInstant() // Convert from legacy class to modern class, an `Instant`, a point on the timeline in UTC with resolution of nanoseconds. .plus( // Do the math, adding a span of time to our moment, our `Instant`. Duration.ofHours( 8 ) // Specify a span of time unattached to the timeline. ) // Returns another `Instant`. Using immutable objects creates a new instance while leaving the original intact. 

Utiliser java.time

Le framework java.time intégré à Java 8 et ultérieur remplace les anciennes classes Java.util.Date/.Calendar. Ces vieilles classes sont notoirement difficiles. Évite-les.

Utilisez la méthode toInstant récemment ajoutée à java.util.Date pour convertir l’ancien type vers le nouveau type java.time. Un Instant est un moment de la ligne temporelle en UTC avec une résolution de nanosecondes .

 Instant instant = myUtilDate.toInstant(); 

Vous pouvez append des heures à cet Instant en passant un TemporalAmount tel que la Duration .

 Duration duration = Duration.ofHours( 8 ); Instant instantHourLater = instant.plus( duration ); 

Pour lire cette date et heure, générez une chaîne au format ISO 8601 standard en appelant toSsortingng .

 Ssortingng output = instantHourLater.toSsortingng(); 

Vous voudrez peut-être voir ce moment à travers la lentille de l’ horloge d’une région. Ajustez l’ Instant dans votre fuseau horaire souhaité / prévu en créant un ZonedDateTime .

 ZoneId zoneId = ZoneId.of( "America/Montreal" ); ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId ); 

Vous pouvez également appeler plusHours pour append votre nombre d’heures. Étant zoné, l’heure d’été (DST) et d’autres anomalies seront traitées en votre nom.

 ZonedDateTime later = zdt.plusHours( 8 ); 

Vous devriez éviter d’utiliser les anciennes classes date-heure, y compris java.util.Date et .Calendar . Mais si vous avez vraiment besoin d’un java.util.Date pour l’interopérabilité avec les classes non encore mises à jour pour les types java.time, convertissez à partir de ZonedDateTime via Instant . Les nouvelles méthodes ajoutées aux anciennes classes facilitent la conversion vers / depuis les types java.time.

 java.util.Date date = java.util.Date.from( later.toInstant() ); 

Pour plus de détails sur la conversion, voir ma réponse à la question, Convertir java.util.Date à quel type «java.time»? .


À propos de java.time

Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes de date / heure héritées telles que java.util.Date , Calendar et SimpleDateFormat .

Le projet Joda-Time , maintenant en mode maintenance , conseille la migration vers les classes java.time .

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

Vous pouvez échanger des objects java.time directement avec votre firebase database. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin de classes java.sql.* .

Où obtenir les classes java.time?

  • Java SE 8 , Java SE 9 et versions ultérieures
    • Intégré
    • Partie de l’API Java standard avec une implémentation intégrée.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et Java SE 7
    • Une grande partie de la fonctionnalité java.time est transférée vers Java 6 et 7 dans ThreeTen-Backport .
  • Android
    • Versions ultérieures des implémentations de bundles Android des classes java.time.
    • Pour Android antérieur (<26), le projet ThreeTenABP adapte ThreeTen-Backport (mentionné ci-dessus). Voir Comment utiliser ThreeTenABP… .

Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts futurs à java.time. Vous pouvez y trouver des classes utiles telles que Interval , YearWeek , YearQuarter , etc.

Depuis Java 8:

 LocalDateTime.now().minusHours(1); 

Voir API LocalDateTime .

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 

En utilisant la classe java.util.concurrent.TimeUnit , vous pouvez le faire comme ça

  Date oldDate = new Date(); // oldDate == current time Date newDate = new Date(oldDate.getTime() + TimeUnit.HOURS.toMillis(2)); // Adds 2 hours 

Ceci est un autre morceau de code lorsque votre object Date est au format Datetime. La beauté de ce code est que, si vous donnez plus d’heures, la date sera également mise à jour en conséquence.

  Ssortingng mySsortingng = "09:00 12/12/2014"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm dd/MM/yyyy"); Date myDateTime = null; //Parse your ssortingng to SimpleDateFormat try { myDateTime = simpleDateFormat.parse(mySsortingng); } catch (ParseException e) { e.printStackTrace(); } System.out.println("This is the Actual Date:"+myDateTime); Calendar cal = new GregorianCalendar(); cal.setTime(myDateTime); //Adding 21 Hours to your Date cal.add(Calendar.HOUR_OF_DAY, 21); System.out.println("This is Hours Added Date:"+cal.getTime()); 

Voici la sortie:

  This is the Actual Date:Fri Dec 12 09:00:00 EST 2014 This is Hours Added Date:Sat Dec 13 06:00:00 EST 2014 

Si vous souhaitez utiliser java.time , voici une méthode pour append des durées au format ISO 8601:

 import java.time.Duration; import java.time.LocalDateTime; ... LocalDateTime yourDate = ... ... // Adds 1 hour to your date. yourDate = yourDate.plus(Duration.parse("PT1H")); // Java. // OR yourDate = yourDate + Duration.parse("PT1H"); // Groovy. 

Vous pouvez le faire avec l’API DateTime de Joda

 DateTime date= new DateTime(dateObj); date = date.plusHours(1); dateObj = date.toDate(); 
 Date argDate = new Date(); //set your date. Ssortingng argTime = "09:00"; //9 AM - 24 hour format :- Set your time. SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy"); SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm"); Ssortingng dateTime = sdf.format(argDate) + " " + argTime; Date requiredDate = dateFormat.parse(dateTime); 

en utilisant les classes Java 8. nous pouvons manipuler la date et l’heure très facilement comme ci-dessous.

 LocalDateTime today = LocalDateTime.now(); LocalDateTime minusHours = today.minusHours(24); LocalDateTime minusMinutes = minusHours.minusMinutes(30); LocalDate localDate = LocalDate.from(minusMinutes); 

Vous pouvez utiliser la classe LocalDateTime de Java 8. Par exemple:

 long n = 4; LocalDateTime localDateTime = LocalDateTime.now(); System.out.println(localDateTime.plusHours(n)); 

Vous pouvez utiliser cette méthode, elle est facile à comprendre et à mettre en œuvre:

 public static java.util.Date AddingHHMMSSToDate(java.util.Date date, int nombreHeure, int nombreMinute, int nombreSeconde) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.HOUR_OF_DAY, nombreHeure); calendar.add(Calendar.MINUTE, nombreMinute); calendar.add(Calendar.SECOND, nombreSeconde); return calendar.getTime(); }