Java Date, Calendar ve Locale Sınıfları (Kapsamlı Rehber)
Java'da eski tarih/saat işlemleri için java.util.Date ve java.util.Calendar sınıfları kullanılır. Tarihleri bölgesel formatlara (Örn: dd/MM/yyyy) çevirmek için DateFormat, para ve sayı biçimleri için ise NumberFormat tercih edilir. java.util.Locale ise uygulamanın dil ve ülke ayarlarını tutarak yerelleştirme (Localization) sürecinin merkezinde yer alır.
Bu yazıda Java ile tarih, sayı ve para birimi sınıflarını detaylı bir şekilde inceliyoruz. Farklı ülkelere göre tarih formatlamak, para birimlerini yerel ayara göre göstermek ve çok dilli (Multi-language) uygulamalar geliştirmek istiyorsanız java.text ve java.util paketlerindeki temel sınıfları çok iyi bilmeniz gerekir.
Java ekosistemiyle ilgili diğer modern teknolojiler için En İyi Java Frameworkleri rehberimize de göz atabilirsiniz.
1. java.util.Date
Date sınıfı, Java'nın en temel ve en eski tarih-saat sınıflarından biridir. Zamanı 1 Ocak 1970'ten (Epoch) itibaren geçen milisaniye cinsinden tutar. Bugün birçok metodu (Örn: getYear(), getMonth()) deprecated (kullanımdan kalkmış) kabul edilse de, eski projelerde (legacy code) ve Calendar ile DateFormat arasında veri transferi yapılırken hâlâ yoğun olarak karşınıza çıkar.
Date now = new Date();
System.out.println(now); // Çıktı: Fri Aug 14 11:30:00 TRT 2026
2. java.util.Calendar
Calendar sınıfı, karmaşık tarih hesaplamalarını inanılmaz derecede kolaylaştırır. Bir tarihe gün ekleme, ay değiştirme veya haftanın gününü bulma gibi işlemler için kullanılır. Soyut (abstract) bir sınıf olduğu için doğrudan new anahtar kelimesiyle oluşturulmaz; bunun yerine getInstance() tasarım kalıbı (design pattern) ile elde edilir.
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, 5); // Mevcut güne 5 gün ekler
3. java.text.DateFormat
DateFormat, tarihleri farklı ülke, dil ve bölgelere göre biçimlendirmek (formatting) ve metinleri tarihe çevirmek (parsing) için kullanılır. Aynı tarih objesi, farklı Locale ayarlarında bambaşka şekilde ekrana basılabilir.
// Örnek Format Çıktıları:
// 14.08.2026 11:30 (TR)
// Aug 14, 2026 (EN-US)
// 14 Ağustos 2026 Cuma
Çok dilli ve uluslararası (I18N) uygulamalarda kullanıcıya doğru tarihi göstermek için bu sınıf şarttır.
4. java.text.NumberFormat
NumberFormat, sayısal değerleri, ondalık formatları ve para birimlerini (Currency) yerel ayara göre formatlar. Aynı sayının Türkiye, ABD veya Almanya için binlik ayracı ve ondalık işareti farklıdır.
// 12345.67 sayısının formatlanmış halleri:
// 12.345,67 (Türkiye / Almanya)
// 12,345.67 (ABD / İngiltere)
// $12,345.67 (ABD Para Birimi)
// 12.345,67 ₺ (TR Para Birimi)
Finansal uygulamalar, e-ticaret siteleri ve raporlama ekranlarında NumberFormat kullanmak kritik bir zorunluluktur.
5. java.util.Locale
Locale sınıfı, belirli bir coğrafi, politik veya kültürel bölgeyi temsil eden dil ve ülke bilgisini tutar. Yerelleştirme işlemlerinin tam merkezinde yer alır ve yukarıda bahsettiğimiz tüm formatlama (DateFormat, NumberFormat) sınıflarıyla birlikte çalışarak onların nasıl davranacağını belirler.
Locale usLocale = new Locale("en", "US"); // İngilizce, ABD
Locale trLocale = new Locale("tr", "TR"); // Türkçe, Türkiye
6. Kullanım Şekline Göre Java Tarih ve Sayı Sınıfları
Aşağıdaki özet tablo, en sık karşılaşılan tarih ve sayı senaryolarında hangi sınıfın nasıl kullanılacağını gösteren bir kopya kâğıdı (cheat sheet) niteliğindedir.
| Senaryo / İhtiyaç | Java Kod Örneği |
|---|---|
| Geçerli tarih ve saati alma |
Date d = new Date();String s = d.toString();
|
| Tarih hesaplaması (Gün/Ay Ekleme) |
Calendar c = Calendar.getInstance();c.add(Calendar.DATE, 1);
|
| Farklı yerel ayarda (Locale) tarih hesaplama |
Locale loc = new Locale("en", "GB");Calendar c = Calendar.getInstance(loc);
|
| Farklı stillerle tarihi String'e formatlama |
Date d = Calendar.getInstance().getTime();DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);String dateStr = df.format(d);
|
| Sayısal veya parasal değerleri yerel formata çevirme |
NumberFormat nf = NumberFormat.getCurrencyInstance(locale);String moneyStr = nf.format(1500.50);
|
7. Modern Java (java.time API) Notu
LocalDate, LocalTime, LocalDateTime, DateTimeFormatter) tanıtılmıştır.
Eski projelerde (Java 7 ve öncesi) Date, Calendar ve DateFormat sınıfları mecburen kullanılırdı. Ancak sıfırdan geliştirdiğiniz güncel Java/Spring Boot projelerinde tarih-saat işlemleri için kesinlikle java.time API kullanmalısınız. Yine de legacy sistemleri okumak, bakım yapmak veya mülakatlarda sorulan Java temellerini bilmek için bu klasik sınıfları öğrenmek zorunludur.
Sonuç
Bu yazıda Java'nın klasik tarih, saat ve sayı sınıflarını kapsamlı bir şekilde inceledik. Artık Date, Calendar, DateFormat, NumberFormat ve Locale sınıflarının ne işe yaradığını ve birbirleriyle nasıl entegre çalıştıklarını çok daha net biliyorsunuz. Bu mimariyi anlayarak uygulamalarınıza kusursuz bir yerelleştirme (Localization) desteği ekleyebilirsiniz. İyi kodlamalar!