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 нысандарын жасау үшін datetime және date нысандарын шегеріңіз.
- timedelta нысаны үшін конструктор
- Timedelta нысандарын пайдаланып алу және қосу
strftime()
:Күн мен уақыттан жолға түрлендіруstrptime()
:Жолдан күн мен уақытқа түрлендіру
Сондай-ақ стандартты кітапханаға күнтізбелік модуль кіреді, ол кәдімгі мәтін немесе HTML пішімінде күнтізбелерді жасайды.
datetime нысаны
Дата-time объектісі – бұл күні (жыл, ай, күн) және уақыт (сағат, минут, секунд, микросекунд) ақпараты бар нысан. Сіз бұл ақпаратқа келесі атрибуттармен қол жеткізе аласыз.
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 және date нысандарын шегеріңіз.
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 нысанын азайту және қосу сияқты әрекеттерді орындау үшін datetime және date нысандарымен бірге пайдалануға болады. Мысалы, бір апта бұрын немесе 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 және date нысандарының 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