Datetime.datetime.now: примеры (PYTHON)

Работа с текущим временем: datetime.now() в Python
Раздел: Дата и время, Текущее время
datetime.datetime.now(tz: datetime.tzinfo=None): datetime.datetime

Функция datetime.datetime.now()

Метод datetime.now() является методом класса datetime из модуля datetime в Python. Его применяют для получения текущей даты и времени.

Метод возвращает объект datetime, содержащий информацию о текущей дате и времени с точностью до микросекунд.

Сигнатура метода: datetime.now(tz=None)

  • tz: Необязательный аргумент. Объект, представляющий часовой пояс (подкласс класса tzinfo). Если аргумент не указан или равен None, метод возвращает текущее местное время как "наивный" объект datetime (без информации о часовом поясе). Если указан, метод возвращает время с учётом часового пояса ("aware" datetime).

Возвращаемое значение всегда является экземпляром класса datetime.datetime. Если указан аргумент tz, у объекта будет установлен атрибут tzinfo.

Примеры использования

Получение текущего местного времени (наивный объект datetime):

from datetime import datetime
now_naive = datetime.now()
print(now_naive)
print(type(now_naive))
2023-10-26 14:30:15.123456
<class 'datetime.datetime'>

Получение текущего времени в конкретном часовом поясе:

from datetime import datetime, timezone
now_utc = datetime.now(timezone.utc)
print(now_utc)
print(now_utc.tzinfo)
2023-10-26 11:30:15.123456+00:00
UTC

Получение отдельных компонентов даты и времени:

now = datetime.now()
print(f"Год: {now.year}")
print(f"Месяц: {now.month}")
print(f"День: {now.day}")
print(f"Час: {now.hour}")
print(f"Минута: {now.minute}")
print(f"Секунда: {now.second}")
print(f"Микросекунда: {now.microsecond}")
Год: 2023
Месяц: 10
День: 26
Час: 14
Минута: 30
Секунда: 15
Микросекунда: 123456

Похожие функции в Python

  • datetime.today(): Возвращает текущее местное время как наивный объект datetime, аналогично datetime.now() без аргументов. Не принимает параметр часового пояса. datetime.now() является более гибким вариантом.
  • datetime.utcnow(): До Python 3.12 возвращал текущее время UTC как наивный объект. Теперь считается устаревшим. Рекомендуется использовать datetime.now(timezone.utc) для получения времени UTC с информацией о часовом поясе.
  • time.time(): Из модуля time. Возвращает время в секундах с начала эпохи (обычно 01.01.1970 UTC) в виде числа с плавающей точкой. Используют, когда нужна простая временная метка для вычисления интервалов.
  • time.localtime() и time.gmtime(): Из модуля time. Возвращают структурированное время (struct_time) в местном часовом поясе или в UTC соответственно. Удобны для форматированного вывода с помощью time.strftime().

Аналоги в других языках программирования

JavaScript: new Date() создаёт объект Date с текущей датой и временем. Не имеет встроенной поддержки произвольных часовых поясов, кроме локального и UTC.

let now = new Date();
console.log(now.toISOString()); // Вывод в формате ISO
2023-10-26T11:30:15.123Z

Java: LocalDateTime.now() возвращает текущее время без информации о часовом поясе. ZonedDateTime.now() возвращает время с учётом часового пояса.

import java.time.LocalDateTime;
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
2023-10-26T14:30:15.123

PHP: Функция date() или конструктор new DateTime().

$now = new DateTime();
echo $now->format('Y-m-d H:i:s.u');
2023-10-26 14:30:15.123456

SQL (например, PostgreSQL): Функция NOW() возвращает текущую дату и время с часовым поясом транзакции.

SELECT NOW();
2023-10-26 14:30:15.123456+03

C#: Свойство DateTime.Now возвращает текущее местное время. DateTime.UtcNow возвращает время в UTC.

DateTime now = DateTime.Now;
Console.WriteLine(now.ToString("yyyy-MM-dd HH:mm:ss.ffffff"));
2023-10-26 14:30:15.123456

Типичные ошибки

Сравнение "наивных" и "aware" объектов datetime:

from datetime import datetime, timezone
naive = datetime.now()
aware = datetime.now(timezone.utc)
try:
    result = naive < aware
except TypeError as e:
    print(f"Ошибка: {e}")
Ошибка: can't compare offset-naive and offset-aware datetimes

Ошибка при обращении к несуществующему атрибуту:

now = datetime.now()
print(now.seconds)  # Неправильно
AttributeError: 'datetime.datetime' object has no attribute 'seconds'

Правильно использовать атрибуты second или метод timestamp().

Заблуждение о неизменяемости. Объекты datetime являются неизменяемыми (immutable).

now = datetime.now()
try:
    now.year = 2024
except AttributeError as e:
    print(f"Ошибка: {e}")
Ошибка: attribute 'year' of 'datetime.datetime' objects is not writable

Изменения в последних версиях Python

Начиная с Python 3.12, функция datetime.utcnow() и datetime.utcfromtimestamp() официально считаются устаревшими. При их вызове возникает предупреждение об устаревании (DeprecationWarning). Рекомендуется использовать вместо них datetime.now(timezone.utc) и datetime.fromtimestamp(timestamp, tz=timezone.utc) соответственно. Это изменение направлено на поощрение использования объектов datetime с информацией о часовом поясе ("aware") и предотвращение ошибок, связанных с наивными объектами, представляющими время UTC.

Расширенные примеры применения

Измерение времени выполнения участка кода:

Пример python
from datetime import datetime
start = datetime.now()
# Имитация длительной операции
sum_result = sum(range(1_000_000))
end = datetime.now()
elapsed = end - start  # Получаем объект timedelta
print(f"Операция заняла {elapsed.total_seconds():.6f} секунд")
Операция заняла 0.028345 секунд

Создание отметки времени для имени файла:

Пример python
now = datetime.now()
filename = f"backup_{now:%Y%m%d_%H%M%S}.sql"
print(filename)
backup_20231026_143015.sql

Получение времени начала и конца текущего дня:

Пример python
from datetime import datetime, timedelta
today = datetime.now()
start_of_day = today.replace(hour=0, minute=0, second=0, microsecond=0)
end_of_day = start_of_day + timedelta(days=1) - timedelta(microseconds=1)
print(f"С начала дня: {start_of_day}")
print(f"До конца дня: {end_of_day}")
С начала дня: 2023-10-26 00:00:00
До конца дня: 2023-10-26 23:59:59.999999

Определение дня недели:

Пример python
now = datetime.now()
weekday_name = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"]
print(f"Сегодня {weekday_name[now.weekday()]}")  # weekday() возвращает 0 для понедельника
Сегодня Четверг

Парсинг строки и сравнение с текущим временем:

Пример python
from datetime import datetime
event_time_str = "2023-10-26 18:00:00"
event_time = datetime.strptime(event_time_str, "%Y-%m-%d %H:%M:%S")
now = datetime.now()
if event_time > now:
    print("Событие ещё не началось")
else:
    print("Событие уже прошло")
Событие ещё не началось

питон datetime.datetime.now function comments

En
Datetime.datetime.now Return the current local date and time