Unix-метки времени
Понимание эпохального времени
Узнать о метках времениUnix-метка времени вида «1704067200» означает 1 января 2024 года в полночь по UTC. Это простое число — количество секунд с 1 января 1970 года — является универсальным способом представления времени в компьютерах. Понимание Unix-меток времени необходимо для программирования, работы с базами данных и API.
Почему 1970 год?
Операционная система Unix была разработана в конце 1960-х годов в Bell Labs. Когда разработчикам понадобилась произвольная точка отсчёта для хронометража:
- 1 января 1970 года было выбрано как круглая дата, близкая к моменту создания системы
- Это позволяло 32-битным целым числам охватывать даты далеко в будущем
- Начало с полуночи UTC обеспечивало простоту и универсальность
Эта «эпоха» стала фактическим стандартом в вычислительной технике.
Конвертация меток времени
Из метки времени в дату
| Метка времени | Дата (UTC) |
|---|---|
| 0 | 1 января 1970 г. 00:00:00 |
| 86400 | 2 января 1970 г. 00:00:00 |
| 1000000000 | 9 сентября 2001 г. 01:46:40 |
| 1234567890 | 13 февраля 2009 г. 23:31:30 |
| 1704067200 | 1 января 2024 г. 00:00:00 |
| 2000000000 | 18 мая 2033 г. 03:33:20 |
| 2147483647 | 19 января 2038 г. 03:14:07 (предел 32-бит) |
Полезные временные интервалы
| Период | Секунды |
|---|---|
| 1 минута | 60 |
| 1 час | 3 600 |
| 1 день | 86 400 |
| 1 неделя | 604 800 |
| 1 год (прибл.) | 31 536 000 |
Метки времени в миллисекундах
Многие системы используют миллисекунды вместо секунд:
| Формат | Пример (один и тот же момент) | Используется в |
|---|---|---|
| Секунды | 1704067200 | Unix, PHP, Python |
| Миллисекунды | 1704067200000 | JavaScript, Java, JSON API |
| Микросекунды | 1704067200000000 | Некоторые базы данных |
| Наносекунды | 1704067200000000000 | Go, некоторые системы |
Для конвертации: миллисекунды ÷ 1000 = секунды
Работа с метками времени в коде
JavaScript
// Текущая метка времени (миллисекунды)
Date.now(); // 1704067200000
// Метка времени в дату
new Date(1704067200 * 1000);
// Дата в метку времени
Math.floor(new Date('2024-01-01').getTime() / 1000);Python
import time, datetime
# Текущая метка времени
time.time() # 1704067200.0
# Метка времени в datetime
datetime.datetime.fromtimestamp(1704067200)
# datetime в метку времени
datetime.datetime(2024, 1, 1).timestamp()SQL
-- MySQL: Текущая метка времени
SELECT UNIX_TIMESTAMP();
-- Метка времени в дату
SELECT FROM_UNIXTIME(1704067200);
-- Дата в метку времени
SELECT UNIX_TIMESTAMP('2024-01-01');Преимущества Unix-меток времени
- Независимость от часовых поясов: всегда UTC, без проблем с летним временем
- Простая арифметика: прибавление/вычитание секунд для расчётов
- Компактное хранение: одно целое число вместо форматированной строки
- Сортировка: числовая сортировка равна хронологической
- Универсальность: работает во всех языках программирования и системах
Когда использовать метки времени, а когда форматированные даты
- Метки времени: хранение, вычисления, API, базы данных
- Форматированные даты: отображение пользователю, отчёты, журналы
Заключение
Unix-метки времени подсчитывают секунды с 1 января 1970 года UTC. Эта простая система обеспечивает универсальное представление времени на компьютерах и в языках программирования. Помните, что некоторые системы используют миллисекунды (13 цифр) вместо секунд (10 цифр), а 32-битные системы столкнутся с ограничением в 2038 году. Для хранения и вычислений метки времени идеальны; для отображения конвертируйте их в удобочитаемые форматы.