Что такое время Unix и когда наступила эпоха Unix?

Что такое время Unix и когда наступила эпоха Unix?

Почему в Unix есть собственное понятие времени? Какая эпоха и в чем проблема Y2038?





Время Unix - это средство представления определенной даты и времени, используемое Linux, macOS и многими другими совместимыми системами. Он настолько распространен, что вы, вероятно, используете его, даже не подозревая об этом. Однако, как только вы поймете время Unix, вы заметите его во многих контекстах. Несколько инструментов могут помочь вам в работе со временем Unix.





Какова цель Unix Time?

Время Unix - это количество секунд, прошедших с фиксированной даты и времени. Это формат даты и времени (или отметки времени), который отличается от привычных нам удобочитаемых дат и времени. Это чисто из соображений эффективности. Для хранения одного числа, представляющего секунды, требуется намного меньше места, чем для хранения отдельных значений года, месяца, часа и т. Д.





Конечно, говоря современным языком, разница в пространстве не так уж и велика. Но учтите, что Unix возник в конце 1960-х, когда доступное хранилище было намного меньше. Также часто используются временные метки, поэтому их хранилище увеличивается. Например, с каждым файлом связаны три метки времени.

Формат практически невозможно перевести в уме, если вы не гений математики. Но у него все еще есть некоторые преимущества перед более читаемыми альтернативами, такими как Ср, 21 окт 2015 07:28:00 GMT . Вы можете легко и быстро заказать две метки времени Unix. Также обычно быстрее определить разницу между двумя отметками времени. Это особенно верно для дат, близких друг к другу, например, в соседние дни.



Об эпохе

Итак, время Unix - это общее количество секунд с определенного момента времени. Но что это за момент времени? Его 00:00:00 UTC на 1 января 1970 г. . Это часто называют эпохой Unix. Программисты выбрали эту дату для эпохи из соображений удобства, поскольку это была ближайшая круглая дата, когда они изобрели время Unix.

Возможно, вы видели эту дату, когда что-то пошло не так. Это определенно ошибка, но она выглядит очень странно, когда она приводит к дате, предшествующей тому времени, когда многие из нас родились! Однако это совершенно понятно, если вы знаете о времени Unix. Если какая-либо система пытается отобразить метку времени, которая не имеет значения, она часто преобразуется в 0 и приводит к точной дате эпохи.





мой iphone не подключается к моему компьютеру

Формат данных времени Unix

Собственно говоря, нет. Исходным типом данных было 32-битное целое число, и это часто остается так, даже в гораздо более мощных системах.

Этот тип данных позволяет значению хранить в общей сложности 2 ^ 32 секунды, что составляет чуть более 136 лет. Это значение обычно подписано, что означает, что оно может быть отрицательным или положительным. Таким образом, обычно это 68 лет по обе стороны от эпохи, то есть с 1902 по 2038 годы.





Конечно, это еще ограниченный период. Но в основном формат временной метки использовался для таких понятий, как модификация файлов. Очень важно было представить время, близкое к настоящему, а не древнюю историю или далекое будущее. Даже для таких приложений, как календари, редко требуется представлять даты более чем на несколько десятилетий в будущем.

Но это не значит, что в этом ограниченном промежутке времени нет проблем ...

Проблема 2038 года

Ошибка 2000 года (одна из худших ошибок программирования в истории) затронула компьютерные системы, которые хранят годы в виде двузначных значений. Когда наступил 2000 год, такие системы относились к нему так, как будто это был 1900 год. В действительности это было не так катастрофично, как опасались, главным образом потому, что многие люди заранее потратили много времени и усилий, готовясь к нему.

Если бы вы обратили внимание на предыдущий раздел, вы могли бы заметить аналогичную проблему, которая может повлиять на время Unix. Что ж, у Unix time есть собственная проблема с данными: проблема Y2k38. (Это часто называют проблемой, а не ошибкой; возможно, мы стали более оптимистичными с 2000 года!) Когда время Unix буквально истечет в 2038 году, системы будут рассматривать новые даты как 1902 или 1970. Или, возможно, они ' Я просто потерплю неудачу.

