
Unix-время, или время в формате POSIX, представляет собой количество секунд, прошедших с 1 января 1970 года 00:00:00 UTC. В Python для работы с этим форматом используется модуль time, который обеспечивает прямой доступ к текущему времени в секундах через функцию time.time(). Она возвращает значение типа float, где целая часть – это секунды, а дробная – доли секунды.
Для точного хранения и преобразования Unix-времени в даты и обратно стоит использовать модуль datetime. Метод datetime.fromtimestamp() позволяет превратить Unix-время в объект datetime с удобной локализацией и последующей обработкой, например форматированием через strftime(). Обратное преобразование выполняется функцией datetime.timestamp(), возвращающей секунды с плавающей точкой.
При работе с временными зонами рекомендуется использовать модуль zoneinfo (Python 3.9+), чтобы исключить ошибки при пересчете времени в локальные зоны. Для автоматического получения текущего Unix-времени в UTC достаточно вызвать datetime.now(tz=timezone.utc).timestamp(), что обеспечивает единообразие при логировании и синхронизации данных между системами.
Использование этих методов позволяет получать Unix-время с точностью до миллисекунд, хранить его в базах данных и корректно конвертировать для отображения пользователю, избегая ручного вычисления и потенциальных ошибок с временными зонами.
Использование модуля time для текущего unix времени

Модуль time предоставляет прямой способ получения текущего unix времени через функцию time.time(). Она возвращает число секунд с 1 января 1970 года в виде числа с плавающей точкой.
Пример использования:
import time
current_unix_time = time.time()
print(current_unix_time)
Функция возвращает значение с точностью до миллисекунд, что позволяет использовать его для таймингов и меток событий.
Для преобразования unix времени в целое число секунд можно использовать int(time.time()), что удобно для хранения или сравнения временных меток.
Для работы с локальным временем в формате структуры struct_time применяется time.localtime(time.time()). Это позволяет получить год, месяц, день, часы, минуты и секунды без необходимости дополнительных вычислений.
Функция time.time() подходит для замеров интервалов, сравнения событий и генерации уникальных меток. Для высокоточной синхронизации предпочтительно использовать time.perf_counter(), однако для стандартного unix времени достаточно time.time().
Получение unix времени из datetime объекта

Для преобразования объекта datetime в unix время используется метод timestamp(). Он возвращает количество секунд, прошедших с 1 января 1970 года UTC. Например:
import datetime
dt = datetime.datetime(2025, 9, 13, 12, 0, 0)
unix_time = dt.timestamp()
Если объект datetime не содержит информации о временной зоне (tzinfo=None), Python считает его локальным временем и преобразует с учетом системной временной зоны. Для корректного результата с UTC необходимо задать временную зону:
import datetime, pytz
dt_utc = datetime.datetime(2025, 9, 13, 12, 0, 0, tzinfo=pytz.UTC)
unix_time = dt_utc.timestamp()
Метод timestamp() возвращает число с плавающей запятой, включая доли секунды. Для целого значения можно использовать int(unix_time). Если требуется работать с миллисекундами, умножьте результат на 1000: unix_ms = int(unix_time * 1000).
При обработке больших массивов datetime объектов рекомендуется заранее переводить все даты в UTC, чтобы избежать ошибок с переходом на летнее время и различиями локальных зон.
Преобразование строки с датой в unix время

