Ang karaniwang oras ng aklatan ng Python ay maaaring gamitin upang iproseso ang mga petsa at oras (mga petsa, oras at oras). Ang mga pamamaraan na strftime() at strptime(), na nagko-convert ng mga petsa at oras sa at mula sa mga string, ay maaaring gamitin upang manipulahin ang mga petsa at oras sa iba’t ibang mga format.
Maaari rin itong magsagawa ng mga operasyon tulad ng pagbabawas at pagdaragdag. Halimbawa, madali mong kalkulahin at makuha ang petsa 10 araw ang nakalipas o 3 linggo mula ngayon, o ang oras 50 minuto mula ngayon.
Una, ilalarawan namin ang mga sumusunod na klase ng mga bagay na magagamit sa module ng datetime.
datetime.datetime
:Petsa at oras (petsa at oras)datetime.date
:Petsadatetime.time
:Orasdatetime.timedelta
:Pagkakaiba ng oras at lumipas na oras
Ang mga pamamaraan na strftime() at strptime(), na nagko-convert ng petsa/oras at string sa isa’t isa, ay ipinaliwanag din.
datetime
bagaydatetime.now()
:Petsa ngayon, kasalukuyang orasdatetime
Tagabuo ng Bagay- Pag-convert ng datetime object sa date object
date
bagaydate.today()
:Petsa ngayon- Tagabuo para sa object ng petsa
time
bagay- Tagabuo para sa bagay na oras
timedelta
bagay- Ibawas ang datetime at date object para gumawa ng timedelta object.
- Constructor para sa timedelta object
- Pagbabawas at pagdaragdag gamit ang mga bagay na timedelta
strftime()
:Conversion mula sa petsa at oras sa stringstrptime()
:Conversion mula sa string hanggang sa petsa at oras
Kasama rin sa karaniwang library ang module ng kalendaryo, na bumubuo ng mga kalendaryo sa plain text o HTML na format.
object ng datetime
Ang datetime object ay isang object na may parehong petsa (taon, buwan, araw) at oras (oras, minuto, segundo, microsecond) na impormasyon. Maa-access mo ang impormasyong iyon gamit ang mga sumusunod na katangian.
year
month
day
hour
minute
second
microsecond
datetime.now():Petsa ngayon, kasalukuyang oras
datetime.now() ay magbibigay sa iyo ng datetime object na may petsa ngayon (ang kasalukuyang petsa) at ang kasalukuyang oras.
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
Constructor para sa datetime object
Posible rin na bumuo ng mga datetime object para sa mga arbitrary na petsa at oras.
Ang constructor para sa datetime object ay ang mga sumusunod.
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Ang mga sumusunod na halaga ay kinakailangan at ang iba ay maaaring tanggalin. Kung tinanggal, ang default na halaga ay 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
Pag-convert ng datetime object sa date object
Ang isang datetime object ay maaaring ma-convert sa isang date object sa pamamagitan ng date() method, gaya ng inilarawan sa susunod.
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'>
bagay sa petsa
Ang object ng petsa ay isang bagay na naglalaman ng impormasyon tungkol sa isang petsa (taon, buwan, araw). Maaari itong ma-access sa pamamagitan ng mga katangian ng taon, buwan, at araw.
date.today():Petsa ngayon
Ang object ng petsa ng kasalukuyang petsa (petsa ngayon) ay maaaring makuha gamit ang 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
Tagabuo para sa object ng petsa
Ang constructor para sa date object ay ang mga sumusunod
date(year, month, day)
Lahat ay kinakailangan at hindi maaaring tanggalin.
d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01
print(d.month)
# 2
bagay sa oras
Ang time object ay isang bagay na naglalaman ng impormasyon tungkol sa oras (oras, minuto, segundo, at microsecond). Maaari itong ma-access gamit ang mga katangiang oras, minuto, segundo, at microsecond.
Tagabuo para sa bagay na oras
Ang constructor ng time object ay ang mga sumusunod.
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Lahat ng mga ito ay opsyonal, at kung aalisin ang mga ito, itatakda ang mga ito sa 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
bagay na timedelta
Ang timedelta object ay isang bagay na kumakatawan sa pagkakaiba ng oras sa pagitan ng dalawang petsa at oras, o ang lumipas na oras. Mayroon itong impormasyon sa mga araw, segundo, at microsecond, at maaaring ma-access ng mga attribute na araw, segundo, at microsecond. Posible ring makuha ang kabuuang bilang ng mga segundo gamit ang total_seconds() na pamamaraan.
Ibawas ang datetime at date object para gumawa ng timedelta object.
Ang pagbabawas ng mga datetime object mula sa isa’t isa ay magbubunga ng timedelta object.
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
Ang pagbabawas ng mga bagay sa petsa mula sa isa’t isa ay katulad na nagbubunga ng isang timedelta object.
Constructor para sa timedelta object
Ang constructor ng timedelta object ay ang mga sumusunod
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Lahat ng mga ito ay opsyonal, at kung aalisin ang mga ito, itatakda ang mga ito sa 0.
Tandaan na ang bagay na timedelta ay nagtataglay lamang ng sumusunod na impormasyon.
- ilang araw:
days
- bilang ng mga segundo:
seconds
- bilang ng microsecond:
microseconds
Halimbawa, ang sumusunod na dalawa ay pantay
weeks=1
days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00
print(td_1w.days)
# 7
Pagbabawas at pagdaragdag gamit ang mga bagay na timedelta
Maaaring gamitin ang timedelta object kasama ang datetime at date object para magsagawa ng mga operasyon gaya ng pagbabawas at pagdaragdag. Halimbawa, madali mong kalkulahin at makuha ang petsa isang linggo na ang nakalipas o 10 araw mula ngayon, o ang oras 50 minuto mula ngayon.
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
Maaari din itong gamitin upang kalkulahin ang bilang ng mga araw hanggang sa isang tiyak na petsa.
d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00
print(td.days)
# 903
strftime():Conversion mula sa petsa at oras sa string
Ang strftime() na paraan ng datetime at date object ay maaaring gamitin upang i-convert ang petsa at oras (petsa at oras) na impormasyon sa isang string sa anumang format na format.
code sa pag-format
Tingnan ang opisyal na dokumentasyon sa ibaba para sa mga available na formatting code.
Ang mga pangunahing formatting code ay nakalista sa ibaba.
%d
:Araw ng buwan sa decimal notation na may zero filled.%m
:Buwan sa decimal notation na may zero filled.%y
:Ang huling dalawang digit ng taon sa zero-filled decimal notation.%Y
:Apat na digit ng taon sa decimal notation na may zero filled.%H
:Kapag ipinahayag sa decimal notation na may zero filled (24-hour notation)%I
:Kapag ipinahayag sa decimal notation na may zero filled (12-hour notation)%M
:Para sa decimal notation na may zero filled.%S
:Mga segundo sa decimal notation na may zero filled.%f
:Microseconds (6 na digit) sa decimal notation na may 0 na napunan.%A
:Pangalan ng araw ng linggo para sa lokal%a
:Pangalan ng araw para sa lokal (pinaikling anyo)%B
:Pangalan ng buwan ng lokal%b
:Pangalan ng buwan ng lokal (pinaikling anyo)%j
:Araw ng taon sa decimal notation na may zero fill.%U
:Numero ng linggo ng taon sa decimal notation na may zero fill (magsisimula ang linggo sa Linggo)%W
:Numero ng linggo ng taon sa decimal notation na may zero fill (magsisimula ang linggo sa Lunes)
Ang mga sumusunod na code sa pag-format para sa mga pangalan ng araw at buwan ay maaaring makuha sa iba’t ibang mga string depende sa lokal.
%A
%a
%B
%b
Mayroon ding nakalaang paraan para sa ISO 8601 format string.
Halimbawang Code
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
Kung gusto mong makakuha ng numero sa halip na isang string, i-convert lang ito sa isang integer na may int().
week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>
Sa kumbinasyon ng timedelta object, madaling gumawa, halimbawa, isang listahan ng mga biweekly na petsa sa anumang format.
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
Ang paggamit ng notasyon sa pag-unawa sa listahan ay mas matalino.
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']
- Mga Kaugnay na Artikulo:Paggamit ng Python list comprehension notation
strptime():Conversion mula sa string hanggang sa petsa at oras
datetime strptime() ay maaaring gamitin upang lumikha ng isang datetime object mula sa isang string ng petsa o oras. Kinakailangang tukuyin ang pag-format ng string na naaayon sa orihinal na string.
Mayroon ding nakalaang pamamaraan para sa ISO 8601 string (Python 3.7 o mas bago).
Halimbawang Code
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'>
Sa pamamagitan ng paggamit ng strftime() method sa nakuhang datetime object, maaari mong katawanin ang petsa at oras sa ibang format kaysa sa orihinal na string.
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
Kung iko-convert mo ito sa isang datetime object, maaari ka ring magsagawa ng mga operasyon sa mga timedelta object, kaya halimbawa, maaari kang bumuo ng string ng isang petsa 10 araw na ang nakalipas sa parehong format.
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