Работа с датой: как извлечь текущий год в Python

Раздел: Основы 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 может быть чуть быстрее за счёт меньших накладных расходов. Однако разница незначительна, поэтому предпочтение отдаётся читаемости.

вывод текущего года в Python - comments

En
Python вывести год (python)