İki Temel Tip: date ve datetime
datetime modülü sana bilmeye değer dört şey verir: date, time, datetime ve timedelta. İlk üçü kulağa geldiği gibidir; dördüncüsü bir zaman aralığıdır.
Bir date, saat bilgisi olmadan bir günü — yıl, ay, gün — temsil eder. Bir datetime, bir tarih artı bir saattir. Saate ihtiyacın yoksa date daha temiz bir tercihtir.
Belirli Tarihler Oluşturmak
Doğrudan inşa et:
Argümanlar date için year, month, day, datetime için year, month, day, hour, minute, second, microsecond'a kadar uzanır.
Alanları Okumak
Her date/datetime'ın öznitelikleri vardır:
isoformat(), makine okunabilir çıktı için dostundur — diğer sistemlerin net ayrıştırabileceği "2026-04-20T09:30:15" gibi bir şey üretir.
strftime ile Biçimlendirme
İnsan okunabilir çıktı için .strftime(fmt), bir date ya da datetime'ı biçimlendirilmiş bir string'e çevirir:
Hatırlamaya en çok değen format kodları:
%Y— 4 basamaklı yıl (2026)%m— ay numarası, sıfır dolgulu (04)%d— ayın günü, sıfır dolgulu (20)%H/%I— saat, 24/12 saat formatı%M— dakika%S— saniye%A/%a— haftanın günü adı tam / kısaltılmış (Monday / Mon)%B/%b— ay adı tam / kısaltılmış (April / Apr)%p— AM/PM
Ezberlemene gerek yok; bir referansı yer imlerine ekle ve ihtiyacın olduğunda bak.
strptime ile Ayrıştırmak
Ters yön: şekli bilinen bir string'i al ve onu bir datetime'a çevir:
Format string'i girdiyle tam olarak eşleşmek zorundadır. Eşleşmezse strptime ValueError fırlatır.
ISO-8601 string'leri (makine okunabilir standart) için modern Python'da daha basit bir kısayol var:
Rastgele formatlarla uğraşıyorsan, harici dateutil paketinin (pip install python-dateutil) makul bir tahminde bulunan esnek bir parser.parse()'ı var.
timedelta ile Aritmetik
Tarihlerde matematik yapmak için fark ya da kayma olarak timedelta kullan:
timedelta argümanları: days, seconds, microseconds, milliseconds, minutes, hours, weeks. months ya da years yok — aylar değişken uzunluktadır. Ay/yıl hesapları için dateutil.relativedelta kullan:
from dateutil.relativedelta import relativedelta
from datetime import date
today = date.today()
next_quarter = today + relativedelta(months=3)
print(next_quarter)
Saat Dilimleri: Naive ve Aware
Saat dilimi bilgisi olmayan bir datetime naive'dir — Python hangi saat dilimini temsil ettiğini bilmez. Tek bir mantıksal saat diliminde kaldığın sürece naive datetime'larda zaman hesabı yapmak sorun değil; dert, farklı saat dilimlerinden veri buluştuğu anda başlar.
Aware bir datetime, saat dilimi bilgisini beraberinde taşır. Bir saat dilimini açıkça iliştir:
Python 3.9, adlandırılmış saat dilimleri için zoneinfo modülünü ekledi (sistemin IANA veritabanını kullanarak):
Saat dilimleri arasında .astimezone() ile dönüştür:
Ezberlemeye değer bir kural: datetime'ları UTC'de sakla, yerel saat dilimlerine yalnızca gösterim anında dönüştür. Bu tek alışkanlık saat dilimi hatalarının çoğunu önler.
Timestamp'ler
Bir Unix timestamp'i, 1970-01-01 UTC'den bu yana geçen saniye sayısıdır. Python kolayca dönüştürür:
Timestamp'ler karşılaştırmalar, sıralama ve diğer sistemlerle uyumluluk için kullanışlıdır. İnsan okuyacak çıktı için önce tekrar datetime'a dönüştür.
Bir Şeyin Ne Kadar Sürdüğünü Ölçmek
Hızlı zamanlamalar için iki datetime'ı çıkar:
Daha ciddi performans ölçümleri için time.perf_counter() kullan — mikrosaniye altı çözünürlüğe sahiptir ve sistem saat değişikliklerinden etkilenmez. "Bu API çağrısı ne kadar sürdü" tarzı sayılar için datetime.now() fena değil.
Tekrar Kullanacağın Kalıplar
Akılda Kalacaklar
date,datetimevetimedeltaihtiyaçların %90'ını karşılar.- Makine okunabilir için ISO-8601, insan okunabilir için
strftime. - UTC'de sakla; gösterim anında dönüştür.
- Adlandırılmış saat dilimleri için
zoneinfokullan. - Ay ve yıllar için
dateutil.relativedelta'ya uzan.
Gerçek dünya takımın için bir araç daha: düzenli ifadeler, sırada.
Sıkça Sorulan Sorular
Python'da şu anki tarihi ve saati nasıl alırım?
datetime.now() mevcut yerel tarihi ve saati döndürür. datetime.utcnow() UTC'yi döndürür (ancak utcnow() naive datetime döndürdüğü için modern tercih datetime.now(timezone.utc)'dir). Sadece tarih için date.today() kullan.
Bir tarihi string olarak nasıl biçimlendiririm?
Yıl-ay-gün için %Y-%m-%d gibi format kodlarıyla .strftime(format) kullan. Örnek: datetime.now().strftime('%Y-%m-%d %H:%M'). String'i geri ayrıştırmak için aynı format kodlarıyla datetime.strptime(text, format) kullan.
Python'da bir tarihe gün nasıl eklerim?
timedelta kullan: from datetime import date, timedelta; date.today() + timedelta(days=7). timedelta gün, saat, dakika, saniye, hafta ve daha fazlasını destekler. Ay ve yıl hesapları için harici dateutil.relativedelta'yı kullan — timedelta ayları bilmez.