Ana içeriğe atla

Python String'den DateTime'a: String'leri DateTime Nesnelerine Nasıl Dönüştürürsünüz

Python'da strptime(), dateutil ve pandas ile string'leri datetime nesnelerine dönüştürmeyi, pratik kod örnekleriyle öğrenin.
Güncel 16 Nis 2026  · 8 dk. oku

Python'da string'ler, tarih ve saatleri temsil etmek için kullanılan yaygın bir veri türüdür; ancak veri bilimciler ve mühendisler olarak, çoğu zaman bu string'leri sıralama ya da karşılaştırma gibi çeşitli işlemleri yapabilmek için datetime nesnelerine dönüştürmemiz gerekir.

String'leri datetime nesnelerine dönüştürmek, özellikle Python'a yeni başlayanlar için zorlayıcı olabilir. Bu yazıda, bu yöntemleri kullanmak için gereken adımları anlatacak ve yol boyunca kod örnekleri sunacağım. İster deneyimli bir geliştirici olun ister yeni başlıyor olun, hadi Python'daki datetime nesnelerinin dünyasına dalalım!

Bu eğitimdeki tüm örnek kodları kolayca kendiniz çalıştırmak için, Python'un önceden kurulu olduğu ve tüm kod örneklerini içeren ücretsiz bir DataLab çalışma defteri oluşturabilirsiniz. String'leri datetime nesnelerine dönüştürme pratiği için bu uygulamalı DataCamp alıştırmasına da göz atın.

Özet

Python'da string'leri datetime nesnelerine dönüştürmek için datetime.strptime(date_string, format) kullanın. Biçim dizgisi olmadan esnek ayrıştırma için dateutil.parser.parse() kullanın. DataFrame'ler için, pd.to_datetime() tüm sütunları verimli bir şekilde işler. Ana biçim kodları: %Y (4 haneli yıl), %m (ay), %d (gün), %H (saat), %M (dakika), %S (saniye).

Python datetime Modülüne Giriş

Python ile yerleşik gelen datetime modülü, Python kullanılarak oluşturulan herhangi bir uygulamada tarih, saat veya zaman aralıklarıyla çalışmanız gerektiğinde kullanılabilir. Tarih ve saat verilerini temsil etmek ve işlemek için kullanışlı sınıflar ve yöntemler sunar.

Tablo 1: datetime modülündeki sınıfların ve yöntemlerin özeti

Sınıf/Yöntem Amacı Yaygın kullanım alanları
datetime.date Bir tarihi temsil eder (yıl, ay, gün). Tarihler arasındaki farkları hesaplama, tarihleri string olarak biçimlendirme, tarih bileşenlerini çıkarma.
datetime.time Günün bir saatini temsil eder (saat, dakika, saniye, mikrosaniye). Saatleri karşılaştırma, saatleri string olarak biçimlendirme, saat bileşenlerini çıkarma.
datetime.datetime Bir tarih ve saati temsil eder. date ve time işlevlerini birleştirir. Zaman serisi verileriyle çalışma, tarih ve saat bileşenlerini çıkarma, string olarak biçimlendirme.
datetime.timedelta İki tarih veya saat arasındaki farkı (süreyi) temsil eder. Tarih veya saatlere süre ekleme/çıkarma, zaman aralıklarını hesaplama.
datetime.strptime() Belirtilen bir biçime göre bir string'i datetime nesnesine ayrıştırır. String'leri daha fazla işleme ve analiz için datetime nesnelerine dönüştürme.
datetime.strftime() Bir datetime nesnesini belirtilen bir biçime göre string olarak biçimlendirir.  datetime nesnelerini görüntüleme veya raporlama için okunabilir string'lere dönüştürme.

Bu modül altındaki ana sınıfları anlayalım; çünkü bunları datetime nesnelerine dönüştüreceğiz:

1. datetime.date

