Python’un standart kütüphane tarih-saati, tarih ve saatleri (tarihler, saatler ve saatler) işlemek için kullanılabilir. Tarihleri ve saatleri dizelere ve dizelerden dönüştüren strftime() ve strptime() yöntemleri, tarih ve saatleri çeşitli biçimlerde değiştirmek için kullanılabilir.
Ayrıca çıkarma ve toplama gibi işlemleri de yapabilir. Örneğin, 10 gün öncesini veya 3 hafta sonrasını veya 50 dakika sonrasını kolayca hesaplayabilir ve alabilirsiniz.
İlk olarak, datetime modülünde bulunan aşağıdaki nesne sınıflarını tanımlayacağız.
datetime.datetime
:Tarih ve saat (tarih ve saat)datetime.date
:Tarihdatetime.time
:Zamandatetime.timedelta
:Saat farkı ve geçen süre
Tarih/saat ve dizgiyi birbirine çeviren strftime() ve strptime() yöntemleri de açıklanmıştır.
datetime
nesnedatetime.now()
:Bugünün tarihi, şimdiki zamandatetime
Nesne Oluşturucu- Bir tarih saat nesnesini bir tarih nesnesine dönüştürme
date
nesnedate.today()
:Bugünün tarihi- Tarih nesnesi için yapıcı
time
nesne- zaman nesnesi için yapıcı
timedelta
nesne- Timedelta nesneleri oluşturmak için datetime ve date nesnelerini çıkarın.
- timedelta nesnesi için yapıcı
- Timedelta nesneleri kullanarak çıkarma ve toplama
strftime()
:Tarih ve saatten dizeye dönüştürmestrptime()
:Dizeden tarih ve saate dönüştürme
Standart kitaplıkta ayrıca, düz metin veya HTML biçiminde takvimler oluşturan takvim modülü bulunur.
tarih saat nesnesi
Datetime nesnesi, hem tarih (yıl, ay, gün) hem de saat (saat, dakika, saniye, mikrosaniye) bilgisine sahip bir nesnedir. Bu bilgilere aşağıdaki niteliklerle erişebilirsiniz.
year
month
day
hour
minute
second
microsecond
datetime.now():Bugünün tarihi, şimdiki zaman
datetime.now() size bugünün tarihi (geçerli tarih) ve geçerli saat ile bir datetime nesnesi verecektir.
import datetime
dt_now = datetime.datetime.now()
print(dt_now)
# 2018-02-02 18:31:13.271231
print(type(dt_now))
# <class 'datetime.datetime'>
print(dt_now.year)
# 2018
print(dt_now.hour)
# 18
datetime nesnesi için yapıcı
Rastgele tarihler ve saatler için datetime nesneleri oluşturmak da mümkündür.
Datetime nesnesinin yapıcısı aşağıdaki gibidir.
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Aşağıdaki değerler gereklidir ve diğerleri atlanabilir. Atlanırsa, varsayılan değer 0’dır.
year
month
day
dt = datetime.datetime(2018, 2, 1, 12, 15, 30, 2000)
print(dt)
# 2018-02-01 12:15:30.002000
print(dt.minute)
# 15
print(dt.microsecond)
# 2000
dt = datetime.datetime(2018, 2, 1)
print(dt)
# 2018-02-01 00:00:00
print(dt.minute)
# 0
Bir tarih saat nesnesini bir tarih nesnesine dönüştürme
Bir datetime nesnesi, aşağıda açıklandığı gibi, date() yöntemiyle bir tarih nesnesine dönüştürülebilir.
print(dt_now)
print(type(dt_now))
# 2018-02-02 18:31:13.271231
# <class 'datetime.datetime'>
print(dt_now.date())
print(type(dt_now.date()))
# 2018-02-02
# <class 'datetime.date'>
tarih nesnesi
Bir tarih nesnesi, bir tarih (yıl, ay, gün) hakkında bilgi içeren bir nesnedir. Yıl, ay ve gün öznitelikleri ile erişilebilir.
date.today():Bugünün tarihi
Geçerli tarihin tarih nesnesi (bugünün tarihi), date.today() ile elde edilebilir.
d_today = datetime.date.today()
print(d_today)
# 2018-02-02
print(type(d_today))
# <class 'datetime.date'>
print(d_today.year)
# 2018
Tarih nesnesi için yapıcı
Tarih nesnesinin yapıcısı aşağıdaki gibidir
date(year, month, day)
Hepsi gereklidir ve atlanamaz.
d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01
print(d.month)
# 2
zaman nesnesi
Zaman nesnesi, zaman (saat, dakika, saniye ve mikrosaniye) hakkında bilgi içeren bir nesnedir. Saat, dakika, saniye ve mikrosaniye öznitelikleri kullanılarak erişilebilir.
zaman nesnesi için yapıcı
time nesnesinin yapıcısı aşağıdaki gibidir.
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Hepsi isteğe bağlıdır ve atlanırlarsa 0’a ayarlanır.
t = datetime.time(12, 15, 30, 2000)
print(t)
# 12:15:30.002000
print(type(t))
# <class 'datetime.time'>
print(t.hour)
# 12
t = datetime.time()
print(t)
# 00:00:00
zamandelta nesnesi
timedelta nesnesi, iki tarih ve saat arasındaki zaman farkını veya geçen zamanı temsil eden bir nesnedir. Gün, saniye ve mikrosaniye cinsinden bilgilere sahiptir ve gün, saniye ve mikrosaniye öznitelikleriyle erişilebilir. Total_seconds() yöntemini kullanarak toplam saniye sayısını elde etmek de mümkündür.
timedelta nesnesi oluşturmak için datetime ve date nesnelerini çıkarın.
Datetime nesnelerinin birbirinden çıkarılması, bir timedelta nesnesi verir.
td = dt_now - dt
print(td)
# 1 day, 18:31:13.271231
print(type(td))
# <class 'datetime.timedelta'>
print(td.days)
# 1
print(td.seconds)
# 66673
print(td.microseconds)
# 271231
print(td.total_seconds())
# 153073.271231
Tarih nesnelerinin birbirinden çıkarılması benzer şekilde bir timedelta nesnesi verir.
timedelta nesnesi için yapıcı
timedelta nesnesinin yapıcısı aşağıdaki gibidir
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Hepsi isteğe bağlıdır ve atlanırlarsa 0’a ayarlanır.
timedelta nesnesinin yalnızca aşağıdaki bilgileri içerdiğine dikkat edin.
- birkaç gün:
days
- saniye sayısı:
seconds
- mikro saniye sayısı:
microseconds
Örneğin, aşağıdaki ikisi eşittir
weeks=1
days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00
print(td_1w.days)
# 7
Timedelta nesneleri kullanarak çıkarma ve toplama
timedelta nesnesi, çıkarma ve toplama gibi işlemleri gerçekleştirmek için datetime ve date nesneleri ile birlikte kullanılabilir. Örneğin, bir hafta öncesini veya 10 gün sonrasını veya 50 dakika sonrasını kolayca hesaplayabilir ve alabilirsiniz.
d_1w = d_today - td_1w
print(d_1w)
# 2018-01-26
td_10d = datetime.timedelta(days=10)
print(td_10d)
# 10 days, 0:00:00
dt_10d = dt_now + td_10d
print(dt_10d)
# 2018-02-12 18:31:13.271231
td_50m = datetime.timedelta(minutes=50)
print(td_50m)
# 0:50:00
print(td_50m.seconds)
# 3000
dt_50m = dt_now + td_50m
print(dt_50m)
# 2018-02-02 19:21:13.271231
Belirli bir tarihe kadar olan gün sayısını hesaplamak için de kullanılabilir.
d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00
print(td.days)
# 903
strftime():Tarih ve saatten dizeye dönüştürme
datetime ve date nesnelerinin strftime() yöntemi, tarih ve saat (tarih ve saat) bilgilerini herhangi bir format biçiminde bir dizeye dönüştürmek için kullanılabilir.
biçimlendirme kodu
Mevcut biçimlendirme kodları için aşağıdaki resmi belgelere bakın.
Ana biçimlendirme kodları aşağıda listelenmiştir.
%d
:Ayın günü ondalık gösterimde sıfır ile doldurulur.%m
:Sıfır doldurulmuş ondalık gösterimde ay.%y
:Sıfır doldurulmuş ondalık gösterimde yılın son iki basamağı.%Y
:Sıfır doldurulmuş ondalık gösterimde yılın dört basamağı.%H
:Sıfır doldurulmuş ondalık gösterimde ifade edildiğinde (24 saatlik gösterim)%I
:Sıfır dolu (12 saatlik gösterim) ile ondalık gösterimde ifade edildiğinde%M
:Sıfır doldurulmuş ondalık gösterim için.%S
:Sıfır dolu ondalık gösterimde saniye.%f
:0 ile doldurulmuş ondalık gösterimde mikrosaniye (6 basamak).%A
:Yerel ayar için haftanın gününün adı%a
:Yerel ayar için günün adı (kısaltılmış form)%B
:Yerel ay adı%b
:Yerel ayar ay adı (kısaltılmış form)%j
:Sıfır dolgulu ondalık gösterimde yılın günü.%U
:Sıfır dolgulu ondalık gösterimde yılın hafta numarası (hafta Pazar günü başlar)%W
:Sıfır dolgulu ondalık gösterimde yılın hafta numarası (hafta Pazartesi günü başlar)
Gün ve ay adları için aşağıdaki biçimlendirme kodları, yerel ayara bağlı olarak farklı dizelerde elde edilebilir.
%A
%a
%B
%b
ISO 8601 biçim dizileri için özel bir yöntem de vardır.
Basit kod
print(dt_now.strftime('%Y-%m-%d %H:%M:%S'))
# 2018-02-02 18:31:13
print(d_today.strftime('%y%m%d'))
# 180202
print(d_today.strftime('%A, %B %d, %Y'))
# Friday, February 02, 2018
print('Day number (how many days in a year / January 1 is 001):', d_today.strftime('%j'))
print('Week number (the week starts on Sunday / New Year's Day is 00):', d_today.strftime('%U'))
print('Week number (the week begins on Monday / New Year's Day is 00):', d_today.strftime('%W'))
# Day number (how many days in a year / January 1 is 001): 033
# Week number (the week starts on Sunday / New Year's Day is 00): 04
# Week number (the week begins on Monday / New Year's Day is 00): 05
Bir dize yerine bir sayı almak istiyorsanız, onu int() ile bir tamsayıya dönüştürmeniz yeterlidir.
week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>
timedelta nesnesiyle birlikte, örneğin herhangi bir formatta iki haftada bir tarihlerin bir listesini oluşturmak kolaydır.
d = datetime.date(2018, 2, 1)
td = datetime.timedelta(weeks=2)
n = 8
f = '%Y-%m-%d'
l = []
for i in range(n):
l.append((d + i * td).strftime(f))
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']
print('\n'.join(l))
# 2018-02-01
# 2018-02-15
# 2018-03-01
# 2018-03-15
# 2018-03-29
# 2018-04-12
# 2018-04-26
# 2018-05-10
Liste anlama gösterimini kullanmak daha akıllıdır.
l = [(d + i * td).strftime(f) for i in range(n)]
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']
- İlgili Makaleler:Python liste anlama gösterimini kullanma
strptime():Dizeden tarih ve saate dönüştürme
datetime strptime(), bir tarih veya saat dizesinden bir datetime nesnesi oluşturmak için kullanılabilir. Orijinal dizeye karşılık gelen biçimlendirme dizesini belirtmek gerekir.
Ayrıca ISO 8601 dizeleri için özel bir yöntem vardır (Python 3.7 veya üstü).
Basit kod
date_str = '2018-2-1 12:30'
date_dt = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M')
print(date_dt)
# 2018-02-01 12:30:00
print(type(date_dt))
# <class 'datetime.datetime'>
Alınan datetime nesnesinde strftime() yöntemini kullanarak, tarih ve saati orijinal dizeden farklı bir biçimde gösterebilirsiniz.
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
Bunu bir datetime nesnesine dönüştürürseniz, timedelta nesneleri ile de işlemler gerçekleştirebilirsiniz, böylece örneğin aynı formatta 10 gün önceki bir tarihin dizesini oluşturabilirsiniz.
date_str = '2018-2-1'
date_format = '%Y-%m-%d'
td_10_d = datetime.timedelta(days=10)
date_dt = datetime.datetime.strptime(date_str, date_format)
date_dt_new = date_dt - td_10_d
date_str_new = date_dt_new.strftime(date_format)
print(date_str_new)
# 2018-01-22