1. ZonedDateTime
sınıf
Date Time API'sinde çok ilginç bir sınıf daha var: class ZonedDateTime
. Ana amacı, farklı saat dilimlerindeki tarihlerle çalışmayı uygun hale getirmektir.
LocalDate
tarihleri temsil etmek için harikadır. Örneğin, doğum günleri. Nerede olursam olayım doğum günüm 15 Mart. Bu bir tarih örneğidir.
LocalTime
Zamanı tarif etmek harika, çalar saatteki saat gibi: Alarmı sabah 5:00'e kurdum ve nerede olduğum önemli değil. 5:00 sabah 5:00. Bu, zamanla çalışmanın bir örneğidir.
Şimdi uçuş rezervasyonu yapan bir uygulama yazdığımızı varsayalım. Uçaklar yerel saate göre kalkar ve gelir. Uçak belirli bir süre havada kalır, ancak saat dilimleri değişebilir.
Zaman dilimleri
Bu arada, saat dilimleri tam bir karmaşa. Ve 24 saat dilimi olduğunu düşünüyorsanız, çok yanılıyorsunuz.
Örneğin, Hindistan'daki saat Greenwich Ortalama Saatinden beş buçuk saat farklıdır: GMT+5:30
. Bazı ülkeler gün ışığından yararlanma saatine geçer, bazıları geçmez. Ayrıca, farklı ülkeler yılın farklı zamanlarında yaz saatine geçer.
Ve bazı ülkeler yaz saatini iptal eden ya da yeniden uygulamaya koyan ya da tekrar iptal eden yasalar çıkarır.
Her halükarda, dünyanın saat dilimleri vardır ve her saat diliminde bir zaman vardır. Farklı bölgelerdeki saatler yılın belirli dönemlerinde çakışabilir ve ardından diğer dönemlerde farklılık gösterebilir. Zaman dilimlerine genellikle içinde bulunan büyük şehirlerin adı verilir: Europe/Monaco
, Asia/Singapore
ancak istisnalar da vardır — US/Pacific
.
Resmi olarak şu anda 599 saat dilimi var. Bir düşünün: 599. Bu 24'ten çok uzak. Küresel dünyaya hoş geldiniz.
ZoneId
Paketteki sınıf, Java'da java.time
bir saat dilimini depolamak için kullanılır.
Bu arada, getAvailableZoneIds()
şu anda bilinen tüm zaman dilimlerinin kümesini döndüren statik bir yöntemi vardır. Tüm bölgelerin bir listesini almak için aşağıdaki kodu yazmanız gerekir:
kod | Konsol çıkışı (kısmi) |
---|---|
|
|
Bir ZoneId
nesneyi adıyla elde etmek için statik of()
yöntemi kullanmanız gerekir;
kod | Not |
---|---|
|
|
2. ZonedDateTime
Nesne oluşturma
Bir nesne oluştururken ZonedDateTime
, sınıfın statik now()
yöntemini çağırmanız ve ZoneId
ona bir nesne iletmeniz gerekir.
kod | Konsol çıkışı |
---|---|
|
|
ZoneId
Yönteme bir nesne iletmezseniz now()
(ve buna izin verilir), saat dilimi programı çalıştıran bilgisayarın ayarlarına göre otomatik olarak belirlenir.
Örnek:
kod | Konsol çıkışı |
---|---|
|
|
Küresel bir tarihi yerel bir tarihe dönüştürme
İlginç özelliklerinden biri, ZonedDateTime
yerel bir tarih ve saate dönüştürme yeteneğidir. Örnek:
ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime cairoTime = ZonedDateTime.now(zone);
LocalDate localDate = cairoTime.toLocalDate();
LocalTime localTime = cairoTime.toLocalTime();
LocalDateTime localDateTime = cairoTime.toLocalDateTime();
3. Zamanla Çalışmak
Sınıf gibi LocalDateTime
, ZonedDateTime
sınıfın da bir tarih ve saatin bireysel öğelerini almanın birçok yolu vardır. İşte bu yöntemlerin bir listesi:
|
Belirli bir tarihin yılını döndürür |
|
Tarihin ayını döndürür: birkaç sabitten biri —JANUARY, FEBRUARY, ...; |
|
Tarihin ayının dizinini döndürür. Ocak == 1 |
|
Ayın gününün dizinini verir |
|
Haftanın gününü döndürür: birkaç sabitten biri —MONDAY, TUESDAY, ...; |
|
Yılın gününün indeksini verir |
|
Saatleri döndürür |
|
dakikaları döndürür |
|
Saniyeleri döndürür |
|
nanosaniyeleri döndürür |
Tüm yöntemler, sınıfın yöntemlerine mükemmel şekilde benzer LocalDateTime
. Ve tabii ki, ZonedDateTime
sınıfın tarih ve saatlerle çalışmanıza izin veren yöntemleri vardır. Bununla birlikte, yöntemlerin çağrıldığı nesne değişmez. Bunun yerine yeni bir nesne döndürürler ZonedDateTime
:
Yöntemler | Tanım |
---|---|
|
Tarihe yıllar ekler |
|
Tarihe ay ekler |
|
Tarihe gün ekler |
|
Saat ekler |
|
dakika ekler |
|
saniye ekler |
|
nanosaniye ekler |
|
Tarihten yılları çıkarır |
|
Ayları tarihten çıkarır |
|
Günleri tarihten çıkarır |
|
Saatleri çıkarır |
|
Dakikaları çıkarır |
|
Saniyeleri çıkarır |
|
Nanosaniyeleri çıkarır |
Herhangi bir örnek vermeyeceğiz, çünkü buradaki her şeyin az önce incelediğimiz sınıflara benzetilerek açık olduğunu düşünüyoruz.
GO TO FULL VERSION