Python'da String'i Datetime'a Dönüştürme
Yayınlanan: 2022-12-20Bir veri türünden başka bir veri türüne dönüştürmek, herhangi bir programlama dilinde çok önemlidir. Hemen hemen tüm programlama dilleri, yerleşik veri türleri için tür dönüştürmelerini destekler.
Datetime gibi özel veri türleri, dönüşümler için ekstra modüllere ihtiyaç duyar. Özellikle datetime
-saat dönüşümleri için modüllere ihtiyacımız var çünkü bunlarla çalışmak programcılar için hiç bu kadar kolay olmamıştı. Şans eseri, python, tarih saatiyle çalışmak için yerleşik modüllere sahiptir.
Farklı modüller kullanarak Python'da bir datetime
dizesini datetime
nesnesine nasıl dönüştüreceğimizi öğreneceğiz. Buna geçmeden önce, neden ilk etapta onu dönüştürmemiz gerektiğine bakalım.
Bir tarih saat dizesini neden bir tarih saat nesnesine dönüştürmemiz gerekiyor?
Tarihlerle çalışmamız gerektiğinde, bunlar dizge biçimindeyse çalışmak kolay değildir. Bunları tarih saat biçimine dönüştürmek, onlarla çalışmayı çok kolaylaştırır. Dizelerdeki tarihler normal dizeler gibidir. Tarihlerle çalışmak için herhangi bir özel yöntemi olmayacak. Tarihlerle çalışırken ihtiyaç duymayacağımız genel dizi yöntemlerine sahip olacak.
Diyelim ki iki tarihi karşılaştırmamız gerekiyor. Dize biçimindeyse, doğru bir şekilde karşılaştırabiliriz. Eğer datetime
-saat formatında iseler, sayılar gibi karşılaştırma işleçlerini kullanabiliriz.
Bu, datetime
biçimine dönüştürmenin işleri kolaylaştırdığı yalnızca bir senaryodur. Tarih ekleme, çıkarma, saat dilimlerini işleme vb. gibi, datetime
datetime
nesnesine dönüştürmenin hayatımızı her zamankinden daha kolay hale getirdiği birçok senaryo vardır.
Bununla birlikte, bir datetime
dizesini bir datetime
nesnesine dönüştürmenin farklı yollarını görelim. datetime
dizesini datetime
nesnesine dönüştürmek için yerleşik datetime
ve üçüncü taraf dateutil
modüllerini kullanacağız. Datetime modülü ile başlayalım
Tarih saatini kullanma
datetime
, tarihler ve saatlerle çalışmak için kullanılan yerleşik bir Python modülüdür. Bu modülde tarih ve saat ile çalışmamıza yardımcı olan birçok sınıf vardır. Dönüşüm için datetime.datetime
sınıfını kullanacağız.
datetime.datetime
birçok metoda sahiptir. Dönüşümde bize yardımcı olacak strptime
yöntemiyle ilgileniyoruz. Kontrol edelim.
tarihsaat.strptime
datetime.strptime
yöntemi, datetime
dizesini bir datetime
nesnesine dönüştürmek için kullanılır. Biri datetime
saat dizisi, diğeri ise datetime
dizisinin biçimi olmak üzere iki dize alır. Ve datetime
nesnesini döndürür.
bir örnek görelim
from datetime import datetime string = "19-12-2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting))
Yukarıdaki kodu çalıştırırsanız aşağıdaki çıktıyı göreceksiniz.
2022-12-19 21:37:56
Bir datetime.strptime
datetime
kullanarak datetime
-saat nesnesine dönüştürdük. Yönteme sağladığınız biçimin datetime
dizesiyle tam olarak eşleştiğinden emin olun. Eşleşmezlerse, bir hata veya yanlış çıktı alabilirsiniz.
datetime
formatı için bazı formatlama kodları kullandık. Dokümanlardaki tüm format kodlarına başvurabilirsiniz.
datetime.strptime
yöntemi tam datetime
döndürür. Tarih ve saati ayrı ayrı almak isterseniz, datetime
nesnesinin date time
yöntemlerini kullanabiliriz. Kodu görelim.
from datetime import datetime string = "19-12-2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" ## getting date separately print("Date:", datetime.strptime(string, formatting).date()) ## getting time separately print("Time:", datetime.strptime(string, formatting).time())
Yukarıdaki kodu çalıştırın ve aşağıdaki çıktıyı göreceksiniz.
Date: 2022-12-19 Time: 21:37:56
date
ve time
yöntemleri sırasıyla nesnelerini döndürür. Tarihler ve saatler için yine kendi yöntemlerine sahip olacaklar.
Yukarıda gördüğümüz datetime.strptime
metodu için doğru stringleri ve formatları sağladık. Bunları doğru bir şekilde sağlamazsak, hatalar alırız. Bu hataların nasıl ele alınacağını görelim. Aşağıdaki kodu çalıştırın.

