Ana içeriğe atla

Python datetime: Python'da Tarihler ve Saatlerle Nasıl Çalışılır

Python’un datetime araçlarıyla çalışmanın farklı yollarını öğrenin; dizeleri ayrıştırmaktan saat dilimi farkında zaman damgalarını yönetmeye kadar her şeyi basitleştirin.
Güncel 3 Eki 2026  · 2 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Tarihler ve saatlerle çalışmak, formatlar, saat dilimleri, yaz saati uygulaması kuralları veya birden çok sistemden gelen zaman damgalarıyla uğraşmaya başlayana kadar basit görünür; bu noktada zamanı ham dizeler veya tamsayılar olarak saklamak bir seçenek olmaktan çıkar. Python’un datetime modülü, tüm bu hareketli parçaları öngörülebilir bir şekilde yönetmenize yardımcı olmak için vardır.

Bu rehber, çekirdek sınıfları, datetime nesnelerinin nasıl oluşturulup kullanılacağını, aritmetik işlemlerin nasıl yapılacağını, değerlerin nasıl biçimlendirileceğini ve ayrıştırılacağını, saat dilimlerinin nasıl ele alınacağını ve daha fazlasını adım adım açıklar. Her bölüm bir öncekine dayanır; böylece temel işlemlerden daha gelişmiş kalıplara ilerleyebilirsiniz.

Python datetime Modülünün Çekirdek Sınıfları

Özele inmeden önce, Python’un tarih ve saati kavramsal düzeyde nasıl modellediğini anlamak faydalıdır. datetime modülü, her biri sorunun bir parçasına odaklanan küçük bir sınıf kümesi kullanır. Her sınıfın nereye oturduğunu bilmek, geri kalan iş akışını çok daha kolay hale getirir.

date

Günün saati veya saat dilimleriyle uğraşmadan yalnızca bir takvim tarihi gerektiğinde, ihtiyacınız olan sınıf date sınıfıdır. Yılı, ayı ve günü tanıdık özniteliklerle temsil eder.

İşte öznitelikler:

  • year

  • month

  • day

Ve yöntemler:

  • today()

  • fromisoformat()

  • replace()

  • isoformat()

  • weekday()

  • isoweekday()

from datetime import date
d = date(2025, 3, 1)
print(d)

Bu kod basit bir takvim tarihi oluşturur. Geçersiz bir kombinasyon girerseniz (örneğin February 30), Python bir ValueError hatası yükseltir.

time

Bazı görevler yalnızca günün saatini önemser; örneğin 14:30’da çalışan bir hatırlatıcı. time sınıfı burada yardımcı olur çünkü saat, dakika, saniye ve (bu örnek için gerekli olmasa da) mikrosaniye veya saat dilimi verisini saklar.

Öznitelikler: hour, minute, second, microsecond, tzinfo

Yöntemler: replace(), isoformat()

from datetime import time
t = time(14, 30, 15)
print(t)

Bu, tarihle ilişkilendirilmemiş bir saat oluşturur. Geçersiz değerler (ör. hour=27) hata üretir.

datetime

Gerçek dünya durumlarının çoğu hem tarihi hem de saati birleştirir ve datetime burada devreye girer. Modüldeki en esnek sınıftır ve günlük kayıt, işleme ve olayların koordinasyonu için en sık kullanacağınız sınıftır.

Öznitelikler (yukarıdakilere ek olarak): tzinfo

Ve yöntemler now(), utcnow(), fromisoformat(), strptime(), strftime(), astimezone() Ayrıca timedelta ile aritmetiği de destekler; bunu daha ayrıntılı ele alacağım.

from datetime import datetime
dt = datetime(2025, 3, 1, 14, 30)
print(dt)

Bu, hem tarih hem saat bileşenlerine sahip eksiksiz bir zaman damgası üretir.

timedelta

Geçen süreyi ölçmeniz veya bir zaman damgasını ileri ya da geri kaydırmanız gerektiğinde, timedelta doğru seçimdir. Belirli bir anı değil, bir süreyi temsil eder.

Öznitelikler: days, seconds, microseconds. Genellikle ofsetler, zaman farkları ve zamanlama mantığı için kullanılır.

from datetime import timedelta
delta = timedelta(days=7, hours=3)
print(delta)

Bu, sabit uzunlukta bir süreyi temsil eder. Özellikle bir datetime ile toplanıp çıkarıldığında kullanışlı hale gelir.

tzinfo

