Skip to main content

🗓️ Java Tarih Formatlama Rehberi: SimpleDateFormat ve DateFormat Kullanımı

Java’da tarih ve saat işlemleri, kullanıcıya uygun biçimde veri sunmak için kritik öneme sahiptir.
Bu rehberde DateFormat ve SimpleDateFormat sınıflarını detaylıca öğrenecek, farklı bölgesel ayarlarda (Locale) tarih/saat formatlamayı adım adım göreceksiniz.


💡 Bu Rehberde Ne Öğreneceksiniz

  • DateFormat ve SimpleDateFormat arasındaki fark
  • Özel tarih/saat kalıpları (patterns) oluşturma
  • Bölgesel (Locale) formatlama örnekleri
  • format() ve parse() metotlarının kullanımı
  • Thread-safety uyarıları ve modern java.time alternatifi

🧠 Aşama 1 – Konunun Temeli

Ana teknik konu: Java’da tarih/saat biçimlendirme (formatting) ve çözümleme (parsing).
Çözdüğü problem: Date nesnelerini istenen formata dönüştürür veya metin formatındaki tarihleri Date nesnesine çevirir.
Teknik özet: Bu API, Locale farklarını yönetir, tarihi kullanıcıya uygun biçimde gösterir. Ancak thread-safe değildir.


📅 1. DateFormat ile Bölgesel Formatlama

DateFormat, belirtilen Locale (bölgesel ayar) değerine göre tarihleri biçimlendirir.
Örneğin ABD’de tarih 12/31/2025 iken, Türkiye’de 31.12.2025 olarak görünür.

🔧 Örnek: Tarih Formatlama

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

Locale yerelAyar = new Locale.Builder().setLanguage("tr").setRegion("TR").build();
DateFormat tarihFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, yerelAyar);
String tarih = tarihFormat.format(new Date());
System.out.println(tarih);

💬 Bu kod, Türkiye yerel ayarına göre tarih formatlar.

Çıktı: 26 Eki 2025

⏰ Örnek: Sadece Zaman Formatlama


DateFormat zamanFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT, yerelAyar);
String zaman = zamanFormat.format(new Date());
System.out.println(zaman);

💬 Zamanı bölgesel formata göre gösterir.

Çıktı: 22:53:01


📝 2. SimpleDateFormat ile Özel Kalıplar

SimpleDateFormat, DateFormat’tan farklı olarak özelleştirilmiş format kalıpları (pattern) tanımlamanıza izin verir.


import java.text.SimpleDateFormat;
import java.util.Date;

String kalip = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(kalip);
String formatlanmisTarih = sdf.format(new Date());
System.out.println(formatlanmisTarih);

💬 Tarihi yyyy-MM-dd HH:mm:ss biçiminde yazar.

Çıktı: 2025-10-26 22:53:01


📘 Kalıp Söz Dizimi (Pattern Syntax)

Aşağıdaki tablo, tarih/saat biçimlendirmede kullanılan en yaygın harfleri özetler 👇

Kalıp HarfiAçıklamaÖrnek Çıktı
yYıl (4 haneli: yyyy)2025
MAy (Sayı: MM, Kısaltma: MMM, Tam: MMMM)10 / Eki / Ekim
dAyın günü26
EHaftanın günüPaz
HGünün saati (0-23)22
mDakika53
sSaniye01
zSaat dilimiGMT+03:00
aAM/PM göstergesiÖS
ZRFC saat farkı+0300
XISO saat farkı+03:00

🧩 3. Tarihi Metne Dönüştürme (format)

format() metodu, Date nesnesini tanımlanan kalıba göre String olarak döndürür.


String kalip = "dd MMMM yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(kalip);
String tarih = sdf.format(new Date());
System.out.println(tarih);

💬 Tarihi “gün ay yıl” biçiminde döndürür.

Çıktı: 26 Ekim 2025


🔄 4. Metni Tarihe Çevirme (parse)

parse() metodu, metin (String) halindeki tarihi bir Date nesnesine dönüştürür. Kalıp, metinle birebir eşleşmelidir.


String kalip = "MM-dd-yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(kalip);
String tarihMetni = "12-01-2025";

try {
Date tarihNesnesi = sdf.parse(tarihMetni);
System.out.println(tarihNesnesi);
} catch (Exception e) {
e.printStackTrace();
}

💬 Tarih string’ini “12-01-2025” olarak parse eder.

Çıktı: Mon Dec 01 00:00:00 TRT 2025


🌍 5. Locale (Dil/Bölge) ile Formatlama


String kalip = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
SimpleDateFormat sdf = new SimpleDateFormat(kalip, new Locale("fr", "FR"));
String tarih = sdf.format(new Date());
System.out.println(tarih);

💬 Fransızca tarih biçimlendirmesi örneği.

Çıktı: mardi janvier 2025 14:51:02.354+0300


⚠️ Thread-Safety Uyarısı

Hem DateFormat hem de SimpleDateFormat sınıfları thread-safe değildir. Çok iş parçacıklı uygulamalarda, her thread için ayrı bir örnek oluşturmanız gerekir.


🧭 6. Modern Alternatif: java.time API

Java 8 ve sonrası için java.time paketi (LocalDate, LocalDateTime, DateTimeFormatter) önerilir. Bu yapı thread-safe, modern ve performanslıdır.


import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

LocalDateTime simdi = LocalDateTime.now();
DateTimeFormatter format = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
System.out.println(simdi.format(format));

💬 Yeni API ile güvenli tarih formatlama.

Çıktı: 26-10-2025 22:53:01


❓ Sıkça Sorulan Sorular (SSS)

  1. SimpleDateFormat neden thread-safe değildir?

İçinde paylaşılan Calendar nesnesi vardır. Çoklu erişimde veri çakışması yaşanır.

  1. yyyy-MM-dd formatında tarih nasıl alınır?

new SimpleDateFormat("yyyy-MM-dd").format(new Date());

  1. MM ve mm farkı nedir?

MM → Ay, mm → Dakika. Büyük/küçük harf farkı önemlidir.

  1. Tarihi DD MM YYYY’den MM DD YYYY’e çevirmek için ne yapmalıyım?

Önce parse() ile mevcut metni oku, ardından format() ile yeni kalıba çevir.

  1. Hangi sınıf modern Java’da önerilir?

java.time.format.DateTimeFormatter → thread-safe, modern ve kolay okunabilir.


🧾 Sonuç

SimpleDateFormat ve DateFormat, Java'nın klasik tarih formatlama araçlarıdır. Ancak yeni projelerde, java.time API’si tercih edilmelidir. Bu sayede hem hatasız hem de çoklu iş parçacıklı ortamlarda güvenli sonuçlar elde edilir.

💡 Rabisu Bulut üzerinde Java uygulamalarınızı çalıştırarak bu örnekleri anında test edebilirsiniz. Modern tarih işlemlerini Rabisu altyapısında deneyin, farkı hissedin 🚀