Преобразование datetime в Unix-формат и обратно в Python

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для преобразования объекта datetime в Unix-таймштамп используйте метод timestamp(). Для обратного преобразования в datetime применяется функция fromtimestamp():

Python
Скопировать код
from datetime import datetime

# Конвертация в Unix-таймштамп
dt_to_unix = datetime.now().timestamp()

# Обратное преобразование в datetime
unix_to_dt = datetime.fromtimestamp(dt_to_unix)
Кинга Идем в IT: пошаговый план для смены профессии

Учет часовых поясов

При работе с датой и временем в различных часовых поясах наиболее целесообразно использовать объекты datetime, учитывающие временную зону. Это позволяет избежать расстояний и ошибок:

Python
Скопировать код
from datetime import datetime, timezone

# Datetime с учетом временной зоны UTC
dt_utc_aware = datetime.now(timezone.utc)

# Преобразование в Unix-таймштамп
unix_timestamp = dt_utc_aware.timestamp()

# Обратное преобразование в datetime
aware_unix_to_dt = datetime.fromtimestamp(unix_timestamp, timezone.utc)

Теперь, пересекая границы разных временных зон, вы всегда будете точно знать местное время.

Количество секунд с момента начала эпохи Unix

Если хотите узнать общее количество секунд с начала эпохи Unix, вам пригодится метод total_seconds():

Python
Скопировать код
from datetime import datetime, timedelta

# Разница времени с начала эпохи Unix
td_since_epoch = datetime.now() – datetime(1970, 1, 1)

# Общее количество секунд с начала эпохи Unix
total_seconds = td_since_epoch.total_seconds()

# Datetime, соответствующий данному количеству секунд
datetime_from_seconds = datetime(1970, 1, 1) + timedelta(seconds=total_seconds)

Звучит впечатляюще: прошло уже около 1.6 триллионов секунд!

Учет перехода на летнее время

Не забывайте о коррекции времени из-за перехода на летнее время (DST) при работе с местным временем и Unix-таймштампами:

Python
Скопировать код
import time
from datetime import datetime, timezone

local_dt = datetime(2023, 3, 8, 12, 0)  # До перехода на DST
unix_timestamp_before_dst = time.mktime(local_dt.timetuple())
reverted_dt_before_dst = datetime.fromtimestamp(unix_timestamp_before_dst, timezone.utc)

local_dt_after_dst = datetime(2023, 3, 9, 12, 0)  # После перехода на DST
unix_timestamp_after_dst = time.mktime(local_dt_after_dst.timetuple())
reverted_dt_after_dst = datetime.fromtimestamp(unix_timestamp_after_dst, timezone.utc)

Важно помнить, что при переходе на летнее время время сдвигается вперед, а при переходе на зимнее — назад!

Визуализация

Давайте наглядно продемонстрируем процесс преобразования datetime в Unix-таймштамп и обратно:

Markdown
Скопировать код
1️⃣ 🕒 ➡️ 🖥️ 🎫 Преобразование из **datetime** в **Unix-таймштамп**:
Python
Скопировать код
from datetime import datetime
unix_timestamp = int(datetime.now().timestamp())
Markdown
Скопировать код
2️⃣ 🖥️ 🎫 ➡️ 🕒 Преобразование из **Unix-таймштампа** обратно в **datetime**:
Python
Скопировать код
reverted_datetime = datetime.fromtimestamp(unix_timestamp)

Процесс осуществлен успешно!

Учет особенностей платформы

Не забывайте, что на разных платформах могут быть свои специфические особенности. Например, метод strftime('%s') для получения секунд с начала эпохи может отличаться на разных системах:

Python
Скопировать код
from datetime import datetime

# Ниже указанный метод может работать не везде 
# seconds_since_epoch_str = datetime.now().strftime('%s')

# Более универсальный способ
seconds_since_epoch = datetime.now().timestamp()

Проверьте работоспособность кода на своей платформе перед использованием '%s'!

Полезные материалы

  1. datetime — Основные типы даты и времени — Документация Python 3.12.2 — "Библия" работы с датами и временем в Python.
  2. Epoch Converter – Конвертер Unix-временных меток — специализированные инструменты для работы с Unix-таймштампами.
  3. Unix-время – Википедия — подробное описание Unix-времени.
  4. Лучшие даты и время для Python — Arrow 🏹 1.3.0 документация — современная библиотека для работы с датой и временем.
  5. База данных временных зон — актуальная информация о временных зонах.
  6. Краткая справка по strftime в Python — удобное руководство по форматированию даты и времени в Python.
  7. dateutil – дополнения к datetime — dateutil 2.8.2 документация — полезные инструменты для расширения возможностей работы с datetime.