Для преобразования строки с датой в unix время в Python используется модуль datetime и функция timestamp(). Строка должна иметь формат, который strptime способен распознать. Например, для строки '2025-09-13 14:30:00' формат будет '%Y-%m-%d %H:%M:%S'.
Пример кода:
from datetime import datetime
date_str = '2025-09-13 14:30:00'
dt = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
unix_time = int(dt.timestamp())
print(unix_time)
Результат будет целым числом, отражающим количество секунд с 1 января 1970 года UTC. Для строк с часовым поясом рекомендуется использовать datetime.fromisoformat() или библиотеку pytz для точного преобразования в UTC перед вызовом timestamp().
Если строка имеет нестандартный формат, нужно точно указать все элементы: день, месяц, год, часы, минуты и секунды. Пропуск компонентов вызывает ошибку ValueError.
Для массовой конвертации дат удобно создавать список строк и применять list comprehension с datetime.strptime, что ускоряет обработку больших данных.
Работа с часовыми поясами при вычислении unix времени
Unix время отсчитывается от 00:00:00 UTC 1 января 1970 года. Любые преобразования локального времени в unix требуют корректного учета часового пояса.
В Python для работы с часовыми поясами используется модуль datetime совместно с pytz или встроенным zoneinfo (Python ≥ 3.9). Основная рекомендация – всегда конвертировать локальное время в UTC перед получением unix времени.
Пример использования zoneinfo:
from datetime import datetime
from zoneinfo import ZoneInfo
local_time = datetime(2025, 9, 13, 15, 30, tzinfo=ZoneInfo('Europe/Moscow'))
unix_time = local_time.timestamp()
Если объект datetime не содержит информации о часовом поясе (naive), вызов timestamp() трактует его как локальное время системы, что может привести к ошибкам при переносе на сервер с другим часовым поясом.
Для массовой обработки дат рекомендуется создавать таблицу соответствий между часовыми поясами и их смещениями, чтобы проверять корректность unix времени:
| Часовой пояс | Смещение UTC | Пример локального времени | Unix время |
|---|---|---|---|
| Europe/Moscow | +3 | 2025-09-13 15:30 | 1747495800 |
| America/New_York | -4 | 2025-09-13 08:30 | 1747495800 |
| Asia/Tokyo | +9 | 2025-09-13 22:30 | 1747495800 |
При работе с базами данных или API, которые используют unix время, всегда храните время в UTC и преобразовывайте его в локальное только при отображении. Это исключает ошибки из-за перехода на летнее/зимнее время и изменений правил в разных странах.
Для вычисления unix времени из строки с указанием часового пояса можно использовать datetime.strptime совместно с ZoneInfo:
dt_str = "2025-09-13 15:30:00"
dt = datetime.strptime(dt_str, "%Y-%m-%d %H:%M:%S").replace(tzinfo=ZoneInfo('Europe/Moscow'))
unix_time = dt.timestamp()
Таким образом, ключевой принцип – перед конвертацией в unix время все объекты datetime должны иметь явно заданный часовой пояс.
Преобразование unix времени обратно в читаемую дату
Для обратного преобразования unix времени в Python используется модуль datetime. Основной метод – fromtimestamp(), который принимает количество секунд с 1 января 1970 года и возвращает объект datetime.
Пример:
import datetime
timestamp = 1694606400
date_time = datetime.datetime.fromtimestamp(timestamp)
print(date_time)
Результат: 2023-09-13 12:00:00. Значение автоматически учитывает локальное время системы. Для работы с UTC применяется datetime.utcfromtimestamp():
date_time_utc = datetime.datetime.utcfromtimestamp(timestamp)
print(date_time_utc)
formatted = date_time.strftime("%d.%m.%Y %H:%M:%S")
print(formatted)
Результат: 13.09.2023 12:00:00. Этот метод удобен для генерации отчетов или логов с точной временной меткой.
Если требуется конвертация больших массивов unix времени, рекомендуется использовать pandas.to_datetime() для ускорения обработки:
import pandas as pd
timestamps = [1694606400, 1694692800]
dates = pd.to_datetime(timestamps, unit='s')
print(dates)
Сравнение unix времени для разных дат

Unix время представляет собой количество секунд, прошедших с 1 января 1970 года 00:00:00 UTC. Сравнивая unix время разных дат, можно вычислить разницу между ними с точностью до секунды, что полезно для анализа временных интервалов.
Пример вычисления unix времени для двух дат в Python:
import time
from datetime import datetime
date1 = datetime(2025, 1, 1, 0, 0)
date2 = datetime(2025, 12, 31, 0, 0)
unix_time1 = int(time.mktime(date1.timetuple()))
unix_time2 = int(time.mktime(date2.timetuple()))
print(unix_time1, unix_time2)
print("Разница в секундах:", unix_time2 - unix_time1)
Результат показывает точное количество секунд между датами, включая високосные года:
- 01.01.2025 → unix время: 1735689600
- 31.12.2025 → unix время: 1767225600
- Разница: 31536000 секунд (365 дней)
Рекомендации при сравнении unix времени:
- Использовать UTC для корректного вычисления интервалов между датами из разных часовых поясов.
- Для точного сравнения учитывать високосные годы и секунды смещения (leap seconds) при необходимости.
- Для массовых вычислений применять функции
datetime.timestamp()для повышения производительности. - Сохранять unix время в формате
intдля простоты арифметических операций.
Сравнение unix времени позволяет быстро определить длительность событий, упорядочить временные точки и конвертировать их в человеко-читаемый формат при необходимости:
duration_seconds = unix_time2 - unix_time1
duration_days = duration_seconds / 86400
print("Разница в днях:", duration_days)
В этом примере разница составит 365 дней, что полностью соответствует календарным датам.
Вопрос-ответ:
Что такое unix-время и зачем оно может понадобиться в Python?
Unix-время — это количество секунд, прошедших с 1 января 1970 года, 00:00:00 по UTC. В Python оно удобно для хранения времени в числовом формате, сравнения дат, расчёта интервалов и передачи временных отметок между системами без привязки к часовым поясам.
Как получить текущее unix-время в Python?
В Python для получения текущего unix-времени можно использовать модуль time. Достаточно вызвать функцию time.time(), которая вернёт число секунд с плавающей точкой с начала эпохи Unix. Например: import time; timestamp = time.time().
Можно ли преобразовать datetime объект в unix-время?
Да, объект datetime можно преобразовать в unix-время. Если используется datetime с указанием часового пояса, можно вызвать метод timestamp(): import datetime; dt = datetime.datetime.now(datetime.timezone.utc); ts = dt.timestamp(). Это вернёт количество секунд с начала эпохи Unix с учётом часового пояса.
Как получить unix-время в миллисекундах, а не в секундах?
По умолчанию time.time() возвращает секунды с дробной частью. Чтобы получить миллисекунды, достаточно умножить результат на 1000 и привести к целому типу: import time; ms = int(time.time() * 1000). Это удобно для работы с API или базами данных, где ожидаются миллисекунды.
