Unix Epoch Time Converter і Discord Timestamp Generator
Перетворюйте мітки часу Unix на зрозумілі людині дати і навпаки. Створюйте мітки часу Discord, які можна копіювати та вставляти, у реальному часі.
Перетягуйте повзунок для візуального порівняння часу в різних часових поясах.
Для синхронізації систем розподілених баз даних, реєстрації подій додатків і налагодження корисних навантажень API потрібен дуже точний стандартизований метод відстеження часу. Стандартизація епохального часу Unix надає незмінне ціле число, яке не залежить від часового поясу, яке представляє точну кількість секунд, що минуло з 1 січня 1970 року. У цьому вичерпному посібнику докладно описано механізм міток часу Unix, демонструються методи програмного перетворення в сучасних середовищах і пояснюється, як аналізувати альтернативні структури часу, як-от ідентифікатори сніжинок Discord.
Розуміння часу епохи Unix і динаміки позначок часу
Час Unix (також відомий як епоха Unix, час POSIX або мітка часу Unix) відстежує хронологічний прогрес як ціле число, що збільшується. Він представляє кількість секунд, що минули з контрольної точки 1 січня 1970 року, 00:00:00 UTC (подання ISO 8601: 1970-01-01T00:00:00Z). У той самий момент цієї епохи лічильник стояв рівно на 0.
Часові мітки епохи суворо не залежать від часового поясу. Ціле число представляє єдиний універсальний момент у всьому світі, а локальні клієнтські програми коригують рівень представлення, застосовуючи певні зсуви UTC. Щоб побачити, як працює відображення часового поясу, порівняйте локальні інтерпретації позначки часу 1577923200:
| Регіон часового поясу | Локалізовані дата й час | Значення зсуву |
|---|---|---|
| GMT / UTC | Четвер, 2 січня 2020 р., 00:00:00 | UTC+00:00 |
| Індія (Калькутта) | Четвер, 2 січня 2020 р., 05:30:00 | UTC+05:30 |
| Америка (Нью-Йорк) | Середа, 1 січня 2020 р., 19:00:00 | UTC-05:00 |
Час Unix не враховує високосні секунди. Натомість передбачається, що кожен календарний день містить рівно 86 400 секунд. Через те, що високосні секунди ігноруються в лічильнику (мають таке саме значення часової позначки, що й попередня секунда), час епохи Unix не підтримує ідеальну лінійну синхронізацію з всесвітнім координованим часом (UTC) протягом великих геологічних проміжків. Для дат, що передують початковому порогу 1 січня 1970 року, система використовує цілі від’ємні значення (наприклад, -86400 позначає 31 грудня 1969 року, 00:00:00 UTC).
Для роботи з цими числами в моделюванні бази даних або у фонових завданнях розробники покладаються на фіксовані хронологічні інтервали. У наведеному нижче списку стандартні одиниці зіставляються з їх точними значеннями в секундах:
- 1 година: 3600 секунд
- 1 день: 86 400 секунд
- 1 тиждень: 604 800 секунд
- 1 місяць (обчислено за 30,44 дня): 2 629 743 секунди
- 1 рік (обчислено за 365,24 днів): 31 556 926 секунд
Обчислення значень тривалості безпосередньо за допомогою цих значень спрощує обробку розкладів cron, термін дії токенів JWT або створення користувацьких індексів TTL у базах даних NoSQL.
Секунди проти мілісекунд: навігація з точністю цифр
Мітки часу в сучасному програмному забезпеченні працюють із різними рівнями точності залежно від вимог програми. Більшість проектів системи використовують одну з цих чотирьох роздільних здатностей:
- Секунди (10-значний формат): Наприклад,
1735689600. Це стандартна роздільна здатність, яка використовується в Python, PHP, реляційних базах даних (наприклад, PostgreSQL і MySQL) і середовищах оболонки Linux. - Мілісекунди (13-значний формат): Наприклад,
1735689600000. Цей формат є стандартним у JavaScript, Java та більшості сучасних веб-API на основі JSON. - Мікросекунди (16-значний формат): Наприклад,
1735689600000000. Зазвичай зарезервовано для високоточного трасування, системного журналювання та низькорівневих діагностичних платформ. - Наносекунди (19-значний формат): Використовується в спеціалізованих системах трасування на рівні ядра та мережах обробки в реальному часі.
Щоб конвертувати секунди в мілісекунди, помножте ціле число на 1000. І навпаки, щоб повернути мілісекунди до стандартних секунд, застосуйте ціле числове ділення на 1000, щоб видалити кінцеві цифри.
Розуміння орієнтирів і послідовних часових позначок Unix дає чітке бачення хронологічної прогресії та масштабу:
| Позначка часу Unix | Еквівалент UTC дати та часу | Контекст віхи |
|---|---|---|
| 0 | Четвер, 1 січня 1970 р., 00:00:00 UTC | Епоха Unix |
| 1 000 000 000 | Неділя, 9 вересня 2001 р., 01:46:40 UTC | Віха в одну мільярдну секунду |
| 1 234 567 890 | П'ятниця, 13 лютого 2009 р., 23:31:30 UTC | Послідовна десяткова прогресія цифр |
| 1 735 689 600 | Середа, 1 січня 2025 р., 00:00:00 UTC | Початок 2025 року |
| 2 000 000 000 | Вівторок, 18 травня 2033 р., 03:33:20 UTC | Двохмільярдна друга віха |
| 2,147,483,647 | Вівторок, 19 січня 2038 р., 03:14:07 UTC | Абсолютний максимальний 32-розрядний ліміт зі знаком |
Проблема 2038 року: чому 32-розрядні системи виходять з ладу
Застарілі системи, вбудоване мікропрограмне забезпечення та схеми баз даних, що зберігають мітки часу Unix як 32-розрядні цілі числа зі знаком, зрештою стикаються з обмеженням переповнення. 32-розрядне ціле число зі знаком може зберігати лише значення до 2 147 483 647. Точна точка перелому припадає на 19 січня 2038 року о 03:14:07 UTC.
У наступний такт системного годинника (03:14:08 UTC) цілочисельний лічильник переповнюється та обертається до мінімального від’ємного ліміту -2,147,483,648. Системи, які не впораються з цим переходом, інтерпретуватимуть дату як 13 грудня 1901 року. Це призведе до збоїв системи, недійсності сертифікатів, помилок файлової системи та пошкоджених запитів до бази даних.
Програмні методи для перетворення та створення часових позначок Unix
Щоб допомогти розробникам фіксувати поточний час і виконувати перетворення, у наведеній нижче таблиці описано методи отримання стандартних часових позначок епохи та перетворення загального значення (використовуючи 1800000000 як посилання) назад у місцевий час на різних мовах і платформах.
| Мова / Платформа | Поточна епоха (секунди) | Перетворення епохи на дату |
|---|---|---|
| JavaScript | Math.floor(Date.now() / 1000) | нова дата (1800000000 * 1000).toLocaleString() |
| Python | int(time.time()) | time.ctime(1800000000) |
| Java | Instant.now().getEpochSecond() | new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(нова дата(1800000000L * 1000)) |
| Іди | time.Now().Unix() | time.Unix(1800000000, 0) |
| PHP | час() | дата ('r', 1800000000) |
| рубін | Time.now.to_i | Time.at(1800000000) |
| C# | DateTimeOffset.Now.ToUnixTimeSeconds() | DateTimeOffset.FromUnixTimeSeconds(1800000000).LocalDateTime |
| C++ | duration_cast |
— |
| Іржа | SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs() | — |
| Perl | час | скаляр місцевого часу (1800000000) |
| PostgreSQL | SELECT EXTRACT(EPOCH FROM now()); | SELECT TO_TIMESTAMP(1800000000); |
| MySQL | SELECT UNIX_TIMESTAMP(NOW()); | SELECT FROM_UNIXTIME(1800000000); |
| SQL Server | SELECT DATEDIFF(SECOND, '1970-01-01', GETUTCDATE()); | SELECT DATEADD(SECOND, 1800000000, '1970-01-01'); |
| SQLite | ВИБРАТИ unixepoch(); | SELECT datetime(1800000000, 'unixepoch'); |
| Оболонка Unix / Linux | дата +%s | дата -ud @1800000000 |
| macOS | дата +%s | дата -j -r 1800000000 |
| PowerShell | [DateTimeOffset]::Now.ToUnixTimeSeconds() | [DateTimeOffset]::FromUnixTimeSeconds(1800000000).LocalDateTime |
| Excel / Аркуші | — | =(A1 / 86400) + 25569 |
Власні епохи та генератори позначок часу Discord у вигляді сніжинок
Різні архітектури використовують спеціалізовані епохи відліку та збільшують роздільну здатність залежно від апаратних платформ, баз даних або характеристик програми. Деякі з цих форматів включають:
- Мітка часу LDAP: Враховується блоками по 100 наносекунд, починаючи з 1 січня 1601 року.
- .NET DateTime Ticks: рахується блоками по 100 наносекунд, починаючи з григоріанського року 1.
- Мітка часу Chrome/WebKit: рахується в мікросекундах, починаючи з 1 січня 1601 року.
- Mac HFS+: Лічиться в секундах, починаючи з 1 січня 1904 року.
- Позначка часу NTP: Лічиться в секундах, починаючи з 1 січня 1900 року.
- Час GPS: рахується в секундах і тижнях, починаючи з 6 січня 1980 року.
- Позначка часу SAS: Відраховується в секундах або днях, починаючи з 1 січня 1960 року.
- Cocoa Core Data: Лічиться в секундах, починаючи з 1 січня 2001 року.
- Excel OADate: рахується в дробових днях, починаючи з 1 січня 1900 року.
- FAT Timestamp: Лічиться в секундах, починаючи з 1980 або 2000.
- Юліанський день: Вимірює хронологічний прогрес у днях від давніх астрономічних контрольних точок.
- Ідентифікатор сніжинки: децентралізований формат індексування позначок часу, який використовується Discord і Twitter (X).
Розуміння позначок часу та ідентифікаторів сніжинок Discord
Discord генерує унікальні децентралізовані 64-розрядні цілі числа без знаку (ідентифікатори сніжинок) для ідентифікації таких об’єктів, як повідомлення, канали, сервери та користувачі. На відміну від стандартних інкрементних цілих чи UUID з високими накладними витратами, сніжинка Discord вбудовує точний час створення в сам ідентифікатор, що сприяє підвищенню продуктивності в розподілених системах.
Структура ідентифікатора сніжинки Discord розділена на чотири окремі компоненти:
- Мітка часу (42 біти): представляє мілісекунди, що минули з моменту власної епохи Discord (установлено на 1 січня 2015 року о 00:00:00 UTC, еквівалентно мітці часу Unix
1420070400000). - Ідентифікатор працівника (5 біт): представляє внутрішній індекс робочого сервера.
- Ідентифікатор процесу (5 біт): Відображає внутрішній індекс процесу.
- Приріст (12 біт): послідовний лічильник, який скидається до 0 кожну мілісекунду за процес.
Щоб відображати читабельні дати в повідомленнях Discord, які автоматично підлаштовуються під місцевий часовий пояс користувача, який переглядає, розробники використовують генератори позначок часу Discord. Введення стандартної позначки часу Unix у ці генератори створює відформатований рядок уцінки. У таблиці нижче перераховано доступні формати стилів:
| Синтаксис Markdown | Приклад виведення (для Unix 1735689600) |
Опис стилю відображення |
|---|---|---|
<t:1735689600:t> |
00:00 | Короткий час |
<t:1735689600:T> |
00:00:00 | Довгий час |
<t:1735689600:d> |
01.01.2025 | Коротка дата |
<t:1735689600:D> |
1 січня 2025 року | Довга дата |
<t:1735689600:f> |
1 січня 2025 року 00:00 | Коротка дата/час |
<t:1735689600:F> |
середа, 1 січня 2025 року 00:00 | Довга дата/час |
<t:1735689600:R> |
через 5 років / 5 років тому | Відносний час |
Оптимізація робочих процесів часу в розподілених системах
Управління обчисленнями часу в сучасних розподілених системах вимагає стандартизованого підходу, щоб запобігти дрейфам часових поясів, помилкам розміру корисного навантаження та збоям переповнення. Стандартизація структур баз даних у стандартній епосі Unix спрощує завдання керування часом, забезпечуючи узгоджені операції між мікросервісами та зовнішніми інтерфейсами.
Розробляючи API або налаштовуючи черги повідомлень, пам’ятайте про ці три рекомендації:
- Зберігайте час у форматі UTC або цілого епохи: Зберігайте постійні шари чистими від зсувів місцевого часового поясу. Застосовуйте локалізацію виключно на рівні презентації.
- Надайте пріоритет 64-розрядному представленню: Під час розробки стовпців бази даних або вибору структур програмування відмовтеся від 32-розрядних типів, щоб запобігти переповненню середовища виконання 2038 року.
- Виберіть відповідну точність: відповідність специфікаціям системи (наприклад, використання мілісекунд для подій API та наносекунд лише під час відстеження отриманих розподілених блокувань).
Під час перетворення часових позначок або перевірки епох за допомогою утиліт браузера безпека та конфіденційність мають першорядне значення. Інструмент перетворення Toolsaur безпосередньо реалізує цю філософію: «Уся обробка виконується локально у вашому браузері. Ваші дані ніколи не надсилаються на наші сервери». Це гарантує, що конфіденційні системні журнали, що містять мітки часу бази даних, ніколи не потраплять до сторонніх кінцевих точок.
Поширені запитання про перетворювачі епохи
Чому мітки часу Unix не залежать від часового поясу?
Часові мітки Unix представляють абсолютний час, що минув з моменту єдиної глобальної точки відліку (1 січня 1970 року, 00:00:00 UTC). Оскільки ця базова початкова точка є ідентичною незалежно від географічного розташування, обчислене ціле число часової позначки залишається незмінним. Коригування місцевого часового поясу застосовується лише під час форматування позначки часу в зрозумілий людині рядок дати в клієнтських інтерфейсах.
Яка різниця між 10-значною та 13-значною мітками часу?
10-значна позначка часу представляє точність у секундах (наприклад, 1735689600), що типово для операційних систем POSIX, Python і баз даних SQL. 13-значна позначка часу представляє точність у мілісекундах (наприклад, 1735689600000), яка є стандартною для середовища виконання JavaScript, Java та сучасних REST API. Для переходу між ними потрібно помножити або поділити на 1000.
Як проблема 2038 року вплине на сучасні бази даних?
Якщо стовпець бази даних зберігає мітки часу Unix із використанням 32-розрядного цілочисельного типу даних зі знаком (наприклад, INT у старіших схемах бази даних), будь-який запис із міткою часу після 19 січня 2038 року, 03:14:07 UTC призведе до переповнення. Це перетворює число на від’ємне значення, інтерпретуючи майбутні дати як 13 грудня 1901 р. Системи мають перенести ці стовпці на 64-розрядні цілі числа зі знаком (BIGINT).
Як час Unix обробляє високосні секунди?
Час Unix не враховує високосних секунд і передбачає, що кожен день має рівно 86 400 секунд. Коли відбувається додаткова секунда, мітка часу Unix повторюється або зупиняється на секунду. Цей вибір дизайну спрощує математичні обчислення, але спричиняє незначні відхилення від точних часових шкал Всесвітнього координованого часу (UTC).
Що таке ідентифікатор сніжинки Discord і чим він відрізняється від стандартної мітки часу Unix?
Ідентифікатор сніжинки Discord — це спеціальне 64-розрядне ціле число без знаку, яке кодує позначку часу створення разом із метаданими архітектури сервера (ідентифікатор робочого елемента, ідентифікатор процесу та локальний приріст). На відміну від стандартної 10-значної мітки часу Unix у секундах, ідентифікатор сніжинки використовує спеціальну епоху, починаючи з 1 січня 2015 року, і відстежує інтервали в мілісекундах, зберігаючи цей високоточний час у перших 42 бітах ідентифікатора.
Як можна перетворити позначку часу епохи в Microsoft Excel?
Excel відстежує дати як кількість днів, що минули з 1 січня 1900 р. Щоб перетворити стандартну 10-значну позначку часу Unix (у секундах) у комірці A1 на зрозумілу дату в Excel, застосуйте формулу =(A1 / 86400) + 25569, де 86400 — це кількість секунд на день, а 25569 — зсув у днях між Excel епохи та епохи Unix. Встановіть форматування комірки на «Дата» або «Час», щоб переглянути результат.