Что такое Epoch Time?
Если ты когда-либо работал с датами и временем в программировании, то наверняка сталкивался с Unix timestamps. Но что это на самом деле и зачем мы их используем?
Unix epoch time (также называемый Unix time, POSIX time, или просто "epoch") представляет конкретный момент времени в виде количества секунд, прошедших с 1 января 1970 года в полночь по UTC (Всемирное координированное время). Этот конкретный момент известен как "Unix epoch" или "нулевая точка отсчёта".
Почему 1 января 1970 года?
Эта дата может показаться произвольной, но она была выбрана при разработке Unix в начале 1970-х годов в Bell Labs. Разработчикам нужна была единая отправная точка для системы отслеживания времени, и 1 января 1970 года было близко к моменту, когда они работали над проектом. С тех пор это стало универсальным стандартом.
Понимание формата
Unix timestamps существуют в разных форматах в зависимости от требуемой точности:
- Секунды (10 цифр): Стандартный формат, например
1728773400 - Миллисекунды (13 цифр): Для большей точности, например
1728773400000 - Микросекунды (16 цифр): Для сверхточного времени, например
1728773400000000
Распространённые временные интервалы в секундах
Понимание этих распространённых интервалов поможет тебе работать с timestamps более интуитивно:
| Период времени | Секунды | Быстрый расчёт |
|---|---|---|
| 1 час | 3 600 | 60 × 60 |
| 1 день | 86 400 | 24 × 3 600 |
| 1 неделя | 604 800 | 7 × 86 400 |
| 1 месяц (средн.) | 2 629 743 | 30,44 × 86 400 |
| 1 год (средн.) | 31 556 926 | 365,24 × 86 400 |
Проблема 2038 года (Y2038)
Вот что важно знать: многие системы хранят Unix timestamps как 32-битное знаковое целое число. Это создаёт проблему, похожую на баг Y2K.
32-битное знаковое целое число может считать только до 2 147 483 647 секунд. Как только мы достигнем 19 января 2038 года в 03:14:07 UTC, этот счётчик переполнится и обнулится до отрицательного числа, что потенциально вызовет сбои системы и баги.
Получение текущего Epoch Time
Каждый язык программирования имеет свой способ получения текущего Unix timestamp. Вот самые распространённые методы:
Веб-разработка
JavaScript
// Получить timestamp в миллисекундах, разделить на 1000 для секунд
const timestamp = Math.floor(Date.now() / 1000);
// Альтернативный метод
const timestamp = Math.floor(new Date().getTime() / 1000);
PHP
// Просто и понятно
$timestamp = time();
// Используя DateTime (более гибко)
$timestamp = (new DateTime())->getTimestamp();
Backend языки
Python
import time
# Получить текущий timestamp
timestamp = int(time.time())
# Используя модуль datetime
from datetime import datetime
timestamp = int(datetime.now().timestamp())
Java
// Возвращает миллисекунды, раздели на 1000 для секунд
long timestamp = System.currentTimeMillis() / 1000;
// Используя Instant (Java 8+)
long timestamp = Instant.now().getEpochSecond();
C#
// .NET Framework 4.6+ / .NET Core
long timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
// Старые версии
var epoch = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;
Ruby
# Получить текущий timestamp
timestamp = Time.now.to_i
# Альтернатива
timestamp = Time.new.to_i
Go
import "time"
// Получить текущий Unix timestamp
timestamp := time.Now().Unix()
// Для миллисекунд
milliseconds := time.Now().UnixMilli()
Запросы к базам данных
MySQL
-- Получить текущий timestamp
SELECT UNIX_TIMESTAMP();
-- Получить timestamp из конкретной даты
SELECT UNIX_TIMESTAMP('2025-10-12 14:30:00');
PostgreSQL
-- Получить текущий timestamp
SELECT EXTRACT(EPOCH FROM NOW());
-- Из конкретной даты
SELECT EXTRACT(EPOCH FROM TIMESTAMP '2025-10-12 14:30:00');
SQLite
-- Получить текущий timestamp
SELECT STRFTIME('%s', 'now');
-- Из конкретной даты
SELECT STRFTIME('%s', '2025-10-12 14:30:00');
Командная строка
Unix/Linux Shell
# Получить текущий timestamp
date +%s
# Преобразовать конкретную дату в timestamp
date +%s -d "2025-10-12 14:30:00"
# Для UTC/GMT времени используй -ud вместо -d
date +%s -ud "2025-10-12 14:30:00"
PowerShell
# Получить текущий timestamp
[int][double]::Parse((Get-Date (Get-Date).ToUniversalTime() -UFormat %s))
Преобразование ИЗ Epoch в читаемую дату
Когда у тебя есть Unix timestamp, часто нужно преобразовать его обратно в читаемый формат даты:
JavaScript
// Преобразовать timestamp в объект Date
const date = new Date(timestamp * 1000); // Умножить на 1000 для миллисекунд
// Отформатировать
console.log(date.toLocaleString()); // Локальный формат
console.log(date.toISOString()); // Формат ISO 8601
PHP
// Отформатировать timestamp
$date = date('Y-m-d H:i:s', $timestamp);
// Формат RFC 2822
$date = date('r', $timestamp);
// Используя DateTime
$date = (new DateTime())->setTimestamp($timestamp)->format('Y-m-d H:i:s');
Python
from datetime import datetime
# Преобразовать в объект datetime
dt = datetime.fromtimestamp(timestamp)
# Отформатировать
formatted = dt.strftime('%Y-%m-%d %H:%M:%S')
# Для UTC
dt_utc = datetime.utcfromtimestamp(timestamp)
MySQL
-- Преобразовать timestamp в datetime
SELECT FROM_UNIXTIME(1728773400);
-- С пользовательским форматом
SELECT FROM_UNIXTIME(1728773400, '%Y-%m-%d %H:%i:%s');
Преобразование ИЗ читаемой даты В Epoch
Обратная операция не менее важна:
JavaScript
// Разобрать строку даты в timestamp
const timestamp = Math.floor(new Date('2025-10-12 14:30:00').getTime() / 1000);
// Используя Date.parse()
const timestamp = Math.floor(Date.parse('October 12, 2025') / 1000);
PHP
// Разобрать большинство английских текстов дат
$timestamp = strtotime('15 November 2025');
$timestamp = strtotime('next Monday');
$timestamp = strtotime('+1 week');
// Используя DateTime
$timestamp = (new DateTime('2025-10-12 14:30:00'))->getTimestamp();
Python
from datetime import datetime
import time
# Разобрать строку даты
dt = datetime.strptime('2025-10-12 14:30:00', '%Y-%m-%d %H:%M:%S')
timestamp = int(dt.timestamp())
# Для UTC
import calendar
timestamp = calendar.timegm(time.strptime('2025-10-12 14:30:00', '%Y-%m-%d %H:%M:%S'))
Лучшие практики
При работе с Unix timestamps в твоих приложениях:
- Всегда используй 64-битные целые числа, чтобы избежать проблемы Y2038
- Храни timestamps в UTC в базе данных, преобразовывай в локальное время только для отображения
- Будь последовательным в точности (секунды vs миллисекунды) во всём приложении
- Документируй формат – чётко указывай, используешь ли ты секунды или миллисекунды
- Рассмотри библиотеки с поддержкой часовых поясов для сложных операций с датой/временем
- Никогда не храни локальное время как timestamp без информации о часовом поясе
Заключение
Unix timestamps — это фундаментальная концепция в программировании, которую должен понимать каждый разработчик. Они предоставляют простой, универсальный способ представления времени, который работает во всех системах и языках программирования.
Независимо от того, создаёшь ли ты веб-приложение, работаешь с базами данных или просто нужно запланировать задачи, понимание epoch time значительно облегчит тебе жизнь. Используй наш инструмент Unix Timestamp Converter, чтобы быстро преобразовывать между timestamps и читаемыми датами!