Python: способы извлечения года из текущей даты

Раздел: Время -> Datetime

Способы получения текущего года в Python

Как получить текущий год с помощью модуля datetime?

Модуль datetime предоставляет наиболее прямой и читаемый способ. Используйте datetime.now().year или date.today().year.


from datetime import datetime, date

today = date.today()               # 2025-03-22
current_year = today.year          # 2025
print(current_year)                 # 2025

# Альтернатива через datetime.now()
now = datetime.now()               # 2025-03-22 12:30:00.123456
year_from_now = now.year           # 2025
print(year_from_now)               # 2025
    

Python получить год (получение текущего года в python)

Этот вариант подходит для большинства задач: веб-приложений, обработки дат, логирования.

Каким образом извлечь год из текущего времени модулем time?

Функция time.localtime() возвращает struct_time, из которого берётся атрибут tm_year.


import time

local_time = time.localtime()      # time.struct_time(tm_year=2025, ...)
year = local_time.tm_year          # 2025
print(year)                        # 2025
    

Python получить дату (получение текущей даты в python)

Полезно, когда нужно одновременно получить другие компоненты времени (месяц, день) без импорта datetime.

Как получить год из UTC-времени, не привязываясь к локальному поясу?

Используйте time.gmtime() вместо localtime.


import time

utc_time = time.gmtime()           # UTC struct_time
year_utc = utc_time.tm_year        # 2025
print(year_utc)
    

Можно ли вычислить год из Unix-метки (timestamp) без промежуточных структур?

Да, с помощью datetime.fromtimestamp() и затем .year.


import time
from datetime import datetime

ts = time.time()                   # текущий timestamp
year_from_ts = datetime.fromtimestamp(ts).year
print(year_from_ts)                # 2025
    

Как работает получение года через модуль calendar?

calendar.timegm() принимает struct_time, но чтобы получить текущий год, нужно сначала создать struct_time через time.gmtime() или localtime().


import calendar
import time

now = time.gmtime()                # UTC struct_time
year_cal = calendar.timegm(now)    # Unix timestamp, не год
# Чтобы извлечь год, используем tm_year:
year = now.tm_year
print(year)                       # 2025
    

Этот способ не даёт прямого преимущества, но демонстрирует альтернативу для совместимости со старым кодом.

Какие типичные ошибки возникают при получении года?

  • Ошибка импорта: попытка использовать datetime без импорта приводит к NameError. Всегда проверяйте from datetime import datetime или import datetime с последующим datetime.datetime.now().
  • Ошибка атрибута: обращение к .year у объекта, который не является датой (например, у строки).
  • Проблемы с часовыми поясами: datetime.now() возвращает локальное время. Если требуется UTC, используйте datetime.utcnow() (устарело в Python 3.12) или datetime.now(timezone.utc) (рекомендуется).
  • Неправильное использование time.time(): time.time() возвращает float, а не struct_time. Вызов .tm_year у float вызовет AttributeError.

# Ошибочный импорт:
import datetime
print(datetime.now().year)   # AttributeError: module 'datetime' has no attribute 'now'
# Правильно:
from datetime import datetime
print(datetime.now().year)   # 2025
    

При работе с UTC используйте aware-объекты:


from datetime import datetime, timezone

utc_now = datetime.now(timezone.utc)   # 2025-03-22 10:30:00+00:00
print(utc_now.year)                    # 2025
    

Расширенные примеры получения текущего года

Извлечение года из строки с датой

При парсинге дат (например, из CSV или API) строку преобразуют в datetime, затем извлекают год.

Пример

from datetime import datetime

date_str = "2025-03-22"
dt = datetime.strptime(date_str, "%Y-%m-%d")
year = dt.year
print(year)  # 2025
2025

Год из Unix timestamp в определённом часовом поясе

Использование pytz (сторонняя библиотека) для преобразования timestamp в локальное время.

Пример

import time
from datetime import datetime
import pytz

ts = time.time()
tz = pytz.timezone('Asia/Vladivostok')
local_dt = datetime.fromtimestamp(ts, tz)
year_local = local_dt.year
print(year_local)  # 2025
2025

Получение года из текущего времени с точностью до микросекунд

Использование datetime.now() с указанием часового пояса и форматированием.

Пример

from datetime import datetime, timezone, timedelta

tz_ny = timezone(timedelta(hours=-4))  # Eastern Daylight Time (пример)
now_ny = datetime.now(tz_ny)
year_ny = now_ny.year
print(f"Год в Нью-Йорке: {year_ny}")
Год в Нью-Йорке: 2025

Год из объекта date.today() с последующими операциями

Сложение и вычитание лет (с помощью relativedelta из dateutil).

Пример

from datetime import date
from dateutil.relativedelta import relativedelta

today = date.today()
next_year = today + relativedelta(years=1)
year_next = next_year.year
print(f"Следующий год: {year_next}")
Следующий год: 2026

Использование pandas для получения года из текущей даты

Библиотека pandas часто применяется для анализа данных. Можно получить текущую дату и извлечь год.

Пример

import pandas as pd

now_pd = pd.Timestamp.now()
year_pd = now_pd.year
print(year_pd)  # 2025
2025

Получение года с помощью time.strftime

Функция strftime форматирует struct_time в строку, но можно извлечь только год.

Пример

import time

local = time.localtime()
year_str = time.strftime("%Y", local)  # строка '2025'
year_int = int(year_str)
print(year_int)  # 2025
2025

Обработка года в приложениях с разными локальными настройками

Использование locale для форматирования, но сам год остаётся числовым.

Пример

import locale
from datetime import datetime

locale.setlocale(locale.LC_TIME, 'ru_RU.UTF-8')  # для русского форматирования
dt = datetime.now()
year = dt.year
print(f"Текущий год: {year} (по-русски: {dt.strftime('%Y')})")
Текущий год: 2025 (по-русски: 2025)

Получение текущего года в Python - comments

En
Python получить год (python)