Какво е времето на Unix и кога е била ерата на Unix?

Какво е времето на Unix и кога е била ерата на Unix?

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





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





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

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





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

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



За Епохата

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

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





как да разглобя xbox one

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

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

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





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

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

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

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

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

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

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

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

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

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

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

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

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

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

$ date +%s
1612960114

Можете да конвертирате от четима от човека дата във времева отметка, като използвате флаг, ако вашата версия на дата го поддържа. Повечето версии на 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, като използвате -r флаг:

$ date -r 1600000000
Sun 13 Sep 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 времето е проста концепция, която се появява на много места. След като го разберете, може да ви се стори доста полезен, например при изчисляване на разликите във времето. Можете също така да разпознаете кога това може да е причина за определени грешки.

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

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

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

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

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

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

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

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

Щракнете тук, за да се абонирате
Категория Linux