Ngonversi tanggal lan wektu menyang lan saka strings ing Python datetime (strftime, strptime)

Bisnis

datetime perpustakaan standar Python bisa digunakake kanggo ngolah tanggal lan wektu (tanggal, wektu lan wektu). Cara strftime () lan strptime (), sing ngowahi tanggal lan kaping menyang lan saka strings, bisa digunakake kanggo manipulasi tanggal lan kaping ing macem-macem format.

Uga bisa nindakake operasi kayata subtraction lan tambahan. Contone, sampeyan bisa kanthi gampang ngetung lan entuk tanggal 10 dina kepungkur utawa 3 minggu saka saiki, utawa wektu 50 menit saka saiki.

Kaping pisanan, kita bakal njlèntrèhaké kelas obyek ing ngisor iki sing kasedhiya ing modul datetime.

  • datetime.datetime:Tanggal lan wektu (tanggal lan wektu)
  • datetime.date:Tanggal
  • datetime.time:Wektu
  • datetime.timedelta:Bedane wektu lan wektu sing wis suwe

Cara strftime () lan strptime (), sing ngowahi tanggal / wektu lan senar kanggo saben liyane, uga diterangno.

  • datetimeobyek
    • datetime.now():Tanggal saiki, wektu saiki
    • datetimeKonstruktor Obyek
    • Ngonversi obyek datetime menyang obyek tanggal
  • dateobyek
    • date.today():Tanggal dina iki
    • Konstruktor kanggo obyek tanggal
  • timeobyek
    • Konstruktor kanggo obyek wektu
  • timedeltaobyek
    • Ngurangi obyek datetime lan tanggal kanggo nggawe obyek timedelta.
    • Konstruktor kanggo obyek timedelta
    • Subtraction lan tambahan nggunakake obyek timedelta
  • strftime():Konversi saka tanggal lan wektu kanggo senar
  • strptime():Konversi saka string menyang tanggal lan wektu

Uga kalebu ing perpustakaan standar yaiku modul tanggalan, sing ngasilake tanggalan ing teks biasa utawa format HTML.

obyek datetime

Objek datetime yaiku obyek sing nduweni informasi tanggal (taun, sasi, dina) lan wektu (jam, menit, detik, mikrodetik). Sampeyan bisa ngakses informasi kasebut kanthi atribut ing ngisor iki.

  • year
  • month
  • day
  • hour
  • minute
  • second
  • microsecond

datetime.now():Tanggal saiki, wektu saiki

datetime.now () bakal menehi obyek datetime karo tanggal dina (tanggal saiki) lan wektu saiki.

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

Konstruktor kanggo obyek datetime

Sampeyan uga bisa ngasilake obyek datetime kanggo tanggal lan wektu sing sewenang-wenang.

Konstruktor kanggo obyek datetime kaya ing ngisor iki.

datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

Nilai ing ngisor iki dibutuhake lan liyane bisa diilangi. Yen diilangi, nilai standar yaiku 0.

  • 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

Ngonversi obyek datetime menyang obyek tanggal

Objek datetime bisa diowahi dadi obyek tanggal kanthi metode tanggal (), kaya sing diterangake ing ngisor iki.

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'>

obyek tanggal

Objek tanggal yaiku obyek sing ngemot informasi babagan tanggal (taun, sasi, dina). Bisa diakses kanthi atribut taun, sasi, lan dina.

date.today():Tanggal dina iki

Objek tanggal tanggal saiki (tanggal saiki) bisa dipikolehi karo date.today ().

d_today = datetime.date.today()
print(d_today)
# 2018-02-02

print(type(d_today))
# <class 'datetime.date'>

print(d_today.year)
# 2018

Konstruktor kanggo obyek tanggal

Konstruktor kanggo obyek tanggal kaya ing ngisor iki

date(year, month, day)

Kabeh dibutuhake lan ora bisa diilangi.

d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01

print(d.month)
# 2

obyek wektu

Objek wektu yaiku obyek sing ngemot informasi babagan wektu (jam, menit, detik, lan mikrodetik). Bisa diakses nggunakake atribut jam, menit, detik, lan mikrodetik.

Konstruktor kanggo obyek wektu

Konstruktor obyek wektu kaya ing ngisor iki.

time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

Kabeh mau opsional, lan yen diilangi, disetel dadi 0.

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

obyek timedelta

