Tools Blog

Какво е Unix Epoch Time? Ръководство за разработчици за времеви отпечатъци

Unix Epoch Timestamp Explained

Ако някога сте отправяли заявки към база данни или сте работили с модерен API, вероятно сте виждали датите, върнати не като „12 октомври 2026 г.“, а като масивен, плашещ низ от числа като 1791800000. Това е Unix Timestamp и е универсалната основа на отчитането на времето в компютърните науки.

Работата с дати и часове в програмирането е изключително трудна. Часовите зони се променят, лятното часово време започва и спира непредвидимо, а високосните години въвеждат допълнителни дни. За да разрешат тази хаотична реалност, инженерите, изградили операционната система Unix, решиха да измислят своя собствена абсолютна времева линия.

🎥 Образователно видео: Проблемът Y2K38 и епохалното време (Заместител за вграден концептуален урок за YouTube)

Произход: 1 януари 1970 г

Unix Timestamp е просто броят секунди, изминали от 1 януари 1970 г., в 00:00:00 UTC. Този точно момент в историята е известен като „Епохата на Unix“.

Защо 1970 г.? Защото в началото на 70-те години съхранението беше невероятно скъпо. Съхраняването на дата като четим от човека низ като "1970-01-01 00:00:00" заема близо 20 байта памет. Съхраняването му като едно 32-битово цяло число отне само 4 байта. Като направиха началната точка близо до времето, когато Unix е изобретен, те увеличиха максимално количеството бъдещо време, което могат да съхраняват в тези 4 байта.

Защо разработчиците обичат Unix времеви отпечатъци

Основната причина, поради която Unix времето е универсално възприето в API, бази данни и микроуслуги е, че няма часова зона. Той представлява единичен, абсолютен момент във времето в световен мащаб.

Ако запишете събитие в база данни, като използвате времето на локалния сървър („03:00 PM EST“) и по-късно мигрирате сървъра си в Лондон, цялата ви математика се проваля. Но ако дадено събитие се случи на времево клеймо 1700000000, този номер е идентичен, независимо дали потребителят, който го прави, е в Токио, Ню Йорк или Париж. Приложението за интерфейс просто взема това цяло число и го преобразува математически в местната часова зона на потребителя на неговия екран.

Преобразувайте времеви клейма незабавно

Не се опитвайте да изчислявате секунди наум. Използвайте нашия офлайн инструмент, за да преведете незабавно 10-цифрени или 13-цифрени времеви отпечатъци в четими от човека дати във вашата местна часова зона.

Отворете конвертора на времеви клейма

Секунди срещу милисекунди (Правилото за 10 срещу 13 цифри)

Една от най-често срещаните грешки в уеб разработката е предаването на клеймо за време към функция и получаването на дата през 1970 или 52 000 година. Това се случва поради объркване между секунди и милисекунди.

  • Стандартно Unix време (секунди): 10-цифрено число (напр. 1700000000). Това е стандартът в Linux, PHP и повечето бекенд бази данни като MySQL.
  • Време на JavaScript (милисекунди): 13-цифрено число (напр. 1700000000000). Функцията Date.now() на JavaScript включва милисекунди за по-висока точност.

Ако подадете 10-цифрено времево клеймо на бекенда в JavaScript, без да го умножите по 1000, JavaScript предполага, че говорите за първите няколко дни на януари 1970 г.

// Correctly handling a Unix timestamp in JavaScript
const backendTimestamp = 1700000000;
const dateObject = new Date(backendTimestamp * 1000);

console.log(dateObject.toLocaleDateString()); // Converts to local user timezone

Проблемът от 2038 г. (Y2K38)

Времето на Unix има краен срок. Тъй като първоначално е било съхранено като 32-битово цяло число със знак, максималният брой, който може да съдържа, е 2,147,483,647.

На 19 януари 2038 г. в 03:14:07 UTC часовникът на Unix ще достигне това максимално число. Една секунда по-късно цялото число ще се препълни, обръщайки се към отрицателно число. Наследените системи, които не са надградени до 64-битова архитектура, изведнъж ще повярват, че годината е 1901, причинявайки катастрофални повреди в софтуера по целия свят.

За щастие, почти целият съвременен хардуер, бази данни и езици за програмиране (като 64-битови ядра на Linux и модерен Node.js) вече преминаха към 64-битово време, избутвайки следващото преливане милиарди години в бъдещето.

Често задавани въпроси (FAQ)

Времето на Unix отчита ли високосните секунди?

Изненадващо, не. Unix времето предполага, че всеки ден има точно 86 400 секунди. Когато светът добави „високосна секунда“, за да се приспособи към въртенето на Земята, Unix системите обикновено просто повтарят едно и също времево клеймо два пъти, за да останат синхронизирани, без да нарушават математическите изчисления.

Може ли Unix Timestamp да бъде отрицателен?

да Всяко времево клеймо, по-малко от 0, представлява дата преди епохата на Unix (1 януари 1970 г.). Например -86400 представлява точно 31 декември 1969 г.

Защо преобразуваната ми дата винаги се показва като 1970 г.?

Вероятно предавате 10-цифрено времево клеймо във функция, която очаква 13 цифри (милисекунди). Умножете вашето времево клеймо по 1000, преди да го конвертирате.