Bu sınıf bir tarihi (yıl, ay ve gün) temsil eder ve iki tarih arasındaki farkı hesaplama ve tarihleri string olarak biçimlendirme gibi tarihlerle çalışmaya yönelik yöntemler sağlar.

Bir şirkete ait günlük hisse senedi fiyatlarını içeren bir veri setimiz olduğunu varsayalım. Veri setinden tarihleri çıkarmak ve zaman içinde hisse senedi fiyatlarını görselleştirmek için date sınıfını kullanabiliriz.

İşte date sınıfının kullanımını gösteren kısa bir örnek:

from datetime import date

# create a date object representing March 1, 2023
start_date = date(2023, 3, 1)

# extract information such as the year, month, and day
year = start_date.year
month = start_date.month
day = start_date.day

# get the day of the week (Note: Monday is coded as 0, and Sunday as 6)
weekday = start_date.weekday()

# the date can be formatted as a string if needed
date_str = start_date.strftime('%Y-%m-%d')

2. datetime.time

Bu sınıf günün bir saatini (saat, dakika, saniye ve mikrosaniye) temsil eder ve saatleri karşılaştırma ve string olarak biçimlendirme gibi saatlerle çalışmaya yönelik yöntemler sağlar.

Bir yarışın bitiş zamanlarını içeren bir veri setimiz olduğunu düşünelim; yarışmayı bitiren her yarışmacının saat ve dakikasını çıkarmak için time sınıfını kullanabiliriz.

from datetime import time

# create a time object with the microsecond granularity
end_time = time(15, 45, 30, 500000)

# get the hour and minute
hour = end_time.hour
minute = end_time.minute
second = end_time.second
microsecond = end_time.microsecond

3. datetime.datetime

Bu sınıf bir tarih ve saati temsil eder ve her ikisiyle de çalışmaya yönelik yöntemler sağlar. date ve time sınıflarının işlevlerini birleştirir.

Zaman serisi verileri gibi saatlik veya dakikalık çözünürlükte yüksek zamansal çözünürlük gerektiren veri analizi görevlerinde yaygın olarak kullanılır. Bir kente ait saatlik elektrik talebini içeren bir veri setimiz olduğunu varsayalım. Veri setinden tarih ve saati çıkarmak ve zaman içindeki elektrik talebini çizmek için datetime sınıfını kullanabiliriz. Bu tür verileri görselleştirmek için Matplotlib zaman serisi çizgi grafiği eğitimimize bakın.

from datetime import datetime

# create a datetime object representing March 1, 2023 at 9:30 AM
start_datetime = datetime(2023, 3, 1, 9, 30)

# get the year, month, day, hour, and minute
year = start_datetime.year
month = start_datetime.month
day = start_datetime.day
hour = start_datetime.hour
minute = start_datetime.minute

4. datetime.timedelta

Bu sınıf bir süreyi veya zaman aralığını temsil eder ve tarihlere veya saatlere zaman aralıkları ekleme ya da çıkarma gibi zaman aralıklarıyla çalışmaya yönelik yöntemler sağlar.

Bir dizi olayın başlangıç ve bitiş zamanlarını içeren bir veri setimiz olduğunu ve tüm olayların toplam süresini hesaplamak istediğimizi varsayalım. Her olayın süresini hesaplamak ve bunları toplamak için timedelta sınıfını kullanabiliriz.

from datetime import timedelta

# create a timedelta object representing 3 hours and 15 minutes
event_duration = timedelta(hours=3, minutes=15)

# get the total duration in seconds
event_duration_seconds = event_duration.total_seconds()

# add the duration to a start time to get an end time
event_start_time = datetime(2023, 3, 1, 18, 15)
event_end_time = event_start_time + event_duration

Bu örneklerin hepsinde datetime nesnelerini kullandık; ancak gerçek dünya verileri pratikte çoğu zaman string olarak kalır. Datetime nesnesine dönüştürmek, veri bilimi analizlerinde ve uygulamalarında güçlü olan yukarıdaki tüm işlevlerin kilidini açar.

