Epoch Time: Основа Unix Timestamp

Что такое Epoch Time?

Если ты когда-либо работал с датами и временем в программировании, то наверняка сталкивался с Unix timestamps. Но что это на самом деле и зачем мы их используем?

Unix epoch time (также называемый Unix time, POSIX time, или просто "epoch") представляет конкретный момент времени в виде количества секунд, прошедших с 1 января 1970 года в полночь по UTC (Всемирное координированное время). Этот конкретный момент известен как "Unix epoch" или "нулевая точка отсчёта".

Быстрый пример: Если текущий Unix timestamp равен 1728773400, это означает, что прошло ровно 1 728 773 400 секунд с момента полуночи 1 января 1970 года.

Почему 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, этот счётчик переполнится и обнулится до отрицательного числа, что потенциально вызовет сбои системы и баги.

Важно: Современные системы переходят на 64-битные timestamps, которые не переполнятся ещё 292 миллиарда лет. Убедись, что твои приложения используют 64-битные целые числа для хранения timestamps!

Получение текущего 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 и читаемыми датами!

Попробуй сейчас: Переходи к нашему инструменту конвертера, чтобы попрактиковаться в работе с Unix timestamps в реальном времени!