Питхонова стандардна библиотека датум и време се може користити за обраду датума и времена (датума, времена и времена). Методе стрфтиме() и стрптиме(), које претварају датуме и времена у низове и из њих, могу се користити за манипулацију датумима и временом у различитим форматима.
Такође може да обавља операције као што су одузимање и сабирање. На пример, можете лако израчунати и добити датум пре 10 дана или 3 недеље од сада, или време за 50 минута.
Прво ћемо описати следеће класе објеката доступних у модулу датетиме.
datetime.datetime
:Датум и време (датум и време)datetime.date
:Датумdatetime.time
:времеdatetime.timedelta
:Временска разлика и протекло време
Методе стрфтиме() и стрптиме(), које међусобно конвертују датум/време и стринг, такође су објашњене.
datetime
објекатdatetime.now()
:Данашњи датум, тренутно времеdatetime
Конструктор објеката- Конвертовање објекта датума и времена у објекат датума
date
објекатdate.today()
:Данашњи датум- Конструктор за објекат датума
time
објекат- Конструктор за временски објекат
timedelta
објекат- Одузмите објекте датума и времена да бисте креирали објекте тимеделта.
- Конструктор за тимеделта објекат
- Одузимање и сабирање коришћењем тимеделта објеката
strftime()
:Конверзија из датума и времена у стрингstrptime()
:Конверзија из стринга у датум и време
У стандардну библиотеку је такође укључен модул календара, који генерише календаре у обичном тексту или ХТМЛ формату.
датетиме објекат
Објекат датетиме је објекат који има информације о датуму (година, месец, дан) и времену (сат, минут, секунда, микросекунда). Тим информацијама можете приступити помоћу следећих атрибута.
year
month
day
hour
minute
second
microsecond
datetime.now():Данашњи датум, тренутно време
датетиме.нов() ће вам дати објекат датетиме са данашњим датумом (тренутни датум) и тренутним временом.
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(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
Конвертовање објекта датума и времена у објекат датума
Објекат датетиме се може конвертовати у објекат датума методом дате(), као што је описано у наставку.
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():Данашњи датум
Објекат датума тренутног датума (данашњи датум) се може добити помоћу дате.тодаи().
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
тимеделта објекат
Објекат тимеделта је објекат који представља временску разлику између два датума и времена, или протекло време. Има информације у данима, секундама и микросекундама и може му се приступити помоћу атрибута дани, секунде и микросекунде. Такође је могуће добити укупан број секунди помоћу тотал_сецондс() методе.
Одузмите објекте датума и времена да бисте креирали објекат тимеделта.
Одузимање објеката датума и времена један од другог даје тимеделта објекат.
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(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Сви су опциони, а ако су изостављени, постављају се на 0.
Имајте на уму да објекат тимеделта садржи само следеће информације.
- неколико дана:
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
Одузимање и сабирање коришћењем тимеделта објеката
Објекат тимеделта се може користити са објектима датетиме и дате за обављање операција као што су одузимање и сабирање. На пример, можете лако израчунати и добити датум пре недељу дана или 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():Конверзија из датума и времена у стринг
Метод стрфтиме() за објекте датетиме и дате може се користити за претварање информација о датуму и времену (датум и време) у стринг у било ком формату формата.
код за форматирање
Погледајте званичну документацију у наставку за доступне кодове за форматирање.
Главни кодови за форматирање су наведени у наставку.
%d
:Дан у месецу у децималном запису са попуњеном нулом.%m
:Месец у децималним записима са попуњеном нулом.%y
:Последње две цифре године у децималном запису са нулом.%Y
:Четири цифре године у децималном запису са попуњеном нулом.%H
:Када се изрази у децималним записима са попуњеном нулом (24-часовни запис)%I
:Када се изрази у децималним записима са попуњеном нулом (12-часовни запис)%M
:За децимални запис са попуњеном нулом.%S
:Секунде у децималним записима са попуњеном нулом.%f
:Микросекунде (6 цифара) у децималним записима са 0 попуњеним.%A
:Назив дана у недељи за локалитет%a
:Назив дана за локал (скраћени облик)%B
:Локални назив месеца%b
:Локални назив месеца (скраћени облик)%j
:Дан у години у децималним записима са нултим попуњавањем.%U
:Број недеље у години у децималним записима са нултим попуњавањем (седмица почиње у недељу)%W
:Број недеље у години у децималним записима са нултим попуњавањем (седмица почиње у понедељак)
Следећи кодови за форматирање за називе дана и месеца могу се добити у различитим стринговима у зависности од локалитета.
%A
%a
%B
%b
Постоји и посебна метода за низове формата ИСО 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
Ако желите да добијете број уместо стринга, само га конвертујте у цео број помоћу инт().
week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>
У комбинацији са објектом тимеделта, лако је креирати, на пример, листу двонедељних датума у било ком формату.
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']
- Повезани чланци:Коришћење записа разумевања Питхон листе
strptime():Конверзија из стринга у датум и време
датетиме стрптиме() се може користити за креирање објекта датетиме од стринга датума или времена. Неопходно је навести стринг за форматирање који одговара оригиналном низу.
Постоји и наменски метод за ИСО 8601 низове (Питхон 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'>
Коришћењем методе стрфтиме() на преузетом објекту датетиме, можете представити датум и време у другачијем формату од оригиналног стринга.
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
Ако га конвертујете у објекат датума и времена, такође можете да изводите операције са објектима тимеделта, тако да, на пример, можете да генеришете низ датума пре 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