Преобразование datetime в Unix-формат и обратно в Python
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для преобразования объекта datetime
в Unix-таймштамп используйте метод timestamp()
. Для обратного преобразования в datetime
применяется функция fromtimestamp()
:
from datetime import datetime
# Конвертация в Unix-таймштамп
dt_to_unix = datetime.now().timestamp()
# Обратное преобразование в datetime
unix_to_dt = datetime.fromtimestamp(dt_to_unix)
Учет часовых поясов
При работе с датой и временем в различных часовых поясах наиболее целесообразно использовать объекты datetime
, учитывающие временную зону. Это позволяет избежать расстояний и ошибок:
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()
:
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-таймштампами:
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-таймштамп и обратно:
1️⃣ 🕒 ➡️ 🖥️ 🎫 Преобразование из **datetime** в **Unix-таймштамп**:
from datetime import datetime
unix_timestamp = int(datetime.now().timestamp())
2️⃣ 🖥️ 🎫 ➡️ 🕒 Преобразование из **Unix-таймштампа** обратно в **datetime**:
reverted_datetime = datetime.fromtimestamp(unix_timestamp)
Процесс осуществлен успешно!
Учет особенностей платформы
Не забывайте, что на разных платформах могут быть свои специфические особенности. Например, метод strftime('%s')
для получения секунд с начала эпохи может отличаться на разных системах:
from datetime import datetime
# Ниже указанный метод может работать не везде
# seconds_since_epoch_str = datetime.now().strftime('%s')
# Более универсальный способ
seconds_since_epoch = datetime.now().timestamp()
Проверьте работоспособность кода на своей платформе перед использованием '%s'!
Полезные материалы
- datetime — Основные типы даты и времени — Документация Python 3.12.2 — "Библия" работы с датами и временем в Python.
- Epoch Converter – Конвертер Unix-временных меток — специализированные инструменты для работы с Unix-таймштампами.
- Unix-время – Википедия — подробное описание Unix-времени.
- Лучшие даты и время для Python — Arrow 🏹 1.3.0 документация — современная библиотека для работы с датой и временем.
- База данных временных зон — актуальная информация о временных зонах.
- Краткая справка по strftime в Python — удобное руководство по форматированию даты и времени в Python.
- dateutil – дополнения к datetime — dateutil 2.8.2 документация — полезные инструменты для расширения возможностей работы с
datetime
.