Datetime Dönüşümü için datetime.strptime() Kullanımı

Python'da, bir string'i datetime nesnesine dönüştürmek için datetime.strptime() yöntemini kullanabiliriz. strptime() yöntemi iki argüman alır: dönüştürülecek string ve giriş string'inin biçimini belirten bir biçim dizgisi.

Biçim dizgisi, tarih ve saatin çeşitli bileşenlerini temsil etmek için bir dizi biçimlendirme kodu kullanır. İşte en yaygın kullanılan biçimlendirme kodlarından bazıları (benzer kavramlar Python string biçimlendirmede de geçerlidir):

Tablo 2: Yaygın datetime biçimlendirme kodları

Biçim kodu Açıklama Örnek girdi Örnek çıktı
%Y 4 haneli yıl 2023 2023
%y 2 haneli yıl 23 23
%m 2 haneli ay (01-12) 03 03
%d 2 haneli ayın günü (01-31) 15 15
%H 2 haneli saat (00-23) 14 14
%I 2 haneli saat (01-12) 02 02
%M 2 haneli dakika (00-59) 45 45
%S 2 haneli saniye (00-59) 30 30
%f Mikrosaniye (000000-999999) 123456 123456
%p AM veya PM PM PM
%z UTC ofseti +0530 +0530
%a Kısaltılmış hafta günü adı Tue Tue
%A Tam hafta günü adı Tuesday Tuesday
%b Kısaltılmış ay adı Mar Mar
%B Tam ay adı March March
%j Yılın günü (001-366) 074 074
%U Yılın hafta numarası (Pazar ilk gün) 10 10
%W Yılın hafta numarası (Pazartesi ilk gün) 09 09

Artık strptime yönergelerini anladığımıza göre, string'leri datetime nesnelerine dönüştürme süreci basitleştirilebilir.

  • Adım 01: Dönüştürülebilecek tarih-saat string'ini, biçimlendirme kodlarıyla eşleşen örüntüler için analiz edin.
  • Adım 02: strptime() yönergelerinden tarih-saat biçimini oluşturun.
  • Adım 03: String'i ve biçimi fonksiyona aktarın ve çıktıda nesneyi alın.

Bu adımları uygulamaya koyalım.

Belirli bir biçimdeki bir string'i datetime nesnesine dönüştürme

from datetime import datetime

# Example with the standard date and time format
date_str = '2023-02-28 14:30:00'
date_format = '%Y-%m-%d %H:%M:%S'

date_obj = datetime.strptime(date_str, date_format)
print(date_obj)

# Example with a different format

date_str = '02/28/2023 02:30 PM'
date_format = '%m/%d/%Y %I:%M %p'

date_obj = datetime.strptime(date_str, date_format)
print(date_obj)

İlk örnekte, ‘YYYY-MM-DD HH:MM:SS’ biçiminde bir tarih ve saat temsil eden bir string'imiz var; ikinci örnekte ise ‘MM/DD/YYYY HH:MM AM/PM’ gibi farklı bir biçim var.

Her iki durumda da, doğru datetime nesnesini almak için strptime() fonksiyonuna ikinci argüman olarak doğru biçim dizgisini belirtiriz.

Saat dilimi bilgisi içeren bir string'i datetime nesnesine dönüştürme

from datetime import datetime

date_str = '2023-02-28 14:30:00+05:30'
date_format = '%Y-%m-%d %H:%M:%S%z'

date_obj = datetime.strptime(date_str, date_format)
print(date_obj)

Bu örnekte, ‘YYYY-MM-DD HH:MM:SS+TZOFFSET’ biçiminde saat dilimi bilgisi içeren bir tarih ve saat temsil eden bir string'imiz var; burada TZOFFSET, UTC'den saat ve dakika cinsinden saat dilimi ofsetidir. Saat dilimi ofsetini ayrıştırmak için %z biçim kodunu dahil ederek, strptime()'e ikinci argüman olarak biçim dizgisini belirtiriz.

