Python datetime ile tarih ve saat kullanımı, tarih ve saati tek bir nesnede temsil eden datetime sınıfıyla başlar; date ise yalnızca yıl, ay ve gün bilgisini taşır. Metni nesneye dönüştürmek için strptime, nesneyi ekranda gösterilecek metne dönüştürmek için strftime kullanılır.
Tarih üzerinde hesap yapmak için önce metni datetime nesnesine dönüştür; yalnızca ekranda göstereceğin zamanı biçimlendir. Sabit tarih oluşturma, çalıştırma anını okuma ve sonucu biçimlendirme örnekleri bu ayrımı somutlaştırır.
datetime ve date ile tarih ve saat nasıl oluşturulur?
Python'da datetime adı hem modül için hem de modülün içindeki sınıf için kullanılır. Bu nedenle from datetime import datetime, date yazdığında modülden iki sınıfı alırsın: tarih ve saati birlikte tutan datetime ile yalnızca tarihi temsil eden date. datetime nesnesinde year, month, day, hour ve minute gibi alanlara erişebilirsin. date nesnesinde ise year, month ve day alanları bulunur.
from datetime import datetime, date
ders_zamani = datetime(2025, 4, 18, 16, 45)
teslim_gunu = date(2025, 4, 25)
print(ders_zamani.year, ders_zamani.month, ders_zamani.day)
print(ders_zamani.hour, ders_zamani.minute)
print(teslim_gunu.year, teslim_gunu.month, teslim_gunu.day)
Bu kodun çıktısı sırasıyla 2025 4 18, 16 45 ve 2025 4 25 olur. Oluşturucularda temel sıra yıl, ay ve gündür. datetime için bu değerlere saat ve dakika eklenir. Bir dersin başlangıç saati, toplantı kaydı veya işlem zamanı için datetime; yalnızca takvimdeki teslim günü gibi saat gerektirmeyen bilgiler için date daha yalın bir seçimdir.
Çalıştırma anındaki yerel tarih ve saati almak için datetime.now() kullanılır. Bu çağrı bir datetime nesnesi döndürür ve sonucu programın çalıştırıldığı ana göre değişir; dolayısıyla sabit bir güncel çıktı beklenmez. Bir datetime nesnesinin yalnızca tarih bölümünü almak için .date() çağrılabilir. Bu çağrı, aynı yıl, ay ve gün değerlerini taşıyan bir date nesnesi üretir.
from datetime import datetime
su_an = datetime.now()
print(su_an)
print(su_an.date())
İlk print çağrısı tarih ve saat bilgisini, ikinci çağrı ise aynı nesnenin yalnızca tarih kısmını gösterir. Temel Python sözdizimini tazelemek için ücretsiz Sıfırdan Temel Python video eğitimini takip edebilirsin.
strptime ve strftime arasındaki fark nedir?

strptime ve strftime ters yönlerde çalışır. strptime, verilen kalıba uyan bir metni datetime nesnesine çevirir. strftime ise bir datetime veya date nesnesinden, seçtiğin biçime göre yeni bir metin üretir. Kısaca ilki veri girişini anlamlandırır, ikincisi sonucu sunuma hazırlar.
from datetime import datetime
metin = "18.04.2025 16:45"
zaman = datetime.strptime(metin, "%d.%m.%Y %H:%M")
gosterim = zaman.strftime("%Y-%m-%d %H:%M")
print(zaman)
print(gosterim)
Beklenen çıktı şöyledir:
2025-04-18 16:45:00
2025-04-18 16:45
Burada %d gün, %m ay, %Y yıl, %H 24 saatlik saat ve %M dakika bilgisini belirtir. strptime kalıbındaki nokta ve boşluk, alınan metindeki ayraçlarla aynı sırada olmalıdır. İlk kalıp, girilen metnin nasıl okunacağını; ikinci kalıp ise aynı zamanın ekranda nasıl görüneceğini söyler. Örnekte önce metin datetime nesnesine çevrilmiş, ardından bu nesne strftime ile farklı bir gösterime dönüştürülmüştür.
Metin mi, datetime mı? Karar çerçevesi
| Aşama | Eldeki değer | Kullanılacak işlem | Sonuç |
|---|---|---|---|
| Metin alma | "18.04.2025 16:45" | datetime.strptime() | datetime nesnesi |
| Hesaplama | datetime nesnesi | Tarih ve saat işlemlerini nesne üzerinde yap | İşlenebilir zaman değeri |
| Karşılaştırma | datetime veya aynı türden date nesneleri | <, > veya == ile karşılaştır | True veya False |
| Sunum | datetime nesnesi | strftime() | Biçimlendirilmiş metin |
timedelta ile tarih farkı nasıl hesaplanır?

