En résumé
Sur UTC :
Instant.now().minus( 1 , ChronoUnit.HOURS )
Ou, zoné :
Instant.now()
.atZone( ZoneId.of ( "America/Montreal" ) )
.minusHours( 1 )
Utilisation de java.time
Java 8 et les versions ultérieures disposent de la nouvelle java.time cadre intégré.
Instant
Si vous ne vous préoccupez que de l'UTC (GMT), utilisez la fonction Instant
classe.
Instant instant = Instant.now ();
Instant instantHourEarlier = instant.minus ( 1 , ChronoUnit.HOURS );
Dump à la console.
System.out.println ( "instant: " + instant + " | instantHourEarlier: " + instantHourEarlier );
instant : 2015-10-29T00:37:48.921Z | instantHourEarlier : 2015-10-28T23:37:48.921Z
Notez comment, à cet instant, il est arrivé de revenir à la date d'hier.
ZonedDateTime
Si vous vous souciez d'un fuseau horaire, utilisez la fonction ZonedDateTime
classe. Vous pouvez commencer par un instantané, puis attribuer un fuseau horaire, un nom d'utilisateur et un mot de passe. ZoneId
objet. Cette classe gère les ajustements nécessaires pour les anomalies telles que Heure d'été (DST) .
Instant instant = Instant.now ();
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
ZonedDateTime zdtHourEarlier = zdt.minus ( 1 , ChronoUnit.HOURS );
Dump à la console.
System.out.println ( "instant: " + instant + "\nzdt: " + zdt + "\nzdtHourEarlier: " + zdtHourEarlier );
instant: 2015-10-29T00:50:30.778Z
zdt: 2015-10-28T20:50:30.778-04:00[America/Montreal]
zdtHourEarlier: 2015-10-28T19:50:30.778-04:00[America/Montreal]
Conversion
Les anciennes classes java.util.Date/.Calendar sont maintenant dépassées. Évitez-les. Elles sont notoirement gênantes et déroutantes.
Lorsque vous devez utiliser les anciennes classes pour opérer avec un ancien code non encore mis à jour pour les types java.time, appelez les méthodes de conversion. Voici un exemple de code passant d'un Instant ou d'un ZonedDateTime à une java.util.Date.
java.util.Date date = java.util.Date.from( instant );
ou
java.util.Date date = java.util.Date.from( zdt.toInstant() );
À propos de java.time
Le site java.time est intégré à Java 8 et aux versions ultérieures. Ces classes remplacent les anciennes classes héritage les classes de date et d'heure telles que java.util.Date
, Calendar
, & SimpleDateFormat
.
Le site Joda-Time Le projet, actuellement en mode de maintenance conseille la migration vers le java.time classes.
Pour en savoir plus, consultez le Tutoriel Oracle . Et recherchez sur Stack Overflow de nombreux exemples et explications. La spécification est JSR 310 .
Vous pouvez échanger java.time directement avec votre base de données. Utilisez un Pilote JDBC conforme à JDBC 4.2 ou plus tard. Pas besoin de ficelles, pas besoin de java.sql.*
classes.
Où obtenir les classes java.time ?
Le site Trois-Dix-Extra Le projet é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
y plus .
0 votes
Y a-t-il un
mktime
l'équivalent en java ? en soustraire 60 minutes ?