Класс datetime() модуля datetime
Создание объекта даты и времени.
Синтаксис:
import datetime
dt = datetime.datetime(year, month, day, hour=0,
minute=0, second=0, microsecond=0,
tzinfo=None, *, fold=0)
Параметры:
Аргументы year
, month
и day
обязательны. Аргумент tzinfo
может быть None
или экземпляром подкласса datetime.tzinfo
. Остальные аргументы должны быть целыми числами:
year
- год в пределахdatetime.MINYEAR <= year <= datetime.MAXYEAR
,month
- месяц в пределах1 <= month <= 12
,day
- день в пределах1 <= day <= n_day
, n_day - количество дней в данном месяце и году,hour=0
- часы в пределах0 <= hour < 24
,minute=0
- часы в пределах0 <= minute < 60
,second=0
- секунды в пределах0 <= second < 60
,microsecond=0
- микросекунды в пределах0 <= microsecond < 1000000
,tzinfo=None
- может бытьNone
или экземпляром подклассаdatetime.tzinfo
. Дополнительно смотрите модульzoneinfo
(добавлен в Python 3.9) - конкретная реализация часового пояса для поддержки базы данных часовых поясов IANA,fold=0
-[0, 1]
.
Если задан аргумент вне этих диапазонов, вызывается исключение ValueError
.
Возвращаемое значение:
Описание:
Класс datetime()
модуля datetime
это отдельный объект, объединяющий всю информацию из объекта даты datetime.date
и объекта времени datetime.time
.
Как и объект даты
datetime.date()
иdatetime.time()
предполагает использование текущего григорианского календаря в обоих направлениях.Подобно объекту времени
datetime.time()
,datetime.datetime()
предполагает, что каждый день есть ровно 3600 * 24 секунд.
Поддерживаемые операции с объектом datetime.datetime()
рассматриваются ниже.
Методы экземпляра класса datetime.datetime()
рассматриваются в следующем разделе.
Атрибуты экземпляра класса datetime.datetime()
, доступны только для чтения:
dt.year
- возвращает год как целое число,dt.month
- возвращает месяц как число от 1 до 12 включительно,dt.day
- возвращает день от 1 до количества дней в данном месяце данного года,dt.hour
- возвращает час в диапазонеrange(24)
,dt.minute
- возвращает минуты в диапазонеrange(60)
,dt.second
- возвращает секунды в диапазонеrange(60)
,dt.microsecond
- возвращает секунды в диапазонеrange(1000000)
,dt.tzinfo
- возвращает объект, переданный в качестве аргументаtzinfo
илиNone
, если ничего не было передано.dt.fold
- возвращает зимнее 0 или летнее 1 время. Используется для устранения неоднозначности времени в момент перехода с зимнего на летнее время и обратно, когда смещение UTC для текущей зоны уменьшается или увеличивается.
>>> import datetime
>>> date = datetime.datetime(2021, 7, 14)
>>> date
# datetime.datetime(2021, 7, 14, 0, 0)
>>> print(date.day, date.month, date.year)
# 14 7 2021
>>> print(date.hour, date.minute, date.second)
0 0 0
Создание объекта datetime.datetime
другими способами:
datetime.datetime
другими способами:Текущая локальная дата и время
datetime.datetime.today()
,Текущая локальная дата и время
datetime.datetime.now()
,Текущая дата и время UTC
datetime.datetime.utcnow()
,Из
timestamp
datetime.datetime.fromtimestamp()
,Дата и время UTC из
timestamp
datetime.datetime.utcfromtimestamp()
,Из
datetime.date
+datetime.time
datetime.datetime.combine()
,Из строки ISO
datetime.datetime.fromisoformat()
,Из календарной даты ISO,
datetime.datetime.fromisocalendar()
,Из строки
datetime.datetime.strptime()
.
datetime.datetime.today()
:
Метод datetime.datetime.today()
возвращает текущую локальную дату и время с tzinfo=None
.
Метод эквивалентен вызову
datetime.datetime.fromtimestamp(time.time())
,Метод функционально эквивалентен
datetime.datetime.now()
, но без параметраtz
.
>>> import datetime
>>> datetime.datetime.today()
# datetime.datetime(2020, 5, 5, 14, 56, 40, 902733)
Смотрите также метод datetime.datetime.fromtimestamp()
.
datetime.datetime.now(tz=None)
:
Метод datetime.datetime.now()
возвращает текущую локальную дату и время.
Если необязательный аргумент tz
равен None
или не указан, то метод похож на datetime.datetime.today()
, но, если возможно, обеспечивает большую точность, чем полученную от функции time.time()
.
Если параметр tz
не None
, то это должен быть экземпляр подкласса datetime.tzinfo
, а текущие дата и время конвертируются в часовой пояс tz
. Дополнительно смотрите модуль zoneinfo
(добавлен в Python 3.9) - конкретная реализация часового пояса для поддержки базы данных часовых поясов IANA.
>>> import datetime
>>> datetime.datetime.now()
# datetime.datetime(2020, 5, 5, 15, 5, 3, 204585)
Смотрите также метод создания объекта даты и времени datetime.datetime.utcnow()
.
datetime.datetime.utcnow()
:
Метод datetime.datetime.utcnow()
возвращает текущую дату и время UTC, с tzinfo=None
.
Метод похож на datetime.datetime.now()
, но возвращает текущую дату и время UTC как "наивный" объект модуля datetime
. Узнать текущую дату и время UTC можно вызвав datetime.datetime.now(datetime.timezone.utc)
.
Предупреждение. Поскольку "наивные" объекты модуля datetime
обрабатываются многими методами объекта datetime.datetime()
как локальное время, предпочтительно использовать "осведомленные" объекты модуля, c представлением времени в UTC. Таким образом, рекомендуемый способ создания объекта, представляющего текущее время в UTC, заключается в вызове datetime.datetime.now(datetime.timezone.utc)
.
>>> import datetime
>>> datetime.datetime.utcnow()
# datetime.datetime(2020, 5, 5, 12, 12, 53, 436626)
# рекомендуемый способ создания объекта c текущим временем в UTC
>>> datetime.datetime.now(datetime.timezone.utc)
# datetime.datetime(2020, 5, 5, 12, 13, 17, 243930, tzinfo=datetime.timezone.utc)
datetime.datetime.fromtimestamp(timestamp, tz=None)
:
Метод datetime.datetime.fromtimestamp()
возвращает локальную дату и время, соответствующие метке времени POSIX time.time()
.
Если необязательный аргумент tz=None
или не указан, отметка времени преобразуется в локальные дату и время платформы, а возвращаемый объект datetime.datetime()
является "наивным", т.е. не несет информации о часовом поясе.
Если аргумент tz
не None
, то это должен быть экземпляр подкласса datetime.tzinfo
, а временная метка преобразуется в часовой пояс tz
. Дополнительно смотрите модуль zoneinfo
(добавлен в Python 3.9) - конкретная реализация часового пояса для поддержки базы данных часовых поясов IANA.
Метод datetime.datetime.fromtimestamp()
может вызвать исключение OverflowError
, если отметка времени выходит за пределы диапазона значений, поддерживаемых функциями платформы и исключение OSError
при сбое localtime()
или gmtime()
. Отметка времени обычно ограничивается годами с 1970 по 2038 год.
>>> import datetime, time
>>> sec = time.time()
>>> sec
# 1588681784.4106905
>>> datetime.datetime.fromtimestamp(sec)
# datetime.datetime(2020, 5, 5, 15, 29, 44, 410691)
Этот метод предпочтительнее, чем datetime.datetime.utcfromtimestamp()
.
datetime.datetime.utcfromtimestamp(timestamp)
:
Метод datetime.datetime.utcfromtimestamp()
возвращает дату и время UTC, соответствующие метке времени POSIX, с tz=None
. Полученный объект "наивный".
Метод может вызвать исключение OverflowError
, если отметка времени выходит за пределы диапазона значений, поддерживаемых функцией gmtime()
платформы C, и исключение OSError
в случае сбоя gmtime()
. Отметка времени обычно ограничивается годами с 1970 по 2038 год.
Чтобы получить осведомленный объект datetime, вызовите fromtimestamp ():
datetime.datetime.fromtimestamp(timestamp, timezone.utc)
На POSIX-совместимых платформах это эквивалентно следующему выражению:
datetime.datetime(1970, 1, 1, tzinfo=datetime.timezone.utc) + \
datetime.timedelta(seconds=timestamp)
Кроме того, последняя формула всегда поддерживает полный диапазон лет: между datetime.MINYEAR
и datetime.MAXYEAR
включительно.
Предупреждение. Поскольку "наивные" объекты модуля datetime
обрабатываются многими методами объекта datetime.datetime()
как локальное время, предпочтительно использовать "осведомленные" объекты модуля, c представлением времени в UTC. Таким образом, рекомендуемый способ создания объекта, представляющего текущее время в UTC, заключается в вызове datetime.datetime.fromtimestamp(timestamp, datetime.timezone.utc)
.
>>> import datetime, time
>>> sec = time.time()
>>> sec
# 1588682447.241077
>>> datetime.datetime.fromtimestamp(sec, datetime.timezone.utc)
# datetime.datetime(2020, 5, 5, 12, 40, 47, 241077, tzinfo=datetime.timezone.utc)
datetime.datetime.combine(datetime.date, datetime.time, tzinfo=self.tzinfo)
:
Метод datetime.datetime.combine()
возвращает новый объект datetime.datetime()
, компоненты даты date
которого равны переданному объекту datetime.date
, а компоненты времени time
равны переданному объекту datetime.time
.
Если указан аргумент tzinfo
, то его значение используется для установки атрибута результата tzinfo
, в противном случае используется атрибут tzinfo
аргумента time
.
Для любого объекта dt = datetime.datetime(), dt == datetime.combine(dt.date(), dt.time(), dt.tzinfo)
. Если дата является объектом datetime
, а его компоненты времени и атрибуты tzinfo
игнорируются.
>>> import datetime
# дата
>>> date = datetime.date.today()
# время
>>> time = datetime.time(23, 55)
# интервал
>>> delta = datetime.timedelta(minutes=30)
# соединяем все вместе
>>> datetime.datetime.combine(date, time) + delta
# datetime.datetime(2020, 5, 6, 0, 25)
datetime.datetime.fromisoformat(date_string)
:
Метод datetime.datetime.fromisoformat()
возвращает дату и время datetime.datetime()
, соответствующую строке date_string
, в любом допустимом формате ISO 8601 со следующими исключениями:
Смещение часового пояса может составлять доли секунды.
Разделитель
T
может быть заменен любым символом Юникода.Порядковые даты в настоящее время не поддерживаются.
Дробные часы и минуты не поддерживаются.
Изменено в Python 3.11: ранее этот метод поддерживал только форматы, которые могли быть созданы с помощью datetime.date.isoformat()
или datetime.datetime.isoformat()
.
Примеры:
>>> from datetime import datetime
>>> datetime.fromisoformat('2011-11-04')
# datetime.datetime(2011, 11, 4, 0, 0)
>>> datetime.fromisoformat('20111104')
# datetime.datetime(2011, 11, 4, 0, 0)
>>> datetime.fromisoformat('2011-11-04T00:05:23')
# datetime.datetime(2011, 11, 4, 0, 5, 23)
>>> datetime.fromisoformat('2011-11-04T00:05:23Z')
# datetime.datetime(2011, 11, 4, 0, 5, 23, tzinfo=datetime.timezone.utc)
>>> datetime.fromisoformat('20111104T000523')
# datetime.datetime(2011, 11, 4, 0, 5, 23)
>>> datetime.fromisoformat('2011-W01-2T00:05:23.283')
# datetime.datetime(2011, 1, 4, 0, 5, 23, 283000)
>>> datetime.fromisoformat('2011-11-04 00:05:23.283')
# datetime.datetime(2011, 11, 4, 0, 5, 23, 283000)
>>> datetime.fromisoformat('2011-11-04 00:05:23.283+00:00')
# datetime.datetime(2011, 11, 4, 0, 5, 23, 283000, tzinfo=datetime.timezone.utc)
>>> datetime.fromisoformat('2011-11-04T00:05:23+04:00')
# datetime.datetime(2011, 11, 4, 0, 5, 23,
# tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
datetime.datetime.fromisocalendar(year, week, day)
:
Метод datetime.datetime.fromisocalendar()
возвращает объект даты и времени, соответствующих календарной дате ISO, указанной в атрибутах year
, week
, day
. Не-дата компоненты datetime заполняются их обычными значениями по умолчанию.
Это обратный метод datetime.isocalendar()
.
>>> import datetime
>>> datetime.datetime.isocalendar(2021, 19, 2)
# datetime.datetime(2020, 5, 5, 0, 0)
>>> dt = datetime.datetime.now()
>>> dt.isocalendar()
# (2020, 19, 2)
datetime.datetime.strptime(date_string, format)
:
Метод datetime.datetime.strptime()
возвращает объект даты и времени datetime.datetime()
, соответствующее проанализированный строке date_string
в соответствии с форматом.
Метод эквивалентен:
datetime.datetime(*(time.strptime(date_string, format)[0:6]))
Вызывается исключение ValueError
, если date_string
и format
не могут быть проанализированы time.strptime()
или если метод возвращает значение, которое не является кортежем структуры времени.
Полный список директив форматирования смотрите в разделе "Поведение методов strftime()
и strptime()
модуля datetime
".
>>> import datetime
>>> date_str = 'Fri, 24 Apr 2021 16:22:54 +0000'
>>> format = '%a, %d %b %Y %H:%M:%S +0000'
>>> datetime.datetime.strptime(date_str, format)
# datetime.datetime(2021, 4, 24, 16, 22, 54)
>>> date_str = '24.12.2020 16:22'
>>> format = '%d.%m.%Y %H:%M'
>>> datetime.datetime.strptime(date_str, format)
# datetime.datetime(2020, 12, 24, 16, 22)
Поддерживаемые операции datetime.datetime()
:
datetime.datetime()
:datetime2 = datetime1 + timedelta
(1)
datetime2 = datetime1 - timedelta
(2)
timedelta = datetime1 - datetime2
(3)
datetime1 < datetime2
Сравнение `datetime.datetime с datetime.datetime (4)
datetime2
- это продолжительностьtimedelta
, удаляемая изdatetime1
. Продвижение вперед во времени, еслиtimedelta.days > 0
, или назад, еслиtimedelta.days < 0
. Результат имеет тот же атрибутtzinfo
, что и входные данныеdatetime
, иdatetime2 - datetime1 == timedelta after
. Еслиdatetime2.year
будет меньшеdatetime.MINYEAR
или большеdatetime.MAXYEAR
возникает исключениеOverflowError
. Обратите внимание, что никакие настройки часового пояса не выполняются.Вычисляет
datetime2
так, чтобыdatetime2 + timedelta == datetime1
. Кроме того, у результата есть тот же атрибутtzinfo
, что и для ввода даты и времени и никакие настройки часового пояса не выполняются.Вычитание
datetime.datetime()
изdatetime.datetime()
определяется только в том случае, если оба операнда "наивны" или оба "осведомленные". Если один "осведомленный", а другой "наивный", то возникает исключениеTypeError
. Если оба являются "наивными" или оба "осведомленными" и имеют одинаковый атрибутtzinfo
, то атрибутыtzinfo
игнорируются и в результате получаетсяtd
- объектdatetime.timedelta
, такой чтоdatetime2 + td == datetime1
. В этом случае настройки часового пояса не выполняются. Если оба осведомлены и имеют разные атрибутыtzinfo
,a-b
действует так, как если бы сначалаa
иb
были сначала преобразованы в наивные даты UTC. В результате(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None) - b.utcoffset())
за исключением того, что реализация никогда не переполняется.datetime1
считается меньшеdatetime2
, когдаdatetime1
предшествуетdatetime2
во времени. При сравнении "наивного" объекта с "осведомленным" вызываетсяTypeError
. При сравнений на равенство "наивные" экземпляры никогда не будут равны "осведомленным". Если оба объекта "осведомлены" и имеют один и тот же атрибутtzinfo
, то общий атрибутtzinfo
игнорируется и сравниваются базовые значения времени. Если оба объекта "осведомлены" и имеют разные атрибутыtzinfo
, то объекты сначала корректируются путем вычитания их смещений UTC, полученных изself.utcoffset()
.
Примечание.
Сравнение объектов datetime.datetime()
вызывает исключение TypeError
, если один из объектов сравнения не является объектом datetime.datetime()
.
Если один из объектов сравнения имеет атрибут .timetuple()
, то возвращается исключение NotImplemented
. Этот хук дает другим типам объектов даты возможность реализовать сравнение смешанного типа.
В противном случае, когда объект datetime.datetime()
сравнивается с объектом другого типа, то вызывается исключение TypeError
.
Last updated