tzinfo, Python’un saat dilimleri için arayüzünü tanımlar. Bunları doğrudan oluşturmazsınız, ancak saat dilimleri eklediğinizde veya dönüştürdüğünüzde datetime sistemi bunları kullanır.

timezone

timezone, UTC veya UTC+1 gibi sabit UTC ofsetleri için yerleşik bir tzinfo uygulamasıdır. Yaz saati kurallarının önemli olmadığı basit durumlarda kullanışlıdır.

Python datetime Nesneleri Oluşturma ve Erişme

Sınıfları öğrendikten sonra sıradaki adım, bunların örneklerini oluşturmayı öğrenmektir. Python, verilerinizin geldiği yere bağlı olarak birkaç yaklaşım sunar: elle giriş, sistem zamanı, zaman damgaları veya metin.

Sınıf kurucularını kullanma

Kurucular, oluşturduğunuz değerlere tam kontrol sağlar. Bu, tarih, saat veya datetime nesneleri oluşturmanın çoğunlukla en açık ve hataya en dayanıklı yoludur.

from datetime import date
d = date(2025, 3, 1)
print(d)

Bu, bir takvim tarihini doğrudan oluşturur. Geçersiz değerler anında hata fırlatarak hataları erken yakalamaya yardımcı olur.

from datetime import time
t = time(14, 30, 15)
print(t)

Bu, günün saati değerini üretir. Tarihe ihtiyaç duymadığınızda bunu kullanın.

from datetime import datetime
dt = datetime(2025, 3, 1, 14, 30)
print(dt)

Bu, tam bir zaman damgası oluşturur. Bir tzinfo bağımsız değişkeni eklemek, onu saat dilimi farkında hale getirir.

Zaman damgalarından oluşturma

Unix zaman damgaları günlüklerde, API’lerde ve işletim sistemlerinde karşınıza çıkar. Python, bunları kolayca insan tarafından okunabilir datetime nesnelerine dönüştürür.

datetime.fromtimestamp(1700000000)
datetime.utcfromtimestamp(1700000000)

İlki zaman damgasını yerel zamanda yorumlar; ikincisi ise UTC’de yorumlar.

Güncel değerler için sınıf yöntemleri

Geçerli tarih veya saate ihtiyacınız olduğunda, Python basit yardımcılar sunar. Bunlar günlükleme, olay takibi ve gerçek zamanlı boru hatları için gereklidir.

from datetime import datetime, date, timezone
print(date.today())
print(datetime.now())
print(datetime.now(tz=timezone.utc))  # Python 3.12+ preferred

Bunlar size ihtiyaçlarınıza bağlı olarak geçerli sistem saatini yerel zamanda veya UTC’de verir.

datetime.fromtimestamp(1700000000)
datetime.utcfromtimestamp(1700000000)

Bunlar, epoch zaman damgalarını datetime nesnelerine dönüştürür. API veya veritabanı değerlerini ayrıştırırken son derece yaygındırlar.

Dizelerden ayrıştırma

Gerçek dünya veri kümeleri, zaman damgalarını sıklıkla metin olarak saklar. Python, bu dizeleri yapılandırılmış değerlere dönüştürmek için güvenilir araçlar sunar.

strptime()
from datetime import datetime
dt = datetime.strptime("2025-03-01 14:30", "%Y-%m-%d %H:%M")
print(dt)

strptime(), bir biçim deseni kullanarak bir dizeyi ayrıştırır. Dize tam olarak eşleşmezse, Python ValueError yükseltir.

from datetime import datetime
dt = datetime.strptime("not-a-date", "%Y-%m-%d")

Bu, giriş beklenen desenle eşleşmediği için başarısız olur.

fromisoformat()
datetime.fromisoformat("2025-03-01T14:30:00")

ISO 8601 dizeleri, yapısı standartlaştırıldığı için temiz şekilde ayrıştırılır. Bu, API’lerden veya modern veri boru hatlarından zaman damgalarını yüklemenin genellikle en kolay yoludur.

Tarih Aritmetiği Yapma

Zaman damgaları oluşturabildiğinizde, sıradaki adım onlarla çalışmaktır. Bunu süreler hesaplayarak, tarihleri kaydırarak veya aralıkları karşılaştırarak yapabilirsiniz.

Zamansal hesaplamalar için Timedelta

timedelta, “5 saat” veya “2 hafta” gibi sabit süreli dönemleri modellemek için kullanılır. Bu dönemler, zamanlama, günlükleme ve basit bir geri sayım gerektiğinde kullanışlıdır.