from datetime import datetime string = "19:12:2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting))
Biçimlendirme, datetime
dizesiyle eşleşmediğinden yukarıdaki kod bir hata atar. Bu tür hataların üstesinden gelmek için Pythons'un try-except'ini kullanabiliriz. Hadi ekleyelim.
from datetime import datetime try: string = "19:12:2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting)) except ValueError as error: print(error)
Şimdi, kodu tekrar çalıştırın. Kodu bozmadan aşağıdaki hata mesajını göreceksiniz.
time data '19:12:2022 09:37:56 PM' does not match format '%d-%m-%Y %I:%M:%S %p'
Benzer şekilde, gelen parser.parse
yöntemi için try-except'i de ekleyebiliriz. Ortadaki kodu kırmaktan kaçınmamıza yardımcı olur. Bu, özellikle bu eğitim bağlamıyla ilgili değildir, ancak bunu kodunuzda kullanmanızı hatırlatacaktır.
datetime
modülü için bu kadar. Bir sonraki modül dateutil
.
Dateutil'i kullanma
dateutil
modülü, datetime
modülüne uzantılar sağlar. Kolay kullanımlı birçok yöntemle tarih ve saatlerle çalışmayı çok daha kolay hale getirir. Aşağıdaki komut ile modülü yükleyelim.
pip install python-dateutil
İlgilendiğimiz yöntem dateutil.parser.parse
. datetime
dizesini datetime
nesnesine nasıl dönüştüreceğimizi görelim.
ayrıştırıcı.ayrıştır
parser.parse
yöntemi, bir datetime
saat dizesi alır ve onu ilgili bir datetime
saat nesne biçimine dönüştürür. Bu yöntem için herhangi bir biçimlendirme sağlamamıza gerek yoktur. Verilen datetime
dizesini otomatik olarak datetime
nesnesine dönüştürür. Bir örnek görelim.
from dateutil import parser string = "19-12-2022 09:37:56 PM" print(parser.parse(string))
Yukarıdaki kodu çalıştırırsanız aşağıdaki çıktıyı göreceksiniz.
2022-12-19 21:37:56
datetime
dizesi, parser.parse
yönteminin kabul ettiği belirli bir biçimde olmalıdır. datetime
string formatı istenen formata göre değilse bir hata atar. Otomatik dönüştürmeler için kabul ettiği tüm tarih-saat dize biçimlerini kontrol edebilirsiniz.
parser.parse
methodu datetime
nesnesini döndürdüğü için, datetime
modülü ile gördüğümüz gibi date
ve time
nesnelerine ayrı ayrı erişebiliyoruz. Kodu görelim.
from dateutil import parser string = "19-12-2022 09:37:56 PM" print("Date:", parser.parse(string).date()) print("Time:", parser.parse(string).time())
Yukarıdaki kodu çalıştırırsanız aşağıdaki çıktıyı görebilirsiniz.
Date: 2022-12-19 Time: 21:37:56
Gördüğünüz gibi, dateutil
, tarih ve saatlerle karşılaştırmalı olarak çalışmayı kolaylaştırır. Modülü belgelerde inceleyebilirsiniz.
Çözüm
datetime
dizesini DateTime nesnesine dönüştürmek için bir yerleşik modül ve bir üçüncü taraf modülü kullandık. datetime
dizesini, datetime
ve dateutil
modüllerine benzer bir DateTime nesnesine dönüştürebileceğimiz time
adında başka bir yerleşik modül vardır. Kendin dene. Diğer modüllerde de benzer bir şey yaptığınız için zor olmayacaktır.
Aynı şeyi başarabileceğimiz daha fazla kütüphane olabilir. Şey eğitiminde kullandığımız modüller standarttır ve yaygın olarak kullanılmaktadır. Diğer modüller hakkında daha fazlasını keşfedebilir ve size en uygun olanı seçebilirsiniz.
Python'da zaman farkının nasıl hesaplanacağını da keşfedebilirsiniz.
Mutlu Kodlama