Python tarih saatinde (strftime, strptime) tarih ve saatleri dizelere ve dizelerden dönüştürme

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:Tarih
  • datetime.time:Zaman
  • datetime.timedelta:Saat farkı ve geçen süre

Tarih/saat ve dizgiyi birbirine çeviren strftime() ve strptime() yöntemleri de açıklanmıştır.

  • datetimenesne
    • datetime.now():Bugünün tarihi, şimdiki zaman
    • datetimeNesne Oluşturucu
    • Bir tarih saat nesnesini bir tarih nesnesine dönüştürme
  • datenesne
    • date.today():Bugünün tarihi
    • Tarih nesnesi için yapıcı
  • timenesne
    • zaman nesnesi için yapıcı
  • timedeltanesne
    • 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ürme
  • strptime():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']

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
Copied title and URL