Hvad er Unix -tid, og hvornår var Unix -epoken?

Hvad er Unix -tid, og hvornår var Unix -epoken?

Hvorfor har Unix sit eget tidsbegreb? Hvad er epoken, og hvad er Y2038 -problemet?





Unix -tid er et middel til at repræsentere en bestemt dato og tid, der bruges af Linux, macOS og mange andre interoperable systemer. Det er så udbredt, at du sandsynligvis bruger det uden at være opmærksom på det. Når du først forstår Unix -tid, vil du dog se det i mange sammenhænge. Flere værktøjer kan hjælpe dig med at arbejde med Unix -tid.





Hvad er formålet med Unix Time?

Unix -tid er en optælling af de samlede sekunder siden en fast tid og dato. Det er et dato/klokkeslæt (eller tidsstempel) -format, der ser anderledes ud end de datoer og tidspunkter, som mennesker kan læse. Dette er udelukkende af effektivitetsmæssige årsager. Det tager meget mindre plads at gemme et enkelt tal, der repræsenterer sekunder, end det gør at gemme separate værdier for år, måned, time osv.





I moderne termer er pladsforskellen selvfølgelig slet ikke så meget. Men overvej, at Unix opstod i slutningen af ​​1960'erne, da tilgængelig lagerplads var langt mindre. Tidsstempler bruges også meget, så deres opbevaring tilføjer. For eksempel har hver fil tre tidsstempler tilknyttet.

Formatet er stort set umuligt at oversætte i dit hoved, medmindre du er et matematisk geni. Men det har stadig nogle fordele frem for mere læsbare alternativer som f.eks Onsdag, 21. okt 2015 07:28:00 GMT . Du kan hurtigt bestille to Unix -tidsstempler meget hurtigt. Det er også normalt hurtigere at regne ud forskellen mellem to tidsstempler. Dette gælder især datoer tæt på hinanden, f.eks. På tilstødende dage.



Om epoken

Så Unix -tid er et samlet antal sekunder siden et bestemt tidspunkt. Men hvad er det tidspunkt? Det er 00:00:00 UTC1. januar 1970 . Dette kaldes ofte Unix -epoken. Programmerere valgte denne dato for epoken af ​​bekvemmelighed, da det var den nærmeste runde dato, da de opfandt Unix -tid.

Du har måske set denne dato, når noget er gået galt. Det er klart en fejl, men en der ser meget mærkelig ud, når den resulterer i en dato fra før den tid, mange af os blev født! Det er dog helt forståeligt, når du kender til Unix -tid. Hvis et system forsøger at vise et tidsstempel, der ikke har nogen værdi, oversætter det ofte til 0 og resulterer i den nøjagtige epokdato.





kan jeg tilføje ram til min macbook pro

Unix Time Data Format

Strengt taget er der ikke en. Den originale datatype var et 32-bit heltal, og det er ofte tilfældet, selv i meget mere kraftfulde systemer.

Denne datatype tillader værdien at gemme i alt 2^32 sekunder, hvilket er lidt over 136 år. Denne værdi er typisk signeret, hvilket betyder, at den kan være negativ eller positiv. Så det repræsenterer normalt 68 år på hver side af epoken, dvs. 1902-2038.





Dette er naturligvis stadig en begrænset periode. Men den primære brug af tidsstempelformatet var til begreber som f.eks. Filændring. Behovet var i høj grad at repræsentere tiden tæt på nutiden, snarere end gammel historie eller langt ind i fremtiden. Selv for applikationer såsom kalendere er der sjældent behov for at repræsentere datoer mere end et par årtier frem i tiden.

Men det betyder ikke, at denne begrænsede tidsperiode er uden problemer ...

Året 2038 problem

Y2K-fejlen (en af ​​historiens værste programmeringsfejl) påvirkede computersystemer, der lagrede år som tocifrede værdier. Da år 2000 kom, behandlede sådanne systemer det som om det var 1900. I tilfælde af dette var det ikke så katastrofalt som frygtet, hovedsageligt fordi mange mennesker brugte meget tid og kræfter på forhånd til at forberede det.

