tl; Dr.
In UTC :
Instant.now().minus( 1 , ChronoUnit.HOURS )
Veya bölgeli:
Instant.now()
.atZone( ZoneId.of ( "America/Montreal" ) )
.minusHours( 1 )
Java.time kullanma
Java 8 ve sonraki sürümleri, yerleşik olarak yeni java.time çerçevesine sahiptir .
Instant
Yalnızca UTC'yi (GMT) önemsiyorsanız, Instant
sınıfı kullanın .
Instant instant = Instant.now ();
Instant instantHourEarlier = instant.minus ( 1 , ChronoUnit.HOURS );
Konsola boşaltın.
System.out.println ( "instant: " + instant + " | instantHourEarlier: " + instantHourEarlier );
anlık: 2015-10-29T00: 37: 48.921Z | instantHourEarlier: 2015-10-28T23: 37: 48.921Z
Bu anda dünün tarihine nasıl geri döndüğünüze dikkat edin.
ZonedDateTime
Bir saat dilimini önemsiyorsanız, ZonedDateTime
sınıfı kullanın . Bir Anlık ile başlayabilir ve bir saat dilimi, bir ZoneId
nesne atayabilirsiniz . Bu sınıf, Yaz Saati Uygulaması (DST) gibi anormallikler için gerekli ayarlamaları yapar .
Instant instant = Instant.now ();
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
ZonedDateTime zdtHourEarlier = zdt.minus ( 1 , ChronoUnit.HOURS );
Konsola boşaltın.
System.out.println ( "instant: " + instant + "\nzdt: " + zdt + "\nzdtHourEarlier: " + zdtHourEarlier );
anlık: 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 [America / Montreal]
Dönüştürmek
Eski java.util.Date/.Calendar sınıfları artık modası geçmiş. Onlardan kaçının. Ünlü bir şekilde zahmetli ve kafa karıştırıcıdırlar.
Eski sınıfları, java.time türleri için henüz güncellenmemiş eski kodla çalışmak için kullanmanız gerektiğinde, dönüştürme yöntemlerini çağırın. İşte Instant veya ZonedDateTime'dan java.util.Date'e giden örnek kod.
java.util.Date date = java.util.Date.from( instant );
…veya…
java.util.Date date = java.util.Date.from( zdt.toInstant() );
Hakkında java.time
Java.time çerçevesi daha sonra Java 8 ve yerleşiktir. Bu sınıflar zahmetli eski yerini mirası gibi tarih-saat sınıfları java.util.Date
, Calendar
&SimpleDateFormat
.
Şu anda bakım modunda olan Joda-Time projesi, java.time sınıflarına geçişi önerir .
Daha fazla bilgi edinmek için Oracle Eğitimi'ne bakın . Ve birçok örnek ve açıklama için Stack Overflow'da arama yapın. Spesifikasyon JSR 310'dur .
Java.time nesnelerini doğrudan veritabanınız ile değiş tokuş edebilirsiniz . JDBC 4.2 veya üstü ile uyumlu bir JDBC sürücüsü kullanın . Dizelere gerek yok, derslere gerek yok .java.sql.*
Java.time sınıflarını nereden edinebilirim?
ThreeTen-Ekstra proje ek sınıfları ile java.time uzanır. Bu proje, java.time'a gelecekteki olası eklemeler için kanıtlayıcı bir zemindir. Burada bazı yararlı sınıfları gibi bulabilir Interval
, YearWeek
, YearQuarter
, ve daha .
mktime
eşdeğeri var mı? ondan 60 dakika çıkarılsın mı?