İçeriğe geç

Menü

Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Python datetime ile Tarih ve Saat Nasıl Kullanılır?

python-datetime-ile-tarih-ve-saat-nasil-kullanilir
Bu yazıda neler var?
  1. datetime ve date ile tarih ve saat nasıl oluşturulur?
  2. strptime ve strftime arasındaki fark nedir?
  3. timedelta ile tarih farkı nasıl hesaplanır?
  4. input ile ödev teslim tarihi nasıl güvenli işlenir?
  5. Tarih ve saat kodu için hangi kontrol sırası kullanılmalı?

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 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şamaEldeki değerKullanılacak işlemSonuç
Metin alma"18.04.2025 16:45"datetime.strptime()datetime nesnesi
Hesaplamadatetime nesnesiTarih ve saat işlemlerini nesne üzerinde yapİşlenebilir zaman değeri
Karşılaştırmadatetime veya aynı türden date nesneleri<, > veya == ile karşılaştırTrue veya False
Sunumdatetime nesnesistrftime()Biçimlendirilmiş metin

timedelta ile tarih farkı nasıl hesaplanır?

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.2025 girilirse referans tarihten beş gün sonrası olduğu için Teslime 5 gün kaldı yazdırılır.
  • 10.04.2025 girilirse iki tarih aynı olduğu için Teslim bugün yazdırılır.
  • 08.04.2025 girilirse teslim tarihi iki gün önce olduğu için Teslim tarihi 2 gün geçti yazdırılır.
  • 15/04/2025 girilirse nokta yerine eğik çizgi kullanıldığı için ValueError yakalanır ve geçersiz tarih mesajı gösterilir.
  • 31.02.2025 girilirse 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.

  1. 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 datetime nesnelerine dönüştür.
  2. Kontrol: Beklenen biçimi açıkça belirle. | Olası sorun: Girdi gün/ay/yıl düzenindeyken farklı bir kalıp kullanmak dönüşümü başarısız kılar. | Düzeltme: Girdi ile %d/%m/%Y gibi biçim kalıbını eşleştir.
  3. Kontrol: Dönüşümü try bloğunda yap. | Olası sorun: Metni strftime ile ayrıştırmaya çalışmak veya bütün hataları Exception ile yakalamak sorunun kaynağını belirsizleştirir. | Düzeltme: Ayrıştırmada strptime kullan ve biçim uyuşmazlığında oluşan ValueError hatasını yakala.
  4. Kontrol: İşlemdeki türleri eşleştir. | Olası sorun: date ile datetime değerlerini gelişigüzel karşılaştırmak veya birbirinden çıkarmak TypeError oluşturabilir. | Düzeltme: İki tarafı da aynı türe dönüştür.
  5. 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ç.
  6. 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.
  7. Kontrol: Biçimlendirmeyi sunuma bırak. | Olası sorun: Hesaplamadan önce strftime kullanmak 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.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara