logo

Java Tarihi ve Saati

Java.time, Java.util, Java.sql ve Java.text paketleri tarih ve saati temsil eden sınıflar içerir. Aşağıdaki sınıflar Java'da tarihle ilgilenmek için önemlidir.

Java 8 Tarih/Saat API'si

Java, Java 8'den bu yana yeni bir Tarih ve Saat API'sini kullanıma sunmuştur. Java.time paketi, Java 8 Tarih ve Saat sınıflarını içerir.

Klasik Tarih/Saat API'si

Ancak klasik veya eski Java Date API'si de faydalıdır. Klasik Date ve Time sınıflarının listesine bakalım.

Tarih ve Saati Biçimlendirme

Java'da tarih ve saati aşağıdaki sınıfları kullanarak biçimlendirebiliriz:

Java Tarih ve Saat API'leri

Java, Java.time ve Java.util adlı iki paket yardımıyla tarih ve saat işlevselliğini sağlar. Java.time paketi Java 8'de tanıtılmıştır ve yeni tanıtılan sınıflar, eski java.util.Date ve java.util.Calendar sınıflarının eksikliklerinin üstesinden gelmeye çalışmaktadır.

Klasik Tarih Saat API Sınıfları

Java 8 sürümünden önceki birincil sınıflar şunlardı:

sınıf ve nesne javası

Java.lang.Sistem: Sınıf, geçerli saati milisaniye cinsinden döndüren currentTimeMillis() yöntemini sağlar. 1 Ocak 1970 tarihinden itibaren geçerli tarih ve saati milisaniye cinsinden gösterir.

java.util.Tarih: Zamanın belirli bir anını milisaniye birimiyle göstermek için kullanılır.

java.util.Takvim: Örnekler arasında dönüştürme yapmak ve takvim alanlarını farklı şekillerde değiştirmek için yöntemler sağlayan soyut bir sınıftır.

java.text.SimpleDateFormat: Tarihleri ​​önceden tanımlanmış bir şekilde veya kullanıcı tanımlı bir düzende biçimlendirmek ve ayrıştırmak için kullanılan bir sınıftır.

java.util.TimeZone: Bir saat dilimi farkını temsil eder ve aynı zamanda gün ışığından yararlanma tasarrufunu da hesaplar.

Mevcut Tarih/Saat API'lerinin dezavantajları

    Konu güvenliği:Date ve Calendar gibi mevcut sınıflar iş parçacığı güvenliği sağlamaz. Bu nedenle, geliştiricilerin ilgilenmesi gereken, hata ayıklaması zor eşzamanlılık sorunlarına yol açar. Java 8'in yeni Tarih ve Saat API'leri iş parçacığı güvenliği sağlar ve değişmezdir, dolayısıyla geliştiricilerin eşzamanlılık sorununu ortadan kaldırır.Kötü API tasarımı:Klasik Tarih ve Takvim API'leri, temel günlük işlevleri gerçekleştirmeye yönelik yöntemler sağlamaz. Java 8'de tanıtılan Tarih ve Saat sınıfları ISO merkezlidir ve tarih, saat, süre ve dönemlere ilişkin işlemleri gerçekleştirmek için çok sayıda farklı yöntem sağlar.Zor saat dilimi kullanımı:Klasik Date ve Calendar sınıflarını kullanarak saat dilimini yönetmek zordur çünkü geliştiricilerin bunun mantığını yazması gerekiyordu. Yeni API'ler sayesinde saat dilimi işlemesi Local ve ZonedDate/Time API'leri ile kolaylıkla yapılabilmektedir.

Java 8'deki Yeni Tarih Saat API'si

Yeni tarih API'si, eski sınıflarla yukarıda belirtilen dezavantajların üstesinden gelmeye yardımcı olur. Aşağıdaki sınıfları içerir:

java.time.LocalDate: ISO takviminde bir yıl-ay-günü temsil eder ve zaman olmadan bir tarihi temsil etmek için kullanışlıdır. Doğum tarihi veya düğün tarihi gibi yalnızca tarih bilgilerini temsil etmek için kullanılabilir.

java.time.LocalTime: Yalnızca zamanla ilgilenir. Film saatleri veya yerel kütüphanenin açılış ve kapanış saatleri gibi günün insan temelli saatini temsil etmek için kullanışlıdır.

java.time.LocalDateTime: Saat dilimi olmadan hem tarih hem de saati işler. LocalDate ile LocalTime'ın birleşimidir.

java.time.ZonedDateTime: LocalDateTime sınıfını ZoneId sınıfında verilen bölge bilgileriyle birleştirir. Saat dilimi bilgileriyle birlikte tam bir tarih saat damgasını temsil eder.

java.time.OffsetTime: Zaman dilimi kimliği olmadan, Greenwich/UTC'den karşılık gelen bir zaman dilimi uzaklığıyla zamanı işler.

java.time.OffsetDateTime: Bir saat dilimi kimliği olmadan, Greenwich/UTC'den karşılık gelen bir saat dilimi uzaklığıyla tarih ve saati işler.

java.time.Clock: Herhangi bir zaman dilimindeki mevcut an, tarih ve saate erişim sağlar. Clock sınıfının kullanımı isteğe bağlı olsa da, bu özellik kodunuzu diğer zaman dilimleri için veya zamanın değişmediği sabit bir saat kullanarak test etmemize olanak tanır.

java.time.Instant: Zaman çizelgesinde (EPOCH'tan bu yana) bir nanosaniyenin başlangıcını temsil eder ve makine zamanını temsil edecek bir zaman damgası oluşturmak için kullanışlıdır. Çağın öncesinde meydana gelen bir an negatif bir değere sahiptir ve çağdan sonra meydana gelen bir an ise pozitif bir değere sahiptir.

java.time.Duration : İki an arasındaki fark saniye veya nanosaniye cinsinden ölçülür ve yıl, ay ve gün gibi tarihe dayalı yapılar kullanılmaz, ancak sınıf günlere, saatlere ve dakikalara dönüşen yöntemler sağlar.

java.time.Period: Tarih bazlı değerlerde (yıl, ay, gün) tarihler arasındaki farkı tanımlamak için kullanılır.

java.time.ZoneId: Bir saat dilimi tanımlayıcısını belirtir ve Instant ile LocalDateTime arasında dönüştürme yapmak için kurallar sağlar.

java.time.ZoneOffset: Greenwich/UTC saatinden bir saat dilimi farkını tanımlar.

java.time.format.DateTimeFormatter: Önceden tanımlanmış çeşitli formatlayıcılarla birlikte gelir veya kendimizinkini tanımlayabiliriz. Tarih saat değerlerini ayrıştırmak ve biçimlendirmek için parse() veya format() yöntemine sahiptir.