# Методы объекта datetime.datetime()

***`dt.date()`*****:**

Метод `dt.date()` возвращает объект [`datetime.date()`](https://docs-python.ru/standart-library/modul-datetime-python/klass-date-modulja-datetime/) с тем же годом, месяцем и днем.

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt.date()
# datetime.date(2020, 5, 6)
```

***`dt.time()`*****:**

Метод `dt.time()` возвращает объект [`datetime.time()`](https://docs-python.ru/standart-library/modul-datetime-python/klass-time-modulja-datetime/) с тем же часом, минутой, секундой, микросекундой, при этом параметр `tzinfo` будет равен `None`. Смотрите также [метод `datetime.timetz()`](https://docs-python.ru/standart-library/modul-datetime-python/metody-ekzempljara-ditetime-datetime/#dt.timetz).

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt.time()
# datetime.time(9, 47, 7, 560533)
```

***`dt.timetz()`*****:**

Метод `dt.timetz()` возвращает объект [`datetime.time()`](https://docs-python.ru/standart-library/modul-datetime-python/klass-time-modulja-datetime/) с такими же атрибутами часа, минуты, секунды, микросекунды и `tzinfo`. Смотрите также [метод `datetime.time()`](https://docs-python.ru/standart-library/modul-datetime-python/metody-ekzempljara-ditetime-datetime/#dt.time).

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt.timetz()
# datetime.time(9, 47, 7, 560533)

# если указать аргумент смещение `tz`
# то timetz() будет присутствовать в объекте 
>>> delta = datetime.timedelta(hours=3)
>>> tz = datetime.timezone(delta)
>>> dt = datetime.datetime.now(tz=tz)
# datetime.time(9, 56, 14, 920298, \
# tzinfo=datetime.timezone(datetime.timedelta(0, 10800)))
```

***`dt.replace(year=self.year, month=self.month, day=self.day, hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)`*****:**

Метод `dt.replace()` возвращает новый объект [`datetime.datetime()`](https://docs-python.ru/standart-library/modul-datetime-python/klass-datetime-modulja-datetime/) с теми же атрибутами, за исключением тех атрибутов, которым даны новые значения в зависимости от того, какие [ключевые аргументы](https://docs-python.ru/tutorial/opredelenie-funktsij-python/kljuchevye-argumenty-opredelenii-funktsii/) указаны.

Обратите внимание, что можно указать `tzinfo=None` для [создания "наивного"](https://docs-python.ru/standart-library/modul-datetime-python/) объекта `datetime.datetime()` из "осведомленного" без преобразования данных даты и времени.

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt
# datetime.datetime(2020, 5, 6, 9, 56, 14, 920298)
>>> dt.replace(year=2022, month=6, hour=15)
# datetime.datetime(2022, 6, 6, 15, 56, 14, 920298)
```

***`dt.astimezone(tz=None)`*****:**

Метод `dt.astimezone()` возвращает новый объект [`datetime.datetime()`](https://docs-python.ru/standart-library/modul-datetime-python/klass-datetime-modulja-datetime/) с новым атрибутом `tzinfo`, скорректировав данные даты и времени таким образом, чтобы результатом было то же время UTC, но по местному времени `tz`.

* Если указан аргумент `tz`, то он должен быть экземпляром подкласса [`datetime.tzinfo()`](https://docs-python.ru/standart-library/modul-datetime-python/klass-tzinfo-modulja-datetime/), а его методы `tzinfo.utcoffset()` и `tzinfo.dst()` не должны возвращать `None`. Если `self` - "наивно", то предполагается, что оно представляет время в часовом поясе системы.
* Если вызывается без аргументов или с `tz=None`, то системный часовой пояс местного времени принимается за целевой часовой пояс. Атрибут `.tzinfo` преобразованного экземпляра `datetime.datetime()` будет установлен на экземпляр [`datetime.timezone()`](https://docs-python.ru/standart-library/modul-datetime-python/klass-timezone-modulja-datetime/) с именем зоны и смещением, полученными из ОС.

  ```
  >>> import datetime
  >>> dt = datetime.datetime.now()
  >>> dt
  # datetime.datetime(2020, 5, 6, 9, 56, 14, 920298)
  >>> dt.astimezone()
  # datetime.datetime(2020, 5, 6, 9, 56, 14, 920298, \
  # tzinfo=datetime.timezone(datetime.timedelta(0, 10800), 'MSK'))
  ```
* Если `self.tzinfo` равно `tz`, а `self.astimezone(tz)` равно `self`: настройка даты или времени не выполняется. В противном случае результатом является местное время в часовом поясе `tz`, представляющее то же время в формате UTC, что и в `self`: после `astz = dt.astimezone(tz)`, `astz - astz.utcoffset()` будет иметь те же данные о дате и времени, что и `dt - dt.utcoffset()`.
* Если вы просто хотите прикрепить объект часового пояса `tz` к `datetime.datetime()` без настройки даты и времени, используйте [`dt.replace(tzinfo=tz)`](https://docs-python.ru/standart-library/modul-datetime-python/metody-ekzempljara-ditetime-datetime/#dt.replace).
* Если вы просто хотите удалить объект часового пояса из "осведомленного" `datetime.datetime()` без преобразования даты и времени, используйте [`dt.replace(tzinfo=None)`](https://docs-python.ru/standart-library/modul-datetime-python/metody-ekzempljara-ditetime-datetime/#dt.replace).

Обратите внимание, что метод `tzinfo.fromutc()` по умолчанию может быть переопределен в подклассе `tzinfo`, чтобы повлиять на результат, возвращаемый методом [`dt.astimezone()`](https://docs-python.ru/standart-library/modul-datetime-python/metody-ekzempljara-ditetime-datetime/#dt.astimezone). действует так, что бы игнорировать ошибки `datetime.astimezone()`:

```
def astimezone(self, tz):
    if self.tzinfo is tz:
        return self
    # Конвертируйте self в UTC и прикрепите
    # новый объект часового пояса
    utc = (self - self.utcoffset()).replace(tzinfo=tz)
    # Конвертировать из UTC в местное время tz.
    return tz.fromutc(utc)
```

***`dt.utcoffset()`*****:**

Если `tzinfo=None`, то метод `dt.utcoffset()` возвращает `None`, иначе возвращает `self.tzinfo.utcoffset(self)` или вызывает исключение, если последний не возвращает `None` или объект `timedelta` со значением менее одного дня.

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> print(dt.utcoffset())
# None
>>> new_dt = dt.astimezone()
>>> new_dt.utcoffset()
# datetime.timedelta(0, 10800)
```

***`dt.dst()`*****:**

Если `tzinfo=None`, то метод `dt.dst()` возвращает `None`, иначе возвращает `self.tzinfo.dst(self)` или вызывает исключение, если последний не возвращает `None` или объект `timedelta` со значением менее одного дня.

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> print(dt.dst())
# None
>>> new_dt = dt.astimezone()
>>> print(new_dt.dst())
# None
```

***`dt.tzname()`*****:**

Если `tzinfo=None`, то метод `dt.tzname()` возвращает `None`, иначе возвращает `self.tzinfo.tzname(self)` или вызывает исключение, если последний не возвращает `None` или или строковый объект.

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> print(dt.tzname())
# None
>>> new_dt = dt.astimezone()
>>> new_dt.tzname()
# 'MSK'
```

***`dt.timetuple()`*****:**

Метод `dt.timetuple()` возвращает [кортеж](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-tuple-kortezh/) структуры времени [`time.struct_time`](https://docs-python.ru/standart-library/modul-time-python/klass-struct-time-modulja-time/), например такой же как возвращает [`time.localtime()`](https://docs-python.ru/standart-library/modul-time-python/funktsija-localtime-modulja-time/).

Метод `dt.timetuple()` эквивалентен:

```
time.struct_time((dt.year, dt.month, dt.day,
                  dt.hour, dt.minute, dt.second,
                  dt.weekday(), yday, dst))
```

где `yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1` номер дня в текущем году, начиная с 1 для 1 января. Флаг `tm_isdst` кортежа структуры устанавливается в соответствии с методом `dt.dst()`:

* `tm_isdst` имеет значение -1, то `dt.dst()` возвращает `None`;
* `tm_isdst` имеет значение 1, то `dt.dst()` возвращает ненулевое значение;
* `tm_isdst` имеет значение 0.

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt.timetuple()
# time.struct_time(tm_year=2020, tm_mon=5, tm_mday=6, \
#                  tm_hour=9, tm_min=56, tm_sec=14, \
#                  tm_wday=2, tm_yday=127, tm_isdst=-1)
dt.timetuple().tm_isdst
# -1
```

***`dt.utctimetuple()`*****:**

Если экземпляр `dt` - "наивен", то метод `dt.utctimetuple()` возвратит же самое, что и [`dt.timetuple()`](https://docs-python.ru/standart-library/modul-datetime-python/metody-ekzempljara-ditetime-datetime/#dt.timetuple), за исключением того, что элемент структуры `tm_isdst` принудительно устанавливается в 0 независимо от того, что возвращает [`dt.dst()`](https://docs-python.ru/standart-library/modul-datetime-python/metody-ekzempljara-ditetime-datetime/#dt.dst). DST никогда не действует в течение времени UTC.

Если `dt` - "осведомленный", то `dt` нормализуется к времени UTC, вычитая [`dt.utcoffset()`](https://docs-python.ru/standart-library/modul-datetime-python/metody-ekzempljara-ditetime-datetime/#dt.utcoffset) и возвращается [кортеж `time.struct_time`](https://docs-python.ru/standart-library/modul-time-python/klass-struct-time-modulja-time/) для нормализованного времени. Значение `tm_isdst=0`. Обратите внимание, что [ошибка `OverflowError`](https://docs-python.ru/tutorial/vstroennye-iskljuchenija-interpretator-python/vstroennye-iskljuchenija/) может быть вызвана, если атрибут даты и времени `dt.year` равняется `datetime.MINYEAR` или `datetime.MAXYEAR`, а корректировки UTC превышают границу года.

**Предупреждение**. Поскольку "наивные" объекты [`datetime.datetime()`](https://docs-python.ru/standart-library/modul-datetime-python/klass-datetime-modulja-datetime/) обрабатываются многими методами как локальное время, то предпочтительно использовать ["осведомленные" объекты](https://docs-python.ru/standart-library/modul-datetime-python/) `datetime.datetime()` для представления времени в UTC. В результате использование конструктора [`datetime.datetime.utcfromtimetuple()`](https://docs-python.ru/standart-library/modul-datetime-python/klass-datetime-modulja-datetime/) может привести к ошибочным результатам. Если у вас есть "наивный" объект `datetime.datetime()` представляющий UTC, то используйте [`dt.replace(tzinfo=timezone.utc)`](https://docs-python.ru/standart-library/modul-datetime-python/metody-ekzempljara-ditetime-datetime/#dt.replace), чтобы сообщить, в какой момент вы можете использовать [`dt.timetuple()`](https://docs-python.ru/standart-library/modul-datetime-python/metody-ekzempljara-ditetime-datetime/#dt.timetuple).

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt.timetuple()
# time.struct_time(tm_year=2020, tm_mon=5, tm_mday=6, \
#                  tm_hour=9, tm_min=56, tm_sec=14, \
#                  tm_wday=2, tm_yday=127, tm_isdst=0)
>>> dt.timetuple().tm_isdst
# 0
```

***`dt.toordinal()`*****:**

Метод `dt.toordinal()` возвращает пролептический григорианский порядковый номер даты. Так же, как `self.date().toordinal().`

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt.toordinal()
# 737551
```

***`dt.timestamp()`*****:**

Метод `dt.timestamp()` возвращает метку времени POSIX, соответствующую экземпляру `datetime.datetime()`. Возвращаемое значение - это [число с плавающей точкой](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-float-veschestvennye-chisla/), аналогичное тому, которое возвращает [`time.time()`](https://docs-python.ru/standart-library/modul-time-python/funktsija-time-modulja-time/).

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt.timestamp()
1588748174.920298
```

Предполагается, что "наивные" экземпляры `datetime.datetime()` представляют местное время, и для выполнения преобразования используется метод платформы C `mktime()`. Поскольку `datetime.datetime()` поддерживает более широкий диапазон значений, чем `mktime()` на многих платформах, этот метод может вызвать [исключение `OverflowError`](https://docs-python.ru/tutorial/vstroennye-iskljuchenija-interpretator-python/vstroennye-iskljuchenija/) для времен, которые уже прошли или будут в будущем.

Для "осведомленных" экземпляров `datetime.datetime()` возвращаемое значение вычисляется как:

```
>>> import datetime
>>> dt = datetime.datetime.now()
(dt - datetime.datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()
```

**Примечание**. Нет способа получить метку времени POSIX непосредственно из простого экземпляра `datetime.datetime()`, представляющего время UTC. Если ваше приложение использует это соглашение и системный часовой пояс не установлен на UTC, вы можете получитьвременную метку POSIX, указав `tzinfo=timezone.utc`:

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
# или путем вычисления метки времени напрямую:
>>> timestamp = (dt - datetime.datetime(1970, 1, 1)) / timedelta(seconds=1)
```

***`dt.weekday()`*****:**

Метод `dt.weekday()` возвращает день недели в виде [целого числа](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-int-tselye-chisla/), где понедельник = 0, а воскресенье = 6. То же, что `self.date().weekday()`.

Смотрите также метод [`dt.isoweekday()`](https://docs-python.ru/standart-library/modul-datetime-python/metody-ekzempljara-ditetime-datetime/#dt.isoweekday).

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt.weekday()
2
```

***`dt.isoweekday()`*****:**

Метод `dt.isoweekday()` возвращает день недели в виде [целого числа](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-int-tselye-chisla/), где понедельник = 1, а воскресенье = 7. То же, что `self.date().isoweekday()`.

Смотрите также методы [`dt.weekday()`](https://docs-python.ru/standart-library/modul-datetime-python/metody-ekzempljara-ditetime-datetime/#dt.weekday) и [`dt.isocalendar()`](https://docs-python.ru/standart-library/modul-datetime-python/metody-ekzempljara-ditetime-datetime/#dt.isocalendar).

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt.isoweekday()
# 3
```

***`dt.isocalendar()`*****:**

Метод `dt.isocalendar()` возвращает [именованный кортеж](https://docs-python.ru/standart-library/modul-collections-python/klass-namedtuple-modulja-collections/) с тремя компонентами: год `year`, неделя `week` и день недели `weekday`. Так же, как `self.date().isocalendar()`.

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt.isocalendar()
# datetime.IsoCalendarDate(year=2020, week=19, weekday=3)
```

Изменено в Python 3.9: результат изменился с простого кортежа на именованный кортеж.

***`dt.isoformat(sep='T', timespec='auto')`*****:**

Метод `dt.isoformat()` возвращает [строку](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-str-tekstovye-stroki/), представляющую дату и время в формате ISO 8601:

* YYYY-MM-DDTHH:MM:SS.ffffff, если микросекунда не равна 0
* YYYY-MM-DDTHH:MM:SS, если микросекунда равна 0

Если [`dt.utcoffset()`](https://docs-python.ru/standart-library/modul-datetime-python/metody-ekzempljara-ditetime-datetime/#dt.utcoffset) не возвращает `None`, добавляется строка, дающая смещение UTC:

* YYYY-MM-DDTHH:MM:SS.ffffff+HH:MM\[:SS\[.ffffff]], если микросекунда не равна 0
* YYYY-MM-DDTHH:MM:SS+HH:MM\[:SS\[.ffffff]], если микросекунда равна 0

Examples:

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt.isoformat()
# '2020-05-06T09:56:14.920298'
>>> tz = datetime.timezone.utc
>>> dt_utc = datetime.datetime.now(tz=tz)
>>> dt_utc.isoformat()
# '2020-05-06T06:56:14.920298+00:00'
>>> dt_local = dt.astimezone()
>>> dt_local.isoformat()
'2020-05-06T09:56:14.920298+03:00'
```

Необязательный аргумент `sep` - по умолчанию 'T', представляет собой односимвольный разделитель, помещенный между датой и временем.

```
import datetime

class TZ(datetime.tzinfo):
    """Часовой пояс с произвольным постоянным смещением -06: 39."""
    def utcoffset(self, dt):
        return datetime.timedelta(hours=-6, minutes=-39)

>>> datetime.datetime(2022, 12, 25, tzinfo=TZ()).isoformat(' ')
# '2022-12-25 00:00:00-06:39'
>>> datetime.datetime(2022, 11, 27, microsecond=100, tzinfo=TZ()).isoformat()
# '2022-11-27T00:00:00.000100-06:39'
```

Необязательный аргумент `timespec` указывает количество дополнительных компонентов времени для включения, по умолчанию "auto".

Это может быть одно из следующих:

* `'auto'`: то же, что и `'seconds'`, если `dt.microseconds` равна 0, в противном случае как `'milliseconds'`.
* `'hours'`: включает час в двузначном формате `HH`.
* `'minutes'`: включает час и минуты в формате `HH:MM`.
* `'seconds'`: включает час , минуты и секунды в формате `HH:MM:SS`.
* `'milliseconds'`: включает полный вариант вывода, но усекает вторую дробную часть до миллисекунд - `HH:MM:SS.sss`.
* `'microseconds'`: включает полный вариант вывода - `HH:MM:SS.ffffff`.

**Примечание**. Компоненты исключенного времени будут отброшены, а не округлены.

Будет вызвано [исключение `ValueError`](https://docs-python.ru/tutorial/vstroennye-iskljuchenija-interpretator-python/vstroennye-iskljuchenija/), если аргумент `timespec` будет недопустимым.

```
>>> import datetime
>>> datetime.datetime.now().isoformat(timespec='minutes')   
# '2022-12-25T00:00'
>>> dt = datetime.datetime(2023, 1, 1, 12, 30, 59, 0)
>>> dt.isoformat(timespec='microseconds')
# '2023-01-01T12:30:59.000000'
```

***`dt.__str__()`*****:**

Для экземпляра `dt` справедливо утверждение: [`str(dt)`](https://docs-python.ru/tutorial/vstroennye-funktsii-interpretatora-python/klass-str/) эквивалентно вызову [`dt.isoformat(sep=' ')`](https://docs-python.ru/standart-library/modul-datetime-python/metody-ekzempljara-ditetime-datetime/#dt.isoformat).

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt.__str__()
# '2021-05-06 09:56:14.920298'
>>> str(dt)
# '2021-05-06 09:56:14.920298'
```

***`dt.ctime()`*****:**

Метод `dt.ctime()` возвращает [строку](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-str-tekstovye-stroki/), представляющую дату и время:

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt.ctime()
# 'Wed May  6 09:56:14 2021'

>>> import time
>>> time.ctime(time.mktime(dt.timetuple()))
# 'Wed May  6 09:56:14 2021'
```

Выходная строка не будет включать информацию о часовом поясе, независимо от того, является ли ввод ["осведомленным" или "наивным"](https://docs-python.ru/standart-library/modul-datetime-python/).

Вызов метода [`dt.ctime()`](https://docs-python.ru/standart-library/modul-datetime-python/metody-ekzempljara-ditetime-datetime/#dt.ctime) эквивалентен:

```
>>> import datetime, time
>>> dt = datetime.datetime.now()
>>> time.ctime(time.mktime(dt.timetuple()))
'Wed May  6 09:56:14 2021'
```

***`dt.strftime(format)`*****:**

Метод `dt.strftime()` возвращает [строку](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-str-tekstovye-stroki/), представляющую дату и время, управляемую явной строкой формата.

Полный список директив форматирования смотрите в разделе ["Поведение методов `strftime()` и `strptime()` модуля `datetime`"](https://docs-python.ru/standart-library/modul-datetime-python/kody-formatirovanija-strftime-strptime-modulja-datetime/).

```
>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt.strftime('%H:%M - %m.%d.%Y года')
# '09:56 - 05.06.2020 года'
>>> dt.strftime('%H часов %M минут %m.%d.%Y года')
# '09 часов 56 минут 05.06.2020 года'
>>> dt.strftime('%m/%d/%y')
# '05/06/20'
>>> dt.strftime('%Y-%m-%d')
# '2020-05-06'
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://olexsyn.gitbook.io/enote/progr/python/modules/datetime/datetime.datetime/metody-obekta-datetime.datetime.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
