Java 7 ve öncesinde Date ile ilgili işlemlere yardımcı olan sınıflar "java.util" paketi altındadır. Özellikle, Date sınıfı tarih ve zamanı ifade eden nesneler oluşturulmasını sağlar.
Date sınıfının iki tane kurucu metodu vardır.
Date now = new Date();
Date userDefinedDate = new Date(102938102222);
Yukarıdaki boş kurucuyu çağırıp bir Date nesnesi oluşturursanız şimdiki zamanı size verecektir.
İçine milisaniye cinsinden değer alan diğer kurucu ile nesne oluşturursanız. Bu durumda sizin belirtmiş olduğunuz zamanı işaret edecektir. 1 Ocak 1970 tarihinden günümüze kadar tarihleri mili saniye cinsinde belirtebiliriz.
"boolean after(Date date)" fonksiyonu kendisine gönderilen zaman bilgisi ile mevcuttaki zaman bilgisi kendisinden sonraki bir tarih ise true döndürür.
Date c = new Date(209830121131L);
boolean result =c.after(new Date());
"boolean before(Date date)" fonksiyonu after gibi çalışır. Verilen zaman bilgisi mevcut zaman bilgisinden önce ise true döndürür.
"int compareTo(Date date)" fonksiyonu ile iki zaman bilgisi kıyaslanır. Eğer birbirine eşitse sıfır döner. Eğer, gönderilen zaman bilgisi mevcuttaki zaman bilgisinden sonra ise pozitif değer döndürür. Eğer, gönderilen zaman bilgisi önce ise negatif döndürür.
"long getTime()" fonksiyonu ile Date sınıfına ait nesneden tuttuğu zaman bilgisi milisaniye cinsinden alınır.
"void setTime(long time)" fonksiyonu ile istediğimiz zaman bilgisini set edebiliriz. Fonksiyona gönderilecek değer milisaniye cinsinden olmalıdır.
// Date nesnesi oluştur
Date date = new Date();
// Zaman ve tarih bilgisini toString metoduyla göster.
System.out.println(date.toString());
Çıktı:
Thu Mar 05 22:16:09 EET 2020
Java'da tarih ve zaman bilgisini formatlanması ve yazıdan Date tipinde bir nesne dönüştürülmesi işini "SimpleDateFormat" sınıfı yapmaktadır.
SimpleDateFormat formatter = new SimpleDateFormat ("yyyy.MM.dd");
System.out.println("Current Date: " + formatter.format(date));
Çıktı:
Current Date: 2020.03.05
Elimizde "2020-02-10" şeklinde yıl-ay-gün şeklinde String tipinde bir veri olsun. Bunu Date tipinde bir nesneye çevirmek için "SimpleDateFormat" sınıfına ait "parse" metodunu kullanmamız gerekecektir.
SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd");
String dateAstext = "2020-02-10";
Date parsedDate = formatter.parse(dateAstext);
System.out.println("Parsed Date: " + parsedDate.toString());
Java 8 ile birlikte tarih ve zaman bilgisini işleyen yapılar ve sınıflar değiştirildi. Daha esnek ve kullanımı kolay fonksiyonlar ve sınıflar haline dönüştü.
İlgili tüm sınıflar "java.time" paketi altında toplandı.
Java8'in yeni Date/Time kütüphanesi aşağıdaki özelliklere sahiptir.
- Thread Safety özelliğini varsayılan olarak sağlar. Yani multi thread yazılımlar geliştirirken Date ve Time ilgili nesneler için ekstra önlemler almanıza gerek kalmaz. Veri tutarlılığını garanti eder.
- Kullanımı çok basittir.
- Dünya üzerindeki zaman farkı hesaplamaları için yazılımcının ekstra çözümler üretmesine gerek bırakmadan kendisi bu sorunu çözer.
LocalDate localDate = LocalDate.now();
System.out.println(localDate.toString());
Yukarıdaki gibi LocalDate sınıfından bir nesne ile günümüz tarihini kolayca alıp ekrana yazdırabilirsiniz.
LocalDate currentDate = LocalDate.of(2020, 03,12);
System.out.println(currentDate.toString());
Yukarıdaki örnekte de yıl, ay ve gün bilgilerini "int" tipinde ayrı ayrı geçerek belirli bir tarih atayabilirsiniz.
LocalDate definedDate = LocalDate.parse("2015-02-20");
System.out.println(definedDate.toString());
Yukarıdaki örnekte de String tipindeki tarih bilgisini parse ederek, LocalDate tipinde bir nesneye çevirip ekrana yazdırıyoruz.
LocalDate tomorrow = LocalDate.now().plusDays(1);
Yukarıdaki örnekte mevcut tarih üzerine 1 gün ekleme yapılmıştır. Görüldüğü gibi bu işlem tek satırda basitçe yapılabilmektedir.
LocalDate previousMonthSameDay = LocalDate.now().minus(1, ChronoUnit.MONTHS);
"minus" fonksiyonu ile 1 ay önceki bugünkü tarihi alabiliriz. ChronoUnit.MONTHS aylık bir çıkarma yapılacağını belirtiyor. Gün, Ay, Yıl gibi değerler seçersek o miktarda bir çıkarma işlemi uygulayacaktır.
DayOfWeek sunday = LocalDate.parse("2016-06-12").getDayOfWeek();
System.out.println(sunday);
Haftanın gününü basitçe "getDayOfWeek" metoduyla alabiliriz.
boolean leapYear = LocalDate.now().isLeapYear();
Yeni Date/Time kütüphanesi artık yıl olup olmadığını da kolayca söylüyor.
LocalTime sınıfı ise daha saat bazında zamansal işlemler içindir.
LocalTime now = LocalTime.now();
System.out.println(now);
Şimdiki zamanı saat bazında alabilirsiniz.
Çıktı: 22:54:12.997
LocalTime sixThirty = LocalTime.parse("06:30");
String şeklindeki saat bilgisini parse metoduyla LocalTime nesnesine çevirebiliriz.
// 1 saat eklemek. 7:30 olacaktır.
LocalTime sevenThirty = LocalTime.parse("06:30").plus(1, ChronoUnit.HOURS);
// saat bilgisini almak. 6 cevabı gelecektir.
int six = LocalTime.parse("06:30").getHour();