Comment ajouter n heures à un objet Date? J'ai trouvé un autre exemple d'utilisation de jours sur StackOverflow, mais je ne comprends toujours pas comment le faire en heures.
Consultez la classe du calendrier. Il a la méthode add
(et quelques autres) pour permettre la manipulation du temps. Quelque chose comme ça devrait marcher.
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 API pour plus.
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 d'origine est inchangé)
Pour simplifier l'exemple de @ Christopher.
Disons 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 à la place de l'objet Date, vous pouvez le faire
long newDate = oldDate + 2 * HOUR;
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.
L'infrastructure Java.time intégrée à Java 8 et versions ultérieures supplante les anciennes classes Java.util.Date/.Calendar. Ces anciennes classes sont notoirement gênantes. Évite-les.
Utilisez la méthode toInstant
récemment ajoutée à Java.util.Date pour convertir l'ancien type en nouveau type Java.time. Une Instant
est un moment sur la ligne de temps dans UTC avec une résolution de nanosecondes .
Instant instant = myUtilDate.toInstant();
Vous pouvez ajouter des heures à cette Instant
en passant un TemporalAmount
tel que Duration
.
Duration duration = Duration.ofHours( 8 );
Instant instantHourLater = instant.plus( duration );
Pour lire cette date-heure, générez une chaîne au format ISO 8601 en appelant toString
.
String output = instantHourLater.toString();
Vous voudrez peut-être voir ce moment à travers l’objectif de la heure de l'horloge murale d'une région. Ajustez la Instant
au fuseau horaire souhaité/attendu en créant un ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Vous pouvez également appeler plusHours
pour ajouter votre nombre d'heures. Être zoné signifie que 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 une interopérabilité avec les classes non encore mises à jour pour les types Java.time, convertissez-le à partir de ZonedDateTime
via Instant
. De 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 discussion sur la conversion, voir ma réponse à la question, Convertir Java.util.Date en quel type «Java.time»?? .
Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes gênantes héritées _ date-heure telles que Java.util.Date
, Calendar
_, & SimpleDateFormat
.
Le projet Joda-Time , désormais en mode { mode maintenance }, conseille 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 310 .
Vous pouvez échanger des objets Java.time 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 y trouver des classes utiles telles que Interval
_, YearWeek
, YearQuarter
_ et plus _.
Avec Joda-Time
DateTime dt = new DateTime();
DateTime added = dt.plusHours(6);
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 newish Java.util.concurrent.TimeUnit class vous pouvez le faire comme ceci
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 objet 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.
String myString = "09:00 12/12/2014";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm dd/MM/yyyy");
Date myDateTime = null;
//Parse your string to SimpleDateFormat
try
{
myDateTime = simpleDateFormat.parse(myString);
}
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 êtes prêt à utiliser Java.time
, voici une méthode pour ajouter des durées formatées 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 Joda DateTime
DateTime date= new DateTime(dateObj);
date = date.plusHours(1);
dateObj = date.toDate();
Date argDate = new Date(); //set your date.
String 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");
String dateTime = sdf.format(argDate) + " " + argTime;
Date requiredDate = dateFormat.parse(dateTime);
en utilisant des 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 à partir de Java 8. Par exemple:
long n = 4;
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime.plusHours(n));