1. Date Time API Tanıtımı
Java'nın yaratıcıları, Date ve Calendar sınıflarındaki durumu beğenmedi. Zamanında iyiydiler ama zaman değişiyor. Ve basit, güçlü ve güvenilir bir şey gerekli hale geldi. Ve Java 8'in piyasaya sürülmesiyle ( Calendar
ortaya çıktıktan 15 yıl sonra), Java Date Time API tanıtıldı. Zamanla ilgili her olası görevi çözebilmesi gereken bir sınıflar kümesidir.
O kadar çok sınıf vardı ki, birkaç pakete ayrıldılar:
Paket, Java java.time
Date Time API için temel pakettir: LocalDate
, LocalTime
, , , ve gibi sınıfları içerir . Bu sınıfların tüm nesneleri , yani oluşturulduktan sonra değiştirilemezler.LocalDateTime
Instant
Period
Duration
immutable
Paket java.time.format
, zaman formatlaması için sınıflar içerir, yani saatleri (ve tarihleri) dizgelere dönüştürmek ve tersi. Örneğin, DateTimeFormatter
sınıfın yerini alan çok yönlü sınıfı içerir SimpleDateFormat
.
Paket java.time.zone
, saat dilimleriyle çalışmak için sınıflar içerir. TimeZone
ve gibi sınıfları içerir ZonedDateTime
. Dünyanın farklı yerlerinde bulunan istemciler için sunucu kodu yazıyorsanız, bu sınıflara gerçekten ihtiyacınız olacak.
2. LocalDate
sınıf
Date Time API'sinden inceleyeceğimiz ilk ve en yararlı sınıf, sınıftır LocalDate
. Adından da tahmin edebileceğiniz gibi, bu sınıf tarihlerle çalışacak şekilde tasarlanmıştır.
Bu sınıfın nesneleri oluşturulduktan sonra değişmez, yani LocalDate
sınıf değişmez. Ancak bu özellik, sınıfa basitlik ve güvenilirlik katar. Özellikle birkaç iş parçacığı (yürütme iş parçacığı) aynı anda böyle bir nesneyle etkileşime giriyorsa.
Yeni bir nesne oluşturmak için LocalDate
statik yöntemlerden birini kullanmanız gerekir. İşte ana olanların bir listesi.
Geçerli tarihi alma
Geçerli tarihi almak için statik yöntemi kullanmanız gerekir now()
. Bu göründüğünden çok daha kolay:
LocalDate today = LocalDate.now();
Nerede today
bir LocalDate
değişkendir ve sınıfın LocalDate.now()
statik yöntemine yapılan bir çağrıdır .now()
LocalDate
Örnek:
kod | Konsol çıkışı |
---|---|
|
|
Belirli bir saat diliminde tarih alma
Sınıf ayrıca , geçerli tarihi belirli bir saat diliminde almanızı sağlayan LocalDate
bir yöntem varyasyonuna sahiptir .now(ZoneId)
Bunu yapmak için başka bir sınıfa ihtiyacımız var — ZoneId
sınıf (java.time.ZoneId). Zaman diliminin adı verilen of()
bir nesneyi döndüren bir yöntemi vardır .ZoneId
Şangay'daki güncel tarihi belirlemek için aşağıdaki kodu yazmanız gerekir:
kod | Konsol çıkışı |
---|---|
|
|
İnternette tüm saat dilimlerinin adlarının bir listesini bulabilirsiniz.
3. Belirli bir tarih almak
Belirli bir tarihi temsil eden bir nesne elde etmek için LocalDate
statik yöntemi kullanmanız gerekir of()
. Buradaki her şey de çok basit ve net:
LocalDate date = LocalDate.of(2019, Month.FEBRUARY, 22);
Nerede date
bir LocalDate
değişkendir ve sınıfın statik yöntemine yapılan bir çağrıdır .LocalDate.of()
of()
LocalDate
FEBRUARY
Burada sınıfın sabitinin Month
(java.time.Month) Şubat ayını ay olarak belirtmek için kullanıldığını görüyoruz .
Ayı eski moda bir şekilde - bir sayı kullanarak da belirleyebilirsiniz:
LocalDate date = LocalDate.of(2019, 2, 22);
İki? Şubat yerine? Bu, ayların bir kez daha birden numaralandırıldığı anlamına mı geliyor?
Evet, Java'nın yaratılmasından yaklaşık 20 yıl sonra, aylar nihayet sıfırdan sayılmayı bıraktı.
Örnek:
kod | Konsol çıkışı |
---|---|
|
|
Günün indeksine göre tarih alma
Tarih oluşturmanın başka ilginç bir yolu daha var: yöntemi kullanarak ofYearDay
, yalnızca yıl sayısına ve yıl içindeki gün indeksine dayalı bir tarih alabilirsiniz. İşte genel görünüm:
LocalDate date = LocalDate.ofYearDay(year, day);
year
Yılın sayısı nerede ve yıl day
içindeki günün dizini.
Örnek:
kod | Konsol çıkışı |
---|---|
|
|
2019'un 100. günü 10 Nisan.
Unix tarihi alma
Date
1 Ocak 1970'ten bu yana nesnelerin zamanı her zaman milisaniye cinsinden sakladığını hatırlıyor musunuz ? Programcıların eski güzel günleri kaçırmamasını sağlamak için sınıf, 1 Ocak 1970'ten hesaplanan tarihi döndüren LocalDate
bir yöntem aldı . İşte genel görünüm:ofEpochDay()
LocalDate date = LocalDate.ofEpochDay(day);
day
1 Ocak 1970 tarihinden bu yana geçen gün sayısı nerede ?
Örnek:
kod | Konsol çıkışı |
---|---|
|
|
4. Bir tarihin öğelerini alma
Nesneleri değiştirmek imkansızdır LocalDate
, ancak saklanan tarihin ayrı ayrı öğelerini alabilirsiniz. LocalDate
nesnelerin bunun için birkaç yöntemi vardır:
Yöntem | Tanım |
---|---|
|
Belirli bir tarihin yılını döndürür |
|
Tarihin ayını döndürür: birkaç sabitten biriJANUARY, FEBRUARY, ...; |
|
Tarihin ayının dizinini döndürür. Ocak == 1. |
|
Ayın gününün dizinini verir |
|
Yılın başından itibaren günün indeksini verir |
|
Haftanın gününü döndürür: birkaç sabitten biriMONDAY, TUESDAY, ...; |
|
Çağı döndürür: BCE (Mevcut Çağdan Önce) ve CE (Mevcut Çağdan Önce) |
Örnek:
kod | Konsol çıkışı |
---|---|
|
|
LocalDate
5. Bir nesnedeki tarihi değiştirme
Sınıf LocalDate
, tarihlerle çalışmanıza izin veren çeşitli yöntemler içerir. Bu yöntemlerin uygulanması, sınıfın yöntemlerine benzer String
: mevcut nesneyi değiştirmezler LocalDate
, bunun yerine istenen verilerle yeni bir nesne döndürürler.
İşte sınıfın yöntemleri LocalDate
:
Yöntem | Tanım |
---|---|
|
Tarihe belirli sayıda gün ekler |
|
Tarihe hafta ekler |
|
Tarihe ay ekler |
|
Tarihe yıllar ekler |
|
Günleri tarihten çıkarır |
|
Tarihten haftaları çıkarır |
|
Ayları tarihten çıkarır |
|
Tarihten yılları çıkarır |
Örnek:
kod | Konsol çıkışı |
---|---|
|
|
Kimin birthday object
metotları dediğimiz değişmiyor. Bunun yerine, yöntemleri istenen verileri içeren yeni nesneler döndürür.