Objek timedelta minangka obyek sing nuduhake prabédan wektu antarane rong tanggal lan wektu, utawa wektu sing wis liwati. Nduwe informasi ing dina, detik, lan mikrodetik, lan bisa diakses kanthi atribut dina, detik, lan mikrodetik. Sampeyan uga bisa kanggo njaluk nomer total detik nggunakake total_seconds () cara.

Ngurangi obyek datetime lan tanggal kanggo nggawe obyek timedelta.

Ngurangi obyek datetime saka saben liyane ngasilake obyek timedelta.

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

Pengurangan obyek tanggal saka saben liyane uga ngasilake obyek timedelta.

Konstruktor kanggo obyek timedelta

Konstruktor obyek timedelta minangka nderek

timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

Kabeh mau opsional, lan yen diilangi, disetel dadi 0.

Elinga yen obyek timedelta mung ngemot informasi ing ngisor iki.

  • sawetara dina:days
  • nomer detik:seconds
  • jumlah mikrodetik:microseconds

Contone, loro ing ngisor iki padha

  • weeks=1
  • days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00

print(td_1w.days)
# 7

Subtraction lan tambahan nggunakake obyek timedelta

Obyek timedelta bisa digunakake karo obyek datetime lan tanggal kanggo nindakake operasi kayata subtraction lan tambahan. Contone, sampeyan bisa kanthi gampang ngetung lan entuk tanggal seminggu kepungkur utawa 10 dina saka saiki, utawa wektu 50 menit saka saiki.

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

Uga bisa digunakake kanggo ngetung jumlah dina nganti tanggal tartamtu.

d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00

print(td.days)
# 903

strftime():Konversi saka tanggal lan wektu kanggo senar

Metode strftime () datetime lan obyek tanggal bisa digunakake kanggo ngowahi informasi tanggal lan wektu (tanggal lan wektu) dadi senar ing format format apa wae.

kode format

Deleng dokumentasi resmi ing ngisor iki kanggo kode format sing kasedhiya.

Kode format utama kapacak ing ngisor iki.

  • %d:Dina sasi ing notasi desimal kanthi nol diisi.
  • %m:Wulan ing notasi desimal kanthi nol diisi.
  • %y:Rong digit pungkasan taun ing notasi desimal sing diisi nol.
  • %Y:Sekawan digit taun ing notasi desimal kanthi nol diisi.
  • %H:Yen ditulis ing notasi desimal kanthi nol diisi (notasi 24 jam)
  • %I:Yen ditulis ing notasi desimal kanthi nol diisi (notasi 12 jam)
  • %M:Kanggo notasi desimal kanthi nol diisi.
  • %S:Detik ing notasi desimal kanthi nol diisi.
  • %f:Microseconds (6 digit) ing notasi desimal kanthi 0 diisi.
  • %A:Jeneng dina minggu kanggo lokal
  • %a:Jeneng dina kanggo lokal (wangun singkatan)
  • %B:Jeneng sasi lokal
  • %b:Jeneng sasi lokal (bentuk singkatan)
  • %j:Dina taun ing notasi desimal kanthi nol isi.
  • %U:Nomer minggu taun ing notasi desimal kanthi nol isi (minggu diwiwiti dina Minggu)
  • %W:Nomer minggu taun ing notasi desimal kanthi nol isi (minggu diwiwiti dina Senin)

Kode format ing ngisor iki kanggo jeneng dina lan sasi bisa dipikolehi ing senar sing beda-beda gumantung saka lokal.

  • %A
  • %a
  • %B
  • %b

Ana uga cara khusus kanggo string format ISO 8601.

Kode Sampel

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

Yen sampeyan pengin njaluk nomer tinimbang senar, mung Ngonversi menyang integer karo int ().

week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>

Ing kombinasi karo obyek timedelta, iku gampang kanggo nggawe, contone, dhaptar tanggal saben rong minggu ing format sembarang.

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

Nggunakake notasi pangerten dhaptar luwih pinter.

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():Konversi saka string menyang tanggal lan wektu

datetime strptime () bisa digunakake kanggo nggawe obyek datetime saka string tanggal utawa wektu. Sampeyan kudu nemtokake string format sing cocog karo string asli.

Ana uga cara khusus kanggo senar ISO 8601 (Python 3.7 utawa luwih anyar).

Kode Sampel

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'>

Kanthi nggunakake cara strftime () ing obyek datetime dijupuk, sampeyan bisa makili tanggal lan wektu ing format beda saka senar asli.

print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30

Yen sampeyan ngowahi menyang obyek datetime, sampeyan uga bisa nindakake operasi karo obyek timedelta, contone, sampeyan bisa generate senar tanggal 10 days ago ing format padha.

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