Hvis du var opmærksom i det forrige afsnit, har du muligvis opdaget et lignende problem, der kan påvirke Unix -tiden. Nå, Unix time har et eget dataproblem: Y2k38 -problemet. (Det omtales ofte som et problem, ikke en fejl; måske er vi blevet mere optimistiske siden år 2000!) Når Unix -tiden bogstaveligt talt løber ud i 2038, behandler systemer nye datoer enten som 1902 eller 1970. Eller muligvis de ' vil bare mislykkes helt.

Dette problem vil i hvert fald ikke ramme os ved midnatsslaget nytårsaften. Det sidste sekund af 32-bit Unix-tid falder den 19. marts. I sidste ende vil vi sandsynligvis opgradere de fleste systemer inden 2038, eller de er forældede på det tidspunkt alligevel.

Nogle nyttige tidsstempleressourcer

Det Epok konverter webstedet er muligvis den mest omfattende tidsstempelomformer, der findes. Det begynder med at vise den aktuelle Unix-tid-i realtid-og tilføjer næsten alle tænkelige funktioner oveni det. Dets vigtigste anvendelse er at konvertere mellem tidsstempler og datoer, der kan læses af mennesker, i begge retninger.

Dans værktøjer er en enorm samling af nyttige web -apps, hvoraf den ene er en konverter til tidsstempel . Det er mere grundlæggende, men har en meget ren præsentation og er let at bruge.

Time.is præsenterer et andet, endnu mere minimalistisk look. Det viser tid i en række formater, herunder Unix -tid. Det inkluderer den aktuelle tid i dens sidetitel, hvilket er nyttigt.

Brug af Unix Time med kommandolinjeværktøjer

På Linux og macOS er dato programmet er det centrale værktøj til at håndtere dato/tid, herunder Unix tidsstempler. Kaldes uden argumenter, returnerer den den aktuelle dato/tid i et format, der kan læses af mennesker:

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

Hvis du har brug for den aktuelle dato/tid i Unix -tid, skal du bruge +%s argument:

$ date +%s
1612960114

Du kan konvertere fra en dato, der kan læses af mennesker til et tidsstempel ved hjælp af -d markere, hvis din version af dato støtter det. De fleste Linux -versioner bør som standard:

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

På macOS, dato er et andet program, som kræver et andet sæt flag:

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

Hvis du går i den anden retning, kan du konvertere fra et Unix -tidsstempel ved hjælp af -r flag:

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

Nogle andre programmer bruger %s format til at håndtere Unix -tid. For eksempel, hvis du vil vise ændringsdatoen for en fil i Unix -tid, med Linux version af ls , kan du bruge følgende:

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

Sådan bruges Unix Time i programmeringssprog

PHP har tid() funktion, der returnerer det aktuelle Unix -tidsstempel. Dens dato() funktion tager et tidsstempel som sit andet argument:

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

JavaScript griber tingene an på en interessant måde. Den har en Date.now () metode til at få antallet af millisekunder siden Unix -epoken. Selvfølgelig kan du dividere dette med 1.000 og afrunde resultatet for at give den tilsvarende Unix -tid i sekunder:

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

Forståelse af Unix Time

Unix time er et enkelt koncept, der dukker op mange steder. Når du forstår det, kan du finde det ganske nyttigt, f.eks. Ved beregning af tidsforskelle. Du kan også genkende, hvornår det kan være årsagen til visse fejl.

Begreber som epoken og tidsstemplerne er en vigtig del af at komme i gang med Linux. For at finde ud af mere om væsentlige som f.eks ls , se vores guide til grundlæggende Linux -kommandoer.

Del Del Tweet E -mail 9 grundlæggende kommandoer til at komme i gang med Linux

Vil du blive fortrolig med Linux? Start med disse grundlæggende Linux -kommandoer for at lære standard computeropgaver.

Læs Næste
Relaterede emner Om forfatteren Bobby Jack(58 artikler udgivet)

Bobby er en teknologientusiast, der arbejdede som softwareudvikler i det meste af to årtier. Han brænder for spil, arbejder som Reviews Editor hos Switch Player Magazine og er nedsænket i alle aspekter af onlineudgivelse og webudvikling.

Mere fra Bobby Jack

Abonner på vores nyhedsbrev

Tilmeld dig vores nyhedsbrev for at få tekniske tips, anmeldelser, gratis e -bøger og eksklusive tilbud!

Klik her for at abonnere