По крайней мере, эта проблема нас не коснется ровно в полночь в канун Нового года. Последняя секунда 32-битного времени Unix приходится на 19 марта. В конце концов, мы, скорее всего, модернизируем большинство систем к 2038 году, или к тому времени они все равно устареют.

Некоторые полезные ресурсы по меткам времени

В Конвертер эпохи site, возможно, является наиболее полным преобразователем временных меток. Он начинается с отображения текущего времени Unix - в реальном времени - и добавляет к этому почти все мыслимые функции. Его основное использование - для преобразования между отметками времени и датами, удобочитаемыми человеком, в обоих направлениях.

Dan’s Tools - это огромная коллекция полезных веб-приложений, одно из которых конвертер временных меток . Он более простой, но имеет очень четкое представление и прост в использовании.

Время - это представляет другой, еще более минималистичный вид. Он показывает время в нескольких форматах, включая время Unix. Он включает в себя текущее время в заголовке страницы, что полезно.

Использование Unix Time с инструментами командной строки

В Linux и macOS Дата Программа - это основная утилита для работы с датой / временем, включая временные метки Unix. Вызывается без каких-либо аргументов, возвращает текущую дату / время в удобочитаемом формате:

$ date
Wed Feb 10 12:28:30 GMT 2021

Если вам нужна текущая дата / время во времени Unix, используйте +% s аргумент:

$ date +%s
1612960114

Вы можете преобразовать дату, удобочитаемую человеком, в метку времени, используя -d отметьте, если ваша версия Дата поддерживает это. Большинство версий Linux по умолчанию должны:

$ date -d 'Jan 2 1970' +%s
82800

В macOS Дата это другая программа, для которой требуется другой набор флагов:

$ date -j -f '%b %d %Y %T' 'Jan 02 1970 00:00:00' '+%s'
82800

Идя в другом направлении, вы можете конвертировать из метки времени Unix, используя флаг:

$ date -r 1600000000
Sun 13 Sep 2020 13:26:40 BST

Некоторые другие программы используют % s формат для работы со временем Unix. Например, если вы хотите показать дату изменения файла во времени Unix, с Версия для Linux ls , вы можете использовать следующее:

$ ls -l --time-style=+%s index.tmp.html
-rw-r--r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html

Как использовать Unix Time на языках программирования

PHP имеет время() функция, которая возвращает текущую временную метку Unix. Его Дата() функция принимает метку времени в качестве второго аргумента:

$ php -r 'echo date('Y-m-d', time());'
2021-02-11

JavaScript подходит к вещам интересным образом. Оно имеет Date.now () чтобы получить количество миллисекунд с эпохи Unix. Конечно, вы можете разделить это на 1000 и округлить результат, чтобы получить эквивалентное время Unix в секундах:

> Math.floor(Date.now() / 1000)
1613083012

Понимание времени Unix

Время Unix - это простая концепция, которая возникает во многих местах. Как только вы это поймете, вы можете найти его весьма полезным, например, при вычислении разницы во времени. Вы также можете распознать, когда это может быть причиной определенных ошибок.

Такие понятия, как эпоха и временные метки, являются важной частью начала работы с Linux. Чтобы узнать больше о таких важных вещах, как ls , ознакомьтесь с нашим руководством по основным командам Linux.

Делиться Делиться Твитнуть Эл. адрес 9 основных команд для начала работы с Linux

Хотите познакомиться с Linux? Начните с этих основных команд Linux, чтобы изучить стандартные вычислительные задачи.

Читать далее
Похожие темы Об авторе Бобби Джек(Опубликовано 58 статей)

Бобби - энтузиаст технологий, проработавший разработчиком программного обеспечения большую часть двух десятилетий. Он увлечен играми, работает редактором обзоров в Switch Player Magazine и занимается всеми аспектами онлайн-публикации и веб-разработки.

Ещё от Bobby Jack

Подписывайтесь на нашу новостную рассылку

Подпишитесь на нашу рассылку технических советов, обзоров, бесплатных электронных книг и эксклюзивных предложений!

Нажмите здесь, чтобы подписаться
Категория Linux