Problem-2038-site/index.html

89 lines
8.1 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Проблема 2038 года</title>
<link href="https://fonts.googleapis.com/css?family=Heebo&display=swap" rel="stylesheet">
<link rel="shortcut icon" href="icon.png" type="image/x-icon">
<link rel="stylesheet" id="style" type="text/css" href="style.css">
<meta name="theme-color" id="meta-color" content="#000000">
</head>
<body>
<div id="button-to-fullscreen" onclick="document.documentElement.requestFullscreen();">
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-arrows-fullscreen" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M1.464 10.536a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3.5a.5.5 0 0 1-.5-.5v-3.5a.5.5 0 0 1 .5-.5z"/>
<path fill-rule="evenodd" d="M5.964 10a.5.5 0 0 1 0 .707l-4.146 4.147a.5.5 0 0 1-.707-.708L5.257 10a.5.5 0 0 1 .707 0zm8.854-8.854a.5.5 0 0 1 0 .708L10.672 6a.5.5 0 0 1-.708-.707l4.147-4.147a.5.5 0 0 1 .707 0z"/>
<path fill-rule="evenodd" d="M10.5 1.5A.5.5 0 0 1 11 1h3.5a.5.5 0 0 1 .5.5V5a.5.5 0 0 1-1 0V2h-3a.5.5 0 0 1-.5-.5zm4 9a.5.5 0 0 0-.5.5v3h-3a.5.5 0 0 0 0 1h3.5a.5.5 0 0 0 .5-.5V11a.5.5 0 0 0-.5-.5z"/>
<path fill-rule="evenodd" d="M10 9.964a.5.5 0 0 0 0 .708l4.146 4.146a.5.5 0 0 0 .708-.707l-4.147-4.147a.5.5 0 0 0-.707 0zM1.182 1.146a.5.5 0 0 0 0 .708L5.328 6a.5.5 0 0 0 .708-.707L1.889 1.146a.5.5 0 0 0-.707 0z"/>
<path fill-rule="evenodd" d="M5.5 1.5A.5.5 0 0 0 5 1H1.5a.5.5 0 0 0-.5.5V5a.5.5 0 0 0 1 0V2h3a.5.5 0 0 0 .5-.5z"/>
</svg>
</div>
<div id="button-fullscreen-exit" onclick="document.exitFullscreen();">
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-fullscreen-exit" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M5.5 0a.5.5 0 0 1 .5.5v4A1.5 1.5 0 0 1 4.5 6h-4a.5.5 0 0 1 0-1h4a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 1 .5-.5zm5 0a.5.5 0 0 1 .5.5v4a.5.5 0 0 0 .5.5h4a.5.5 0 0 1 0 1h-4A1.5 1.5 0 0 1 10 4.5v-4a.5.5 0 0 1 .5-.5zM0 10.5a.5.5 0 0 1 .5-.5h4A1.5 1.5 0 0 1 6 11.5v4a.5.5 0 0 1-1 0v-4a.5.5 0 0 0-.5-.5h-4a.5.5 0 0 1-.5-.5zm10 1a1.5 1.5 0 0 1 1.5-1.5h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 0-.5.5v4a.5.5 0 0 1-1 0v-4z"/>
</svg>
</div>
<div id="counter">
<h1 id="title">До смерти 32-битных систем осталось</h1>
<div id="time"><span id="time-left" onclick="msecDisplaySwitcher()"></span><span id="time-left-msec"></span></div>
<div id="bar">
<p id="time-left-readable" onclick="ReadableTimerSwitcher()"></p>
<progress id="prog" max="2147483647"></progress>
</div>
</div>
<div id="description">
<h3>О чём этот сайт?</h3>
<p>Проблема 2038 года в вычислительной технике — ожидаемые сбои в программном обеспечении накануне 19 января
2038 года. Данная проблема затронет программы и системы, в которых используется представление времени по
стандарту POSIX (UNIX-время), которое представляет собой количество секунд, прошедшее с полуночи 1 января
1970 года. Такое представление времени — это стандарт для Unix-подобных операционных систем (из-за
повсеместного использования языка Си).</p>
<p>Сейчас значение Unix timestamp равно <span id="timestamp"></span>.</p>
<h3>В чём проблема?</h3>
<p>В старых 32-битных системах (до середины 1990-х) используется тип данных time_t для хранения секунд в виде
signed int (32-битного целого со знаком). Самая поздняя дата, которая может быть представлена таким
форматом в стандарте POSIX — это 03:14:07, вторник, 19 января 2038 года по Всемирному времени (UTC).</p>
<p>Более позднее время заставит такое поле данных стать отрицательным, как бы закольцевав таким образом время
(поскольку отрицательное число может быть воспринято программами как время в 1970 или 1901 году, в
зависимости от реализации). В результате любые расчёты, включающие дату позже 19 января 2038 года, могут
привести к сбою программы либо к ошибочным вычислениям.</p>
<p>Для проблемы 2038 года не существует простого решения для существующих комбинаций операционных систем и
прикладного программного обеспечения. Изменение определения типа time_t на 64 бита нарушит бинарную
совместимость программ, существующих хранимых данных и всего другого, использующего представление времени в
бинарном виде. А приведение time_t в целое без знака может нарушить работу программ, которые вычисляют
разницу во времени.</p>
<h3>Что подвержено этой проблеме?</h3>
<p>Многие структуры данных, которые используются сегодня, имеют 32-битные представления времени, встроенные
в их структуру. Полный список этих структур данных практически невозможно составить, но есть хорошо известные
структуры данных, у которых есть проблема времени Unix:</p>
<ul>
<li>файловые системы (многие файловые системы используют только 32 бита для представления времени в индексных
дескрипторах)</li>
<li>форматы двоичных файлов (в которых используются 32-битные поля времени)</li>
<li>базы данных (которые имеют 32-битные поля времени)</li>
<li>языки запросов к базам данных, такие как SQL, которые имеют команды, похожие на <code>UNIX_TIMESTAMP()</code></li>
</ul>
<p>Примеры систем, использующих структуры данных, которые могут содержать 32-битные представления времени, включают:</p>
<ul>
<li>встроенные подсистемы управления и мониторинга завода, НПЗ</li>
<li>различное медицинское, военное оборудование</li>
</ul>
<p>Любая система, использующая структуры данных, содержащие 32-битные представления времени, представляет риск.
Степень риска зависит от характера отказа.</p>
<h3>Использаванные материалы при составлении этого текста</h3>
<ul>
<li><a href="https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_2038_%D0%B3%D0%BE%D0%B4%D0%B0">Проблема 2038 года - Wikipedia RU</a></li>
<li><a href="https://en.wikipedia.org/wiki/Year_2038_problem">Year 2038 problem - Wikipedia EN</a></li>
</ul>
</div>
<footer>
<hr>
<p>Автор сайта: <a href="https://t.me/dan63047">dan63047</a></p>
</footer>
<script type="text/javascript" src="jquery-3.4.1.min.js"></script>
<script type="text/javascript" src="script.js"></script>
</body>
</html>