from datetime import datetime, timedelta
dt = datetime(2025, 3, 1, 14, 30)
new_dt = dt + timedelta(days=5)
print(new_dt)

Bu örnek, zaman damgasını beş gün ileri kaydırır.

start = datetime(2025, 3, 1, 9, 0)
end = datetime(2025, 3, 1, 14, 30)
duration = end - start
print(duration.total_seconds())

Burada, iki datetime’in çıkarılması size bir timedelta verir; bunu saniye, gün veya saate dönüştürebilirsiniz.

Sabit süreli vs. takvim farkında aritmetik

Tüm zaman birimleri eşit değildir. Ayların uzunluğu değişir, yıllarda artık gün olabilir ve ay sonu davranışı öngörülemez olabilir. Bu senaryolarda timedelta yeterli değildir.

dateutil.relativedelta “takvim farkında” aritmetiği ele alır:

from dateutil.relativedelta import relativedelta
from datetime import date
d = date(2025, 1, 31)
print(d + relativedelta(months=1))

Bu, eksik “February 31” senaryosunu doğru şekilde ele alarak tarihi uygun biçimde kaydırır.

Tarihleri Biçimlendirme ve Ayrıştırma

Datetime biçimlendirme her yerde karşımıza çıkar: API’ler belirli biçimler bekler, kullanıcılar okunabilir metinleri tercih eder ve günlükler tutarlı zaman damgası dizelerine dayanır. Python hem esnek biçimlendirmeyi hem de standart temsilleri destekler.

strftime ile dize biçimlendirme

strftime(), önceden tanımlanmış kodları kullanarak datetime nesnelerini biçimlendirilmiş dizelere dönüştürmenizi sağlar.

from datetime import datetime
dt = datetime(2025, 3, 1, 14, 30)
print(dt.strftime("%A, %B %d, %Y at %H:%M"))

Bu, haftanın günü ve tam ay adını içeren, insan tarafından okunabilir bir dize yazdırır.

dt.strftime("%Y-%m-%dT%H:%M:%S")

Bu, veri depolama veya API’ler için uygun, ISO benzeri bir dize üretir.

strptime ile dizeleri ayrıştırma

from datetime import datetime
dt = datetime.strptime("2025-03-01 14:30", "%Y-%m-%d %H:%M")
print(dt)

Bu, metni bir datetime nesnesine dönüştürür. Dize ile desen arasındaki herhangi bir uyuşmazlık hata yükseltir.

ISO 8601 ve RFC 3339 ile çalışma

ISO 8601, birçok bölgesel tarih biçiminde bulunan belirsizliği çözer. Python bunu kutudan çıktığı gibi destekler:

from datetime import datetime
dt = datetime.fromisoformat("2025-03-01T14:30:00")
print(dt.isoformat())

Bu, sistemler, API’ler veya veritabanları arasında veri alışverişi yaparken en güvenli biçimdir.

Saat Dilimlerini Ele Alma

Saat dilimleri, zamansal programlamadaki en zorlayıcı konulardan bazılarını ortaya çıkarır. Python, bilinçsiz (naive) ve bilinçli (aware) datetime nesneleri arasında ayrım yaparak ve gerçek dünyadaki saat dilimlerini ele almak için araçlar sağlayarak yardımcı olur.

Bilinçsiz vs. bilinçli datetime nesneleri

Bilinçsiz bir datetime’ın saat dilimi yoktur:

from datetime import datetime
naive_dt = datetime(2025, 3, 1, 14, 30)
print(naive_dt.tzinfo)  # None

Bilinçli bir datetime, bir saat dilimi ofseti içerir:

from datetime import timezone, timedelta
aware_dt = naive_dt.replace(tzinfo=timezone(timedelta(hours=1)))
print(aware_dt)

Karşılaştırmalarda veya aritmetikte bilinçsiz ve bilinçli değerleri karıştırmak genellikle hatalara yol açar.

zoneinfo modülünü kullanma

Python'un zoneinfo modülü gerçek dünyadaki IANA saat dilimlerine erişim sağlar:

from zoneinfo import ZoneInfo
from datetime import datetime
dt = datetime(2025, 3, 1, 14, 30, tzinfo=ZoneInfo("Europe/Paris"))
print(dt)

Saat dilimi dönüştürme basittir:

dt.astimezone(ZoneInfo("America/New_York"))

Bu, aynı anı farklı bir yerel saat diliminde ifade eder.

Saat dilimleri arasında dönüştürme

