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.
- java.time.LocalDate sınıfı
- java.time.LocalTime sınıfı
- java.time.LocalDateTime sınıfı
- java.time.MonthDay sınıfı
- java.time.OffsetTime sınıfı
- java.time.OffsetDateTime sınıfı
- java.time.Clock sınıfı
- java.time.ZonedDateTime sınıfı
- java.time.ZoneId sınıfı
- java.time.ZoneOffset sınıfı
- java.time.Year sınıfı
- java.time.YearMonth sınıfı
- java.time.Period sınıfı
- java.time.Duration sınıfı
- java.time.Instant sınıfı
- java.time.DayOfWeek numaralandırma
- java.time.Month numaralandırması
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.
- java.util.Date sınıfı
- java.sql.Date sınıfı
- java.util.Calendar sınıfı
- java.util.GregorianCalendar sınıfı
- java.util.TimeZone sınıfı
- java.sql.Time sınıfı
- java.sql.Timestamp sınıfı
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ı
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.