tl; dr
In UTC :
Instant.now().minus( 1 , ChronoUnit.HOURS )
Oppure, suddiviso in zone:
Instant.now()
.atZone( ZoneId.of ( "America/Montreal" ) )
.minusHours( 1 )
Utilizzando java.time
Java 8 e versioni successive hanno il nuovo framework java.time integrato.
Instant
Se ti interessa solo UTC (GMT), usa la Instant
classe.
Instant instant = Instant.now ();
Instant instantHourEarlier = instant.minus ( 1 , ChronoUnit.HOURS );
Scarica su console.
System.out.println ( "instant: " + instant + " | instantHourEarlier: " + instantHourEarlier );
istantaneo: 2015-10-29T00: 37: 48.921Z | instantHourEarlier: 2015-10-28T23: 37: 48.921Z
Nota come in questo istante è successo di tornare alla data di ieri.
ZonedDateTime
Se ti interessa un fuso orario, usa la ZonedDateTime
classe. Puoi iniziare con un Istantaneo e assegnare un fuso orario, un ZoneId
oggetto. Questa classe gestisce le regolazioni necessarie per anomalie come l' ora legale (DST) .
Instant instant = Instant.now ();
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
ZonedDateTime zdtHourEarlier = zdt.minus ( 1 , ChronoUnit.HOURS );
Scarica su console.
System.out.println ( "instant: " + instant + "\nzdt: " + zdt + "\nzdtHourEarlier: " + zdtHourEarlier );
istantaneo: 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]
Conversione
Le vecchie classi java.util.Date/.Calendar ora sono obsolete. Evitali. Sono notoriamente fastidiosi e confusi.
Quando è necessario utilizzare le vecchie classi per operare con il vecchio codice non ancora aggiornato per i tipi java.time, chiamare i metodi di conversione. Ecco un esempio di codice che va da Instant o ZonedDateTime a java.util.Date.
java.util.Date date = java.util.Date.from( instant );
…o…
java.util.Date date = java.util.Date.from( zdt.toInstant() );
Informazioni su java.time
Il framework java.time è integrato in Java 8 e versioni successive. Queste classi soppiantare la vecchia fastidiosi legacy classi data-time come java.util.Date
, Calendar
, eSimpleDateFormat
.
Il progetto Joda-Time , ora in modalità di manutenzione , consiglia la migrazione alle classi java.time .
Per saperne di più, vedere il tutorial Oracle . E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310 .
Puoi scambiare oggetti java.time direttamente con il tuo database. Utilizza un driver JDBC compatibile con JDBC 4.2 o successivo. Non c'è bisogno di stringhe, non c'è bisogno dijava.sql.*
classi.
Dove ottenere le classi java.time?
Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un banco di prova per possibili future aggiunte a java.time. Si possono trovare alcune classi utili, come per esempio Interval
, YearWeek
, YearQuarter
e altro .
mktime
equivalente in java? sottrarre 60 minuti da esso?