Понимание Unix-временных меток: полное руководство для разработчиков
Что такое Unix timestamp?
Unix timestamp — это способ отслеживания времени как непрерывного общего количества секунд. Он отсчитывает количество секунд, прошедших с 1 января 1970 года, 00:00:00 UTC — точки отсчёта, известной как «Unix Epoch».
Например, Unix timestamp 1719000000 представляет конкретный момент времени: примерно 22 июня 2024 года, 00:00 UTC. Каждую секунду это число увеличивается на единицу.
Зачем использовать Unix timestamps?
Unix timestamps повсеместно используются в разработке ПО по нескольким причинам:
- Независимость от часовых поясов: Timestamp представляет один и тот же момент по всему миру. Нет неоднозначности относительно EST, PST или JST — он всегда основан на UTC.
- Простое сравнение: Сравнение двух timestamp — это простое сравнение чисел. Если timestamp A больше timestamp B, значит событие A произошло после события B.
- Эффективное хранение: Хранение 10-значного целого числа значительно экономичнее, чем хранение отформатированной строки даты, например «2024-06-22T00:00:00Z».
- Математические операции: Добавление 86 400 секунд к timestamp даёт ровно 24 часа спустя. Не нужно беспокоиться о границах месяцев или високосных годах.
Секунды против миллисекунд
Unix timestamps бывают двух распространённых форматов:
- Секунды (10 цифр): Оригинальный формат Unix timestamp. Пример:
1719000000 - Миллисекунды (13 цифр): Используются JavaScript и многими современными API для более высокой точности. Пример:
1719000000000
Распространённый источник ошибок — смешивание этих двух форматов. Если вы передадите timestamp в миллисекундах функции, ожидающей секунды, дата будет неверной (примерно на 50 000 лет в будущем).
Работа с timestamp в разных языках
JavaScript
const now = Date.now(); // миллисекунды const seconds = Math.floor(Date.now() / 1000); const date = new Date(seconds * 1000);
Python
import time seconds = int(time.time()) from datetime import datetime dt = datetime.fromtimestamp(seconds)
PHP
$timestamp = time(); // секунды
$date = date('Y-m-d H:i:s', $timestamp);
MySQL
SELECT UNIX_TIMESTAMP(); -- текущий timestamp SELECT FROM_UNIXTIME(1719000000); -- преобразование в дату
Распространённые ошибки
- Проблема 2038 года: 32-битные знаковые целые числа переполнятся 19 января 2038 года. Системам, использующим 32-битные timestamp, потребуется переход на 64-битные целые числа.
- Високосные секунды: Unix timestamps не учитывают високосные секунды. Большинство систем просто игнорируют их, что может вызвать небольшие расхождения с атомарным временем.
- Отображение часового пояса: Всегда помните, что Unix timestamp — это UTC. Для отображения пользователям требуется конвертация в их локальный часовой пояс.
Конвертер timestamp TryQuickToolBox
Наш бесплатный инструмент конвертирует между Unix timestamp (секунды и миллисекунды), датами ISO 8601, временем UTC и локальным временем. Автоопределение означает, что вы можете вставить любой формат и получить мгновенный результат. Кликните любой результат, чтобы скопировать его в буфер обмена.