Aynı türdeki iki date nesnesini veya tarih ve saat bilgisi taşıyan iki datetime nesnesini birbirinden çıkardığında Python, aradaki süreyi temsil eden bir timedelta değeri üretir. Sonuç doğrudan bir sayı değildir. Gün cinsinden farkı okumak için .days alanını kullanabilirsin.
from datetime import date, timedelta
referans = date(2025, 4, 10)
teslim = date(2025, 4, 15)
fark = teslim - referans
print(fark.days)
yedi_gun_sonra = referans + timedelta(days=7)
print(yedi_gun_sonra)
Beklenen çıktı şöyledir:
5
2025-04-17
teslim - referans işlemi beş günlük bir timedelta oluşturur. timedelta(days=7) ise referans tarihe yedi gün ekleyerek yeni bir tarih üretir.
- Pozitif fark: Teslim tarihi referans tarihten ileridedir. Sonuç, teslim tarihine kalan gün sayısı olarak yorumlanabilir.
- Sıfır fark: İki tarih aynıdır. Teslim tarihi referans günle aynı olduğu için sonuç bugün şeklinde gösterilebilir.
- Negatif fark: Teslim tarihi referans tarihten geridedir. Negatif değerin mutlak değeri, teslim tarihinin kaç gün geçtiğini gösterir.
input ile ödev teslim tarihi nasıl güvenli işlenir?
input ile alınan değer metin türündedir. Bu metni doğrudan karşılaştırmak yerine önce strptime ile GG.AA.YYYY biçiminden tarihe dönüştürmek, ardından tarih farkını hesaplamak gerekir. Biçim eşleşmezse veya takvimde bulunmayan bir tarih girilirse ValueError oluşabileceği için dönüşümü try/except bloğu içinde yapmak uygundur.
Aşağıdaki kodda 10 Nisan 2025, güncel tarih olarak değil, aynı örneği tekrar tekrar test etmeyi sağlayan sabit bir referans tarihi olarak kullanılmıştır.
from datetime import datetime
referans = datetime(2025, 4, 10).date()
girdi = input("Teslim tarihini GG.AA.YYYY biçiminde yaz: ").strip()
try:
teslim = datetime.strptime(girdi, "%d.%m.%Y").date()
fark = (teslim - referans).days
if fark > 0:
print(f"Teslime {fark} gün kaldı")
elif fark == 0:
print("Teslim bugün")
else:
print(f"Teslim tarihi {-fark} gün geçti")
except ValueError:
print("Geçersiz tarih. GG.AA.YYYY biçiminde, geçerli bir tarih gir.")
Örnek girişlerin beklenen çıktıları
15.04.2025girilirse referans tarihten beş gün sonrası olduğu içinTeslime 5 gün kaldıyazdırılır.10.04.2025girilirse iki tarih aynı olduğu içinTeslim bugünyazdırılır.08.04.2025girilirse teslim tarihi iki gün önce olduğu içinTeslim tarihi 2 gün geçtiyazdırılır.15/04/2025girilirse nokta yerine eğik çizgi kullanıldığı içinValueErroryakalanır ve geçersiz tarih mesajı gösterilir.31.02.2025girilirse gün, şubat ayının takvim aralığında olmadığı için aynı hata mesajı gösterilir.
Gerçek bir uygulamada sabit referans yerine referans = datetime.now().date() kullanılabilir. Bu durumda kalan gün sayısı, programın çalıştırıldığı ana göre değişir; bu nedenle aynı teslim tarihi farklı zamanlarda farklı bir sonuç verebilir.
Tarih ve saat kodu için hangi kontrol sırası kullanılmalı?
Tarih ve saat kodunu denetlerken girdiyi metin olarak al, geçerli bir nesneye dönüştür, hesabı bu nesne üzerinde yap ve biçimlendirmeyi en sona bırak. Bu sıra, ayrıştırma, hesaplama ve gösterim görevlerinin birbirine karışmasını önler.
- Kontrol: Girdiyi önce metin olarak al. | Olası sorun: Tarih metinlerini doğrudan karşılaştırmak, takvim sırası yerine karakter sırasını kullanır. | Düzeltme: Karşılaştırmadan önce metinleri
datetimenesnelerine dönüştür. - Kontrol: Beklenen biçimi açıkça belirle. | Olası sorun: Girdi
gün/ay/yıldüzenindeyken farklı bir kalıp kullanmak dönüşümü başarısız kılar. | Düzeltme: Girdi ile%d/%m/%Ygibi biçim kalıbını eşleştir. - Kontrol: Dönüşümü
trybloğunda yap. | Olası sorun: Metnistrftimeile ayrıştırmaya çalışmak veya bütün hatalarıExceptionile yakalamak sorunun kaynağını belirsizleştirir. | Düzeltme: Ayrıştırmadastrptimekullan ve biçim uyuşmazlığında oluşanValueErrorhatasını yakala. - Kontrol: İşlemdeki türleri eşleştir. | Olası sorun:
dateiledatetimedeğerlerini gelişigüzel karşılaştırmak veya birbirinden çıkarmakTypeErroroluşturabilir. | Düzeltme: İki tarafı da aynı türe dönüştür. - Kontrol: Hesaplamayı nesneler üzerinde yap. | Olası sorun: Doğrulanmamış metinle tarih farkı hesaplanamaz. | Düzeltme: Dönüşüm başarıyla tamamlandıktan sonra çıkarma ve karşılaştırma işlemlerine geç.
- Kontrol: Sonucu koşullarla yorumla. | Olası sorun: Negatif, sıfır veya pozitif farkın anlamı açıklanmaz. | Düzeltme: Teslim tarihinin geçtiğini, bugün olduğunu veya ileride bulunduğunu ayrı koşullarla değerlendir.
- Kontrol: Biçimlendirmeyi sunuma bırak. | Olası sorun: Hesaplamadan önce
strftimekullanmak nesneyi yeniden metne çevirir. | Düzeltme: Sonuç ekranda gösterileceği zaman biçimlendir.
Bu kontrol sırasını yönlendirmeli pratiklerle geliştirmek isteyen Ortaokul, Lise ve Üniversite öğrencileri, birebir Python Özel Ders programını inceleyebilir. Kişiye özel ödevler ve soru bankaları, konuları farklı uygulamalarla pekiştirmeyi destekler.
Kısacası, tarihi önce doğrula ve nesneye dönüştür, hesabı nesnelerle yap, metne dönüşü en sona bırak.