Защо Unix има своя собствена концепция за времето? Каква е епохата и какъв е проблемът с Y2038?

Unix time е средство за представяне на конкретна дата и час, използвано от Linux, macOS и много други оперативно съвместими системи. Толкова е широко разпространено, че вероятно го използвате, без да сте наясно с него. След като разберете Unix времето обаче, ще го забележите в много контексти. Няколко инструмента могат да ви помогнат да работите с времето на Unix.

Каква е целта на Unix Time?

Времето на Unix е броят на общите секунди от фиксиран час и дата. Това е формат на дата / час (или клеймо), който изглежда различно от четливите от човека дати и часове, на които сме свикнали. Това е чисто от съображения за ефективност. Отнема много по-малко място за съхраняване на единично число, представляващо секунди, отколкото за съхраняване на отделни стойности за годината, месеца, часа и т.н.

Разбира се, в съвременен план пространствената разлика изобщо не е чак толкова голяма. Но помислете, че Unix възниква в края на 60-те години, когато наличното хранилище е далеч по-малко. Времевите марки също се използват много, така че тяхното съхранение се добавя. Например, всеки файл има три отметки, свързани с него.

instagram viewer

Форматът е почти невъзможно да се преведе в главата ви, освен ако не сте математически гений. Но все пак има някои предимства пред по-четливите алтернативи като Сряда, 21 октомври 2015 г. 07:28:00 GMT. Можете да поръчате два Unix времеви клейма много лесно, с един поглед. Обикновено е по-бързо да се определи разликата между две времеви марки. Това важи особено за дати, близки една до друга, например в съседни дни.

За епохата

И така, Unix времето е общ брой секунди от определен момент от времето. Но какъв е този момент във времето? Това е 00:00:00 UTC На 1 януари 1970 г.. Това често се нарича Unix Epoch. Програмистите избраха тази дата за епохата от удобство, тъй като беше най-близката кръгла дата, когато изобретиха времето на Unix.

Може би сте виждали тази дата, когато нещо се е объркало. Очевидно е грешка, но изглежда много странна, когато води до дата от времето, когато много от нас са родени! Напълно разбираемо е обаче, когато знаете за Unix времето. Ако някоя система се опитва да покаже клеймо за време, което няма никаква стойност, тя често се превежда на 0 и води до точната дата на епохата.

Форматът на данни за времето на Unix

Строго погледнато, няма такъв. Оригиналният тип данни е 32-битово цяло число и това често остава така, дори в много по-мощни системи.

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

Това все още е ограничен период, разбира се. Но основното използване на формата на клеймото за време беше за понятия като модификация на файл. Необходимостта беше да се представи време, близко до настоящето, а не древна история или далеч в бъдещето. Дори за приложения като календари, рядко има нужда да се представят дати повече от няколко десетилетия в бъдещето.

Но това не означава, че този ограничен период от време е без проблеми...

Проблемът за 2038 година

Грешката Y2K (една от най-лошите програмни грешки в историята) засегнати компютърни системи, които съхраняват годините като двуцифрени стойности. Когато настъпи 2000 г., такива системи се отнасяха към нея като към 1900 г. В крайна сметка това не беше толкова катастрофално, колкото се опасяваше, главно защото много хора похарчиха много време и усилия предварително, подготвяйки се за него.

10-те най-лоши програмни грешки в историята

В своето историческо минало кодирането също е причинило разрушение. Примери на малко лош код причиниха катастрофа на основно ниво. Следват 10 от най-лошите програмни грешки в историята.

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

Поне този проблем няма да ни засегне в полунощ в навечерието на Нова година. Последната секунда от 32-битовото време на Unix ще падне на 19 март. В крайна сметка вероятно ще надстроим повечето системи до 2038 г., или така или иначе ще остареят дотогава.

Някои полезни ресурси за времеви клеймо

The Преобразувател на епоха сайт е може би най-изчерпателният преобразувател на времеви печат на разположение. Започва с показване на текущото време на Unix - в реално време - и добавя почти всички възможни функции на всичко отгоре. Основното му използване е за конвертиране между времеви марки и четими от човека дати в двете посоки.

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

Времето е представя още един, още по-минималистичен външен вид. Той показва времето в редица формати, включително Unix време. Той включва текущото време в заглавието на страницата си, което е полезно.

На Linux и macOS, дата Програмата е основната помощна програма за справяне с дата / час, включително Unix времеви марки. Извикан без никакви аргументи, той връща текущата дата / час в удобен за четене формат:

$ дата
Сряда, 10 февруари 12:28:30 GMT 2021

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

$ дата +% s
1612960114

Можете да конвертирате от четима от човека дата в клеймо с помощта на флаг, ако вашата версия на дата го поддържа. Повечето версии на Linux трябва по подразбиране:

$ date -d "2 януари 1970 г." +% s
82800

На macOS, дата е различна програма, която изисква различен набор от флагове:

$ date -j -f "% b% d% Y% T" "02 януари 1970 00:00:00" "+% s"
82800

Преминавайки в другата посока, можете да конвертирате от Unix времева марка с помощта на -r флаг:

$ дата -r 1600000000
Неделя 13 септември 2020 13:26:40 BST

Някои други програми използват формат за справяне с времето на 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 Time

Unix time е проста концепция, която се появява на много места. След като го разберете, може да ви се стори доста полезно, например при изчисляване на разликите във времето. Можете също така да разпознаете кога може да е причината за някои грешки.

Концепции като епохата и времевите марки са важна част от започването на работа с Linux. За да разберете повече за най-важното като ls, вижте нашето ръководство за основните команди на Linux.

електронна поща
9 основни команди, за да започнете с Linux

Искате да се запознаете с Linux? Започнете с тези основни команди на Linux, за да научите стандартни компютърни задачи.

Свързани теми
  • Неопределено
За автора
Боби Джак (Публикувани 27 статии)

Боби е технологичен ентусиаст, който работи като разработчик на софтуер в продължение на почти две десетилетия. Той е запален по игрите, работи като редактор на рецензии в списание Switch Player и е потопен във всички аспекти на онлайн публикуването и уеб разработката.

Още от Боби Джак

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, рецензии, безплатни електронни книги и ексклузивни оферти!

Още една стъпка…!

Моля, потвърдете имейл адреса си в имейла, който току-що ви изпратихме.

.