Работа с датой: как извлечь текущий год в Python
Основные способы получения текущего года в Python
В Python существует несколько способов узнать текущий год. Наиболее популярным и рекомендуемым считается использование модуля datetime. Он входит в стандартную библиотеку и не требует установки дополнительных пакетов. Для большинства задач этого достаточно.
Основное решение: модуль datetime
from datetime import date
current_year = date.today().year
print(current_year)Python datetime date (модуль datetime)
2025
Python вывести время (вывод текущего времени в python)
Здесь date.today() возвращает объект даты на момент вызова, а атрибут .year извлекает из него год. Альтернативный вариант с использованием datetime.datetime.now():
from datetime import datetime
current_year = datetime.now().year
print(current_year)Python вывести год (вывод текущего года в python)
2025
Python вывести дату (вывести дату в python)
Оба подхода эквивалентны для получения года. Первый (через date.today()) немного короче, если не нужны часы и минуты.
Как получить год из объекта datetime, созданного вручную?
Если уже есть объект datetime, например, полученный из сторонней библиотеки, год извлекается через атрибут .year:
from datetime import datetime
dt = datetime(2023, 12, 31, 23, 59)
print(dt.year)Python разница времени (вычисление разницы между датами и временем в python)
2023
Python текущая дата и время (получение текущей даты и времени в python)
Как использовать модуль time для получения года?
Модуль time предоставляет доступ к системному времени. Функция time.localtime() возвращает структуру struct_time, из которой берётся поле tm_year:
import time
current_year = time.localtime().tm_year
print(current_year)2025
Данный метод менее нагляден, но может быть полезен при работе с низкоуровневыми операциями.
Типичная ошибка:
Забыть импортировать модуль time – получим NameError. Также стоит помнить, что tm_year – это именно год (четыре цифры), а не две.
Как вывести год в виде строки с помощью strftime?
Метод strftime форматирует дату в строку по заданному шаблону. Для года используются директивы %Y (четырёхзначный) и %y (двузначный):
from datetime import datetime
year_full = datetime.now().strftime("%Y")
year_short = datetime.now().strftime("%y")
print(year_full, year_short)2025 25
Возможные проблемы:
Путаница между заглавной Y и строчной y. %Y – 2025, %y – 25. Если указать неверный формат (например, %y вместо %Y), получим двузначный год, что может привести к ошибкам интерпретации.
Как учесть часовой пояс при получении года?
По умолчанию datetime.now() возвращает локальное время. Для работы с конкретным часовым поясом используйте библиотеку pytz (требует установки) или zoneinfo (доступна с Python 3.9):
from datetime import datetime
import pytz
tz = pytz.timezone('Europe/Moscow')
current_year = datetime.now(tz).year
print(current_year)2025
Без часового пояса год может быть смещён при переходе через полночь по UTC.
Как получить год из Unix timestamp?
Unix timestamp – это количество секунд с 1 января 1970 года. Преобразовать его в дату можно через datetime.fromtimestamp():
from datetime import datetime
ts = 1700000000 # пример
dt = datetime.fromtimestamp(ts)
print(dt.year)2023
Внимание:
fromtimestamp по умолчанию использует локальный часовой пояс. Для UTC применяйте datetime.utcfromtimestamp(ts).year (но этот метод deprecated в Python 3.12; лучше использовать datetime.fromtimestamp(ts, tz=timezone.utc)).
Как вывести год с использованием модуля calendar?
Модуль calendar не содержит прямого метода для текущего года, но может использовать datetime внутри:
import calendar
from datetime import datetime
current_year = datetime.now().year
# далее можно использовать calendar, например, для календаря на год
print(calendar.isleap(current_year))False
Здесь год получен через datetime, а calendar проверяет, является ли он високосным.
Общие ошибки при работе с годом:
- AttributeError: попытка обратиться к атрибуту
.yearу строки или числа. Решение – убедиться, что переменная является объектом даты. - NameError: забыт импорт модуля (
import datetimeилиfrom datetime import datetime). - ValueError: неверный формат в
strptimeилиstrftime. - TypeError: передача несовместимого аргумента в
fromtimestamp.
Расширенные примеры извлечения текущего года
Использование библиотеки pendulum (сторонняя)
import pendulum
now = pendulum.now()
current_year = now.year
print(current_year)2025
Pendulum предоставляет более удобный API для работы с датой и временем, включая правильную обработку часовых поясов.
Извлечение года из строки с помощью datetime.strptime
from datetime import datetime
date_string = "15-03-2025 14:30"
fmt = "%d-%m-%Y %H:%M"
dt = datetime.strptime(date_string, fmt)
print(dt.year)2025
Этот метод полезен, когда дата получена из внешнего источника (файл, API) в строковом формате.
Получение года из timestamp с явным указанием UTC (Python 3.9+)
from datetime import datetime, timezone
ts = 1735689600 # 1 января 2025 00:00 UTC
dt_utc = datetime.fromtimestamp(ts, tz=timezone.utc)
print(dt_utc.year)2025
Такой подход избегает предупреждений об устаревшем utcfromtimestamp.
Год из даты, переданной в формате ISO 8601
from datetime import date
iso_date = "2025-12-31"
dt = date.fromisoformat(iso_date)
print(dt.year)2025
Метод fromisoformat доступен с Python 3.7 и принимает строки вида ГГГГ-ММ-ДД.
Использование библиотеки arrow
import arrow
utc = arrow.utcnow()
print(utc.year)2025
Arrow предлагает лёгкий синтаксис для работы с датами с учётом времени.
Получение года из объекта dateutil.parser
from dateutil import parser
date_str = "May 5, 2025"
dt = parser.parse(date_str)
print(dt.year)2025
Парсер dateutil умеет распознавать множество естественных форматов дат, что удобно при обработке пользовательского ввода.
Сравнение производительности разных методов с помощью timeit
import timeit
setup = "from datetime import date, datetime; import time"
code1 = "date.today().year"
code2 = "datetime.now().year"
code3 = "time.localtime().tm_year"
t1 = timeit.timeit(code1, setup, number=100000)
t2 = timeit.timeit(code2, setup, number=100000)
t3 = timeit.timeit(code3, setup, number=100000)
print(f"date.today: {t1:.5f}")
print(f"datetime.now: {t2:.5f}")
print(f"time.localtime: {t3:.5f}")date.today: 0.02145
datetime.now: 0.02210
time.localtime: 0.01890
Все методы близки по скорости, но time.localtime может быть чуть быстрее за счёт меньших накладных расходов. Однако разница незначительна, поэтому предпочтение отдаётся читаемости.