tl; dr
Dalam UTC :
Instant.now().minus( 1 , ChronoUnit.HOURS )
Atau, dikategorikan:
Instant.now()
.atZone( ZoneId.of ( "America/Montreal" ) )
.minusHours( 1 )
Menggunakan java.time
Java 8 dan yang lebih baru memiliki framework java.time baru bawaan .
Instant
Jika Anda hanya peduli tentang UTC (GMT), maka gunakan Instantkelas tersebut.
Instant instant = Instant.now ();
Instant instantHourEarlier = instant.minus ( 1 , ChronoUnit.HOURS );
Buang ke konsol.
System.out.println ( "instant: " + instant + " | instantHourEarlier: " + instantHourEarlier );
instan: 2015-10-29T00: 37: 48.921Z | instantHourEarlier: 2015-10-28T23: 37: 48.921Z
Perhatikan bagaimana saat ini terjadi melewatkan kembali ke tanggal kemarin.
ZonedDateTime
Jika Anda peduli dengan zona waktu, gunakan ZonedDateTimekelas. Anda dapat memulai dengan Sekejap dan menetapkan zona waktu, ZoneIdobjek. Kelas ini menangani penyesuaian yang diperlukan untuk anomali seperti Daylight Saving Time (DST) .
Instant instant = Instant.now ();
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
ZonedDateTime zdtHourEarlier = zdt.minus ( 1 , ChronoUnit.HOURS );
Buang ke konsol.
System.out.println ( "instant: " + instant + "\nzdt: " + zdt + "\nzdtHourEarlier: " + zdtHourEarlier );
instan: 2015-10-29T00: 50: 30.778Z
zdt: 2015-10-28T20: 50: 30.778-04: 00 [Amerika / Montreal]
zdtHourEarlier: 2015-10-28T19: 50: 30.778-04: 00 [Amerika / Montreal]
Konversi
Kelas java.util.Date/.Calendar lama sekarang sudah ketinggalan zaman. Hindari mereka. Mereka terkenal merepotkan dan membingungkan.
Jika Anda harus menggunakan kelas lama untuk beroperasi dengan kode lama yang belum diperbarui untuk jenis java.time, panggil metode konversi. Berikut adalah contoh kode dari Instan atau ZonedDateTime ke java.util.Date.
java.util.Date date = java.util.Date.from( instant );
…atau…
java.util.Date date = java.util.Date.from( zdt.toInstant() );
Tentang java.time
The java.time kerangka dibangun ke Jawa 8 dan kemudian. Kelas-kelas ini menggantikan tua merepotkan warisan kelas tanggal-waktu seperti java.util.Date, Calendar, &SimpleDateFormat .
Proyek Joda-Time , sekarang dalam mode pemeliharaan , menyarankan migrasi ke kelas java.time .
Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasinya adalah JSR 310 .
Anda dapat bertukar objek java.time langsung dengan database Anda. Gunakan driver JDBC yang sesuai dengan JDBC 4.2 atau yang lebih baru. Tidak perlu string, tidak perlu java.sql.*kelas.
Di mana mendapatkan kelas java.time?
Proyek ThreeTen-Extra memperluas java.time dengan kelas tambahan. Proyek ini adalah tempat pembuktian untuk kemungkinan penambahan java.time di masa mendatang. Anda mungkin menemukan beberapa kelas berguna di sini seperti Interval, YearWeek, YearQuarter, dan lebih .
mktimepadanannya di java? kurangi 60 menit darinya?