Herhangi bir bilinçli zaman damgasını astimezone() kullanarak başka bir dilime dönüştürebilirsiniz:

from zoneinfo import ZoneInfo
dt_ny = dt.astimezone(ZoneInfo("America/New_York"))
print(dt_ny)

Yaygın bir en iyi uygulama, zaman damgalarını UTC’de saklamak ve yalnızca görüntülerken dönüştürmektir.

Tarihleri Karşılaştırma ve Filtreleme

Karşılaştırmalar neredeyse her iş akışında görülür. Günlükleri sıralamak, olayları filtrelemek veya bir şeyin bir eşikten önce mi sonra mı gerçekleştiğini belirlemek gibi durumları düşünüyorum.

from datetime import datetime
a = datetime(2025, 3, 1, 12, 0)
b = datetime(2025, 3, 1, 15, 0)
print(a < b)  # True

Saat dilimi farkında karşılaştırmalar ofsetleri hesaba katar:

from datetime import datetime
from zoneinfo import ZoneInfo
dt1 = datetime(2025, 3, 1, 12, 0, tzinfo=ZoneInfo("Europe/London"))
dt2 = datetime(2025, 3, 1, 7, 0, tzinfo=ZoneInfo("America/New_York"))
print(dt1 == dt2)  # True — same moment in time

Koleksiyonları filtrelemek doğal şekilde çalışır:

dates = [
    datetime(2025, 3, 1, 10),
    datetime(2025, 2, 20, 9),
    datetime(2025, 3, 1, 8)
]
cutoff = datetime(2025, 3, 1)
filtered = [d for d in dates if d >= cutoff]
print(filtered)

Bölgeler arasında çalışırken UTC’ye normalize etmek yardımcı olur.

Daha Gelişmiş Kullanım Durumları

Datetime, temel ayrıştırma ve aritmetiğin ötesinde birçok iş akışında karşımıza çıkar. Sıkça rastlayacağınız birkaç kalıp aşağıdadır.

Unix zaman damgaları

Unix zaman damgaları, 1 Ocak 1970’ten (UTC) beri geçen saniyeleri ölçer. Sistem programlamada ve API’lerde yaygın olarak kullanılırlar.

from datetime import datetime
dt = datetime.fromtimestamp(1700000000)
print(dt)

Milisaniye ve mikrosaniyeler ölçeklendirme gerektirir:

ts_ms = 1700000000000
dt_ms = datetime.fromtimestamp(ts_ms / 1000)

ts_us = 1700000000000000
dt_us = datetime.fromtimestamp(ts_us / 1_000_000)

Zamanlama ve zamanlayıcılar

schedule gibi kütüphaneler, görevlerin ne zaman çalışacağını belirlemek için datetime değerlerine dayanır. İster her birkaç saniyede bir işlev tetikleyin ister günün ilerleyen saatlerinde tek seferlik bir olayı zamanlayın, datetime bu karşılaştırmaların temelini sağlar.

Veri analizi kalıpları

Zaman temelli analiz ve gruplama için sıklıkla datetime öznitelikleri çıkarılır:

dt = datetime(2025, 3, 1, 14, 30)
print(dt.year)
print(dt.isocalendar())

pandas’ta dönemsel yeniden örnekleme son derece yaygındır:

import pandas as pd
df = pd.DataFrame({
    "value": [10, 12, 15],
    "timestamp": pd.to_datetime([
        "2025-03-01",
        "2025-03-02",
        "2025-03-08"
    ])
}).set_index("timestamp")

print(df.resample("W").sum())

Sonuç

Daha fazla bilgi için Max Shrom’un hazırladığı Working with Dates and Times in Python kursumuzdaki bu videoya ve Jason Myers’ın Data Types for Data Science in Python kursuna bakabilirsiniz. 

Ayrıca, dizeleri dönüştürmede biraz daha yardıma ihtiyacınız olursa Converting Strings to Dates as datetime Objects eğitimimize de göz atabilirsiniz.


Oluseye Jeremiah's photo
Author
Oluseye Jeremiah
LinkedIn

Yapay zekâ, makine öğrenimi ve veri bilimi alanlarında uzmanlaşmış teknik yazar; karmaşık fikirleri anlaşılır ve erişilebilir kılar.

Konular
Python

DataCamp ile Python Öğrenin

Kurs

Python’a Giriş

4 sa
7.1M
Python ile veri analizi temellerini sadece dört saatte öğrenin. Bu çevrimiçi kurs, Python arayüzünü tanıtacak ve popüler paketleri keşfedecektir.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör