Python-ийн стандарт номын сангийн datetime нь огноо, цагийг (огноо, цаг, цаг) боловсруулахад ашиглаж болно. Огноо, цагийг мөр рүү хөрвүүлдэг strftime() ба strptime() аргуудыг янз бүрийн форматаар огноо, цагийг удирдахад ашиглаж болно.
Мөн хасах, нэмэх зэрэг үйлдлүүдийг гүйцэтгэх боломжтой. Жишээлбэл, та 10 хоногийн өмнөх эсвэл 3 долоо хоногийн дараа буюу 50 минутын дараах цагийг хялбархан тооцоолж, авах боломжтой.
Эхлээд бид datetime модульд байгаа дараах объектуудын ангиллыг тайлбарлах болно.
datetime.datetime
:Огноо, цаг (огноо, цаг)datetime.date
:Огнооdatetime.time
:Цаг хугацааdatetime.timedelta
:Цагийн зөрүү ба өнгөрсөн хугацаа
Огноо/цаг болон мөрийг хооронд нь хөрвүүлдэг strftime() ба strptime() аргуудыг мөн тайлбарласан.
datetime
обьектdatetime.now()
:Өнөөдрийн огноо, одоогийн цагdatetime
Объект бүтээгч- Datetime объектыг огнооны объект руу хөрвүүлэх
date
обьектdate.today()
:Өнөөдрийн болзоо- Огнооны объектын бүтээгч
time
обьект- Цаг хугацааны объектын бүтээгч
timedelta
обьект- timedelta объект үүсгэхийн тулд огноо, огнооны объектуудыг хасна уу.
- Timedelta объектын бүтээгч
- Timedelta объектуудыг ашиглан хасах, нэмэх
strftime()
:Огноо, цагийг мөр рүү хөрвүүлэхstrptime()
:Мөрөөс огноо, цаг руу хөрвүүлэх
Мөн стандарт номын санд календарийн модуль багтсан бөгөөд энэ нь энгийн текст эсвэл HTML форматаар хуанли үүсгэдэг.
огноо цагийн объект
Огноо (жил, сар, өдөр) болон цаг (цаг, минут, секунд, микросекунд) гэсэн хоёр мэдээлэлтэй объектыг огноо цагийн объект гэнэ. Та эдгээр мэдээлэлд дараах шинж чанаруудыг ашиглан хандах боломжтой.
year
month
day
hour
minute
second
microsecond
datetime.now():Өнөөдрийн огноо, одоогийн цаг
datetime.now() нь танд өнөөдрийн огноо (одоогийн огноо) болон одоогийн цаг бүхий datetime объектыг өгөх болно.
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 объектын бүтээгч
Мөн дурын огноо, цагт зориулж datetime объект үүсгэх боломжтой.
Datetime объектын үүсгэгч нь дараах байдалтай байна.
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Дараах утгуудыг оруулах шаардлагатай бөгөөд бусад зүйлийг орхигдуулж болно. Хэрэв орхигдуулсан бол өгөгдмөл утга нь 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
Datetime объектыг огнооны объект руу хөрвүүлэх
Дараа нь тайлбарласны дагуу datetime объектыг date() аргаар огнооны объект руу хөрвүүлж болно.
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'>
огнооны объект
Огнооны объект нь огнооны (жил, сар, өдөр) талаарх мэдээллийг агуулсан объект юм. Үүнд жил, сар, өдөр гэсэн шинж чанаруудаар хандаж болно.
date.today():Өнөөдрийн болзоо
Одоогийн огнооны огнооны объектыг (өнөөдрийн огноо) 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
Огнооны объектын бүтээгч
Огнооны объектын үүсгэгч нь дараах байдалтай байна
date(year, month, day)
Бүгд шаардлагатай бөгөөд орхигдуулж болохгүй.
d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01
print(d.month)
# 2
цаг хугацааны объект
Цагийн объект нь цаг хугацааны талаарх мэдээллийг (цаг, минут, секунд, микросекунд) агуулсан объект юм. Үүнд цаг, минут, секунд, микросекунд гэсэн шинж чанаруудыг ашиглан хандаж болно.
Цаг хугацааны объектын бүтээгч
Цаг хугацааны объектын бүтээгч нь дараах байдалтай байна.
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Эдгээр нь бүгд сонголттой бөгөөд хэрэв тэдгээрийг орхигдуулсан бол 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
timedelta объект
Timedelta объект нь хоёр огноо, цагийн хоорондох цагийн зөрүү буюу өнгөрсөн цагийг илэрхийлдэг объект юм. Энэ нь өдөр, секунд, микросекундын мэдээлэлтэй бөгөөд өдөр, секунд, микросекундын шинж чанаруудаар хандах боломжтой. Мөн total_seconds() аргыг ашиглан нийт секундын тоог авах боломжтой.
timedelta объект үүсгэхийн тулд огноо, огнооны объектуудыг хасна уу.
Datetime объектуудыг бие биенээсээ хасвал 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
Огнооны объектуудыг бие биенээсээ хасах нь ижил төстэй байдлаар timedelta объектыг үүсгэдэг.
Timedelta объектын бүтээгч
Timedelta объектын бүтээгч нь дараах байдалтай байна
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Эдгээр нь бүгд сонголттой бөгөөд хэрэв тэдгээрийг орхигдуулсан бол 0 гэж тохируулна.
Timedelta объект нь зөвхөн дараах мэдээллийг агуулна гэдгийг анхаарна уу.
- хэд хэдэн өдөр:
days
- секундын тоо:
seconds
- микросекундын тоо:
microseconds
Жишээлбэл, дараах хоёр нь тэнцүү байна
weeks=1
days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00
print(td_1w.days)
# 7
Timedelta объектуудыг ашиглан хасах, нэмэх
Timedelta объектыг огноо, огнооны объектуудтай хамт хасах, нэмэх зэрэг үйлдлүүдийг гүйцэтгэх боломжтой. Жишээлбэл, та долоо хоногийн өмнөх эсвэл 10 хоногийн дараа буюу 50 минутын дараах цагийг хялбархан тооцоолж, авах боломжтой.
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
Энэ нь тодорхой огноо хүртэл хэдэн өдрийн тоог тооцоолоход ашиглаж болно.
d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00
print(td.days)
# 903
strftime():Огноо, цагийг мөр рүү хөрвүүлэх
Datetime болон огнооны объектуудын strftime() аргыг ашиглан огноо, цаг (огноо, цаг) мэдээллийг ямар ч форматын стринг болгон хөрвүүлэх боломжтой.
форматлах код
Боломжтой форматын кодуудыг доорх албан ёсны баримт бичгээс харна уу.
Гол форматын кодуудыг доор жагсаав.
%d
:Тэгээр дүүргэсэн аравтын бутархайт сарны өдөр.%m
:Сарыг аравтын бутархайгаар, тэгээр дүүргэсэн.%y
:Жилийн сүүлийн хоёр цифрийг тэгээр дүүргэсэн аравтын бутархай тэмдэглэгээ.%Y
:Аравтын бутархайт жилийн дөрвөн оронтой тоог тэгээр дүүргэсэн.%H
:Тэгээр дүүргэсэн аравтын бутархай тэмдэглэгээгээр илэрхийлэхэд (24 цагийн тэмдэглэгээ)%I
:Тэгээр дүүргэсэн аравтын бутархай тэмдэглэгээгээр илэрхийлсэн бол (12 цагийн тэмдэглэгээ)%M
:Тэгээр дүүргэсэн аравтын бутархайн тэмдэглэгээний хувьд.%S
:Тэгээр дүүргэсэн аравтын бутархайт секунд.%f
:0-ээр дүүргэсэн аравтын бутархайн бичил секунд (6 орон).%A
:Орон нутгийн долоо хоногийн өдрийн нэр%a
:Тухайн нутгийн өдрийн нэр (товчилсон хэлбэр)%B
:Орон нутгийн сарын нэр%b
:Орон нутгийн сарын нэр (товчилсон хэлбэр)%j
:Аравтын бутархай тэмдэглэгээтэй, тэг дүүргэлттэй жилийн өдөр.%U
:Аравтын бутархайгаар тэмдэглэсэн жилийн долоо хоногийн дугаар (долоо хоног Ням гарагт эхэлнэ)%W
:Аравтын бутархайгаар тэмдэглэсэн жилийн долоо хоногийн дугаар (долоо хоног Даваа гарагт эхэлнэ)
Дараахь өдөр, сарын нэрсийн форматын кодыг тухайн бүс нутгаас хамааран өөр өөр мөрөнд авч болно.
%A
%a
%B
%b
ISO 8601 форматын мөрүүдэд зориулсан тусгай арга бас байдаг.
Жишээ код
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
Хэрэв та мөрийн оронд тоо авахыг хүсвэл үүнийг int() ашиглан бүхэл тоо болгон хөрвүүлээрэй.
week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>
Timedelta объекттой хослуулан, жишээлбэл, хоёр долоо хоног тутмын огнооны жагсаалтыг дурын форматаар үүсгэхэд хялбар байдаг.
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
Жагсаалтыг ойлгох тэмдэглэгээг ашиглах нь илүү ухаалаг байдаг.
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']
- Холбоотой нийтлэлүүд:Python жагсаалтын ойлголтын тэмдэглэгээг ашиглах
strptime():Мөрөөс огноо, цаг руу хөрвүүлэх
datetime strptime() нь огноо эсвэл цагийн мөрөөс datetime объект үүсгэхэд ашиглагдаж болно. Анхны мөрөнд тохирох форматын мөрийг зааж өгөх шаардлагатай.
ISO 8601 мөрүүдэд зориулсан тусгай арга бас байдаг (Python 3.7 ба түүнээс дээш).
Жишээ код
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'>
Татаж авсан datetime объект дээр strftime() аргыг ашигласнаар та огноо, цагийг анхны мөрөөс өөр форматаар илэрхийлж болно.
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
Хэрэв та үүнийг datetime объект руу хөрвүүлбэл, мөн timedelta объектуудтай үйлдлүүдийг хийж болох ба жишээлбэл, 10 хоногийн өмнөх огнооны мөрийг ижил форматаар үүсгэж болно.
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