Yukarıda gördüğümüz fonksiyon teoride kolay görünse de, pratikte işler ters gittiğinde hayal kırıklığına da neden olabilir.

dateutil kullanarak biçim dizgileri olmadan tarihleri ayrıştırma

Başka bir esnek seçenek de özellikle parser.parse() fonksiyonu ile dateutil kütüphanesidir. Biçim dizgisi belirtmeden string'leri ayrıştırmanıza olanak tanıyan, tarih biçimlerini otomatik olarak algılar.

from dateutil.parser import parse

# Automatically infers the format
date_obj = parse("March 1, 2023 9:30 AM")
print(date_obj)

Bu, öngörülemeyen veya tutarsız tarih biçimleriyle çalışırken özellikle kullanışlıdır.

Saat dilimleriyle çalışma

Saat dilimini bilen datetime işlemleri için, Python iki popüler seçenek sunar:

  • pytz (yaygın olarak kullanılır ve eski sürümlerle uyumludur)

  • zoneinfo (Python 3.9'da tanıtıldı, standart kütüphanenin parçası)

from datetime import datetime
from zoneinfo import ZoneInfo

# Using zoneinfo
dt = datetime(2023, 3, 1, 9, 30, tzinfo=ZoneInfo("America/New_York"))
print(dt)

# Using pytz (alternative)
import pytz
tz = pytz.timezone("America/New_York")
dt_pytz = tz.localize(datetime(2023, 3, 1, 9, 30))
print(dt_pytz)

Bu araçlar, saat dilimleri atamanıza, aralarında dönüştürme yapmanıza ve yaz saati uygulamasını otomatik olarak hesaba katmanıza olanak tanır.

Yaz saati uygulaması (DST) ile ilgili hususlar

Saat diliminin farkında olan datetime'larla çalışırken, yaz saati uygulaması (DST) özellikle saatlerin ileri veya geri alınması sırasında sorunlara yol açabilir.

zoneinfo ve pytz gibi kütüphaneler, uygun saat dilimini atadığınızda DST geçişlerini otomatik olarak yönetir:

from datetime import datetime
from zoneinfo import ZoneInfo

# Before and after DST starts
before_dst = datetime(2023, 3, 12, 1, 30, tzinfo=ZoneInfo("America/New_York"))
after_dst = datetime(2023, 3, 12, 3, 30, tzinfo=ZoneInfo("America/New_York"))

print(before_dst)
print(after_dst)

Bu, datetime hesaplamalarının DST değişiklikleri boyunca doğru kalmasını sağlar.

Datetime Dönüşümü için pandas Kullanımı

Python'un yerleşik datetime modülü güçlü olsa da, birçok veri bilimci, basitliği ve DataFrame kullanarak tüm tarih sütunlarını verimli bir şekilde işleyebilmesi nedeniyle datetime dönüşümleri için pandas kütüphanesini tercih eder.

import pandas as pd

# Converting a column of strings to datetime objects
date_series = pd.to_datetime(['2023-02-28', '2023-03-01', '2023-03-02'])
print(date_series)

Pandas, biçimleri otomatik olarak algılar ve yaygın tutarsızlıkları sorunsuzca ele alır; bu da onu tablo verileriyle çalışırken başvurulan bir seçeneğe dönüştürür. Daha fazlası için pandas ile Veri Hazırlama rehberimize göz atın.

strftime() ile datetime Nesnelerini String'lere Biçimlendirme

String'leri datetime nesnelerine dönüştürüp istediğiniz işlemleri yaptıktan sonra, bunları tekrar string'e dönüştürmeniz gerekebilir. Bu amaçla datetime.strftime() kullanabilirsiniz.

from datetime import datetime

now = datetime.now()
formatted = now.strftime('%Y-%m-%d %H:%M:%S')
print(formatted)

Bu yöntem, datetime nesnenizin string biçiminde nasıl görüntüleneceği üzerinde tam kontrol sağlar.

Yaygın strptime() Hatalarını Giderme

Karşılaşabileceğiniz bazı yaygın hatalar ve bunları nasıl düzelteceğiniz aşağıdadır. Python'da istisna yönetimi hakkında daha fazlası için özel eğitimimize göz atın:

ValueError: time data 'date_string' does not match format '%Y-%m-%d %H:%M:%S'

En yaygın hata, giriş string'inin biçim dizgisiyle eşleşmemesi durumunda oluşur. Lütfen giriş string'i ile biçim dizgisinin birebir eşleştiğinden emin olun.

import datetime

# When using 4-digit year format but input has 2-digit year
date_str = '23-03-01'
date_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d')  # Wrong: %Y expects 4 digits
# Raises ValueError: time data '23-03-01' does not match format '%Y-%m-%d'

# When format doesn't match separator in string
time_str = '08:30:00'
time_obj = datetime.datetime.strptime(time_str, '%H-%M-%S')  # Wrong: using - instead of :
# Raises ValueError: time data '08:30:00' does not match format '%H-%M-%S'

TypeError: strptime() argument 1 must be str, not 'int'

Bir diğer yaygın hata, datetime.strptime() veya time.strptime() fonksiyonuna bir string yerine tamsayı geçirildiğinde ortaya çıkar. Fonksiyona ilettiğiniz tüm değerlerin string olduğundan emin olun.

# Example 1: Integer instead of string
date_int = 20230301
date_obj = datetime.datetime.strptime(date_int, '%Y%m%d')
# Raises TypeError: strptime() argument 1 must be str, not int

# Example 2: List instead of string
date_list = [2023, 3, 1]
date_obj = datetime.datetime.strptime(date_list, '%Y-%m-%d')
# Raises TypeError: strptime() argument 1 must be str, not list

ValueError: unconverted data remains: ':00'

Bu hata, biçim dizgisiyle eşleşmeyen, giriş string'inde artakalan karakterler olduğunda oluşur. Örneğin, biçim dizgisi yalnızca yıl, ay ve günü belirtiyorsa, ancak giriş string'i günün saatini de içeriyorsa bu hata ortaya çıkar. Bu hatayı gidermek için biçim dizgisinin tüm giriş string'iyle eşleştiğinden emin olun.

# when input string contains time of day
date_str = '2023-03-01 12:30:00'
date_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d')
# Raises ValueError: unconverted data remains:  12:30:00

# When input string contains extra characters
date_str = '2023-03-01T00:00:00Z'
date_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d')
# Raises ValueError: unconverted data remains: T00:00:00Z

Sonuç

datetime.strptime() yönteminin, Python'da string'leri datetime nesnelerine dönüştürmek için esnek ve güçlü bir yol sunduğunu ve çok çeşitli tarih ve saat biçimlerini ele almak için kullanılabildiğini söylemek mümkün. Daha sonra başvurmak üzere Dates and Times Cheatsheet'imizi almayı unutmayın.

Tarih ve saatleri anladıktan sonra bir projede pratik yapmak sıradaki adımdır. Öğreniminizi pekiştirmek için bunlardan birini seçmenizi öneririz:

Gerçek dünyadaki tarih ve saat verilerinin karmaşık olduğunu kabul ediyoruz; ancak verilerinizdeki her tür tarih ve saatin arkasındaki biçimleri ve örüntüleri anlamanız ve elinizdeki kütüphaneleri akıllıca kullanmanız yeterlidir.

SSS

Aynı veri setinde karışık tarih biçimleri içeren string'leri nasıl ele alabilirim?

Bir veri setinde karışık tarih biçimleriyle çalışırken Python’un dateutil modülünü kullanabilirsiniz. dateutil.parser.parse() fonksiyonu, önceden tanımlı bir biçim dizgisi gerektirmeden çeşitli tarih biçimlerini otomatik olarak algılayıp ayrıştırabildiği için datetime.strptime()'dan daha esnektir:

from dateutil.parser import parse

date_str1 = '2023-03-01'
date_str2 = 'March 1, 2023'

date_obj1 = parse(date_str1)
date_obj2 = parse(date_str2)

print(date_obj1)  # Output: 2023-03-01 00:00:00
print(date_obj2)  # Output: 2023-03-01 00:00:00

Farklı saat dilimlerini hesaba katarak string'leri datetime nesnelerine dönüştürebilir miyim?

Evet, datetime ile birlikte pytz kütüphanesini kullanarak saat dilimlerini ele alabilirsiniz. Önce string'i bir datetime nesnesine dönüştürün ve ardından pytz.timezone() kullanarak bir saat dilimi atayın:

from datetime import datetime
import pytz

date_str = '2023-03-01 14:30:00'
date_format = '%Y-%m-%d %H:%M:%S'
date_obj = datetime.strptime(date_str, date_format)

# Set time zone
timezone = pytz.timezone('US/Eastern')
date_obj_tz = timezone.localize(date_obj)

print(date_obj_tz)  # Output: 2023-03-01 14:30:00-05:00

datetime.strptime() ile datetime.fromisoformat() arasındaki fark nedir?

datetime.strptime(), standart olmayan veya değişken tarih biçimlerini ayrıştırmak için özel bir biçim dizgisi belirtmenize olanak tanır.

datetime.fromisoformat() ise özellikle ISO 8601 biçimindeki tarih string'lerini (ör. '2023-03-01T14:30:00') ayrıştırmak için tasarlanmıştır. String'leriniz ISO 8601 standardını sıkı biçimde takip ediyorsa kullanımı daha basittir:

from datetime import datetime

iso_date_str = '2023-03-01T14:30:00'
date_obj = datetime.fromisoformat(iso_date_str)
print(date_obj)  # Output: 2023-03-01 14:30:00

Python'da bir datetime nesnesini tekrar string'e nasıl dönüştürürüm?

Bir datetime nesnesini tekrar string'e dönüştürmek için strftime() yöntemini kullanın. Çıktının nasıl görünmesini istediğinizi belirten bir biçim dizgisi geçin:

from datetime import datetime

dt = datetime(2023, 3, 1, 14, 30)
date_string = dt.strftime('%Y-%m-%d %H:%M:%S')
print(date_string)  # Output: 2023-03-01 14:30:00

Biçim kodları, strptime() ile kullanılanlarla aynıdır; bu da string'ler ve datetime nesneleri arasında gidip gelmeyi kolaylaştırır.

Python'da strptime() ile strftime() arasındaki fark nedir?

strptime() ve strftime() zıt işlemlerdir:

  • strptime() ("string parse time") bir string'i datetime nesnesine dönüştürür. Argüman olarak bir string ve bir biçim alır.
  • strftime() ("string format time") bir datetime nesnesini string'e dönüştürür. Datetime'ı belirtilen biçim dizgisine göre biçimlendirir.

Yardımcı bir ipucu: strptime() string'leri ayrıştırır, strftime() ise string'e biçimlendirir.


Arunn Thevapalan's photo
Author
Arunn Thevapalan
LinkedIn
Twitter

Kıdemli veri bilimcisi olarak, işletmelerin veriye dayalı daha iyi kararlar almasına yardımcı olmak için büyük ölçekli makine öğrenimi çözümleri tasarlıyor, geliştiriyor ve uyguluyorum. Veri bilimi yazarı olarak, öğrendiklerimi, kariyer tavsiyelerimi ve ayrıntılı uygulamalı eğitimleri paylaşıyorum.

Konular

Python hakkında daha fazlasını öğrenin

Kurs

Python ile Zaman Serisi Verilerini Manipüle Etme

4 sa
70.9K
Bu kursta zaman serisi verileriyle çalışmanın temellerini öğreneceksiniz.
Ayrıntıları GörRight Arrow
Kursa Başla
Devamını GörRight Arrow