Hva er Unix -tid og når var Unix -epoken?

Hva er Unix -tid og når var Unix -epoken?

Hvorfor har Unix sitt eget tidsbegrep? Hva er epoken og hva er Y2038 -problemet?





Unix -tid er et middel til å representere en bestemt dato og klokkeslett, brukt av Linux, macOS og mange andre interoperable systemer. Det er så utbredt at du sannsynligvis bruker det uten å være klar over det. Når du først forstår Unix -tid, vil du imidlertid se det i mange sammenhenger. Flere verktøy kan hjelpe deg med å jobbe med Unix -tid.





Hva er formålet med Unix Time?

Unix -tid er en telling av totale sekunder siden en fast tid og dato. Det er et dato/klokkeslett (eller tidsstempel) -format som ser annerledes ut enn de lesbare datoene og klokkeslettene vi er vant til. Dette er utelukkende av effektivitetshensyn. Det tar mye mindre plass å lagre et enkelt tall som representerer sekunder enn det gjør å lagre separate verdier for år, måned, time, etc.





Selvfølgelig, i moderne termer, er plassforskjellen ikke så mye i det hele tatt. Men tenk at Unix oppsto på slutten av 1960 -tallet da tilgjengelig lagringsplass var langt mindre. Tidsstempler brukes også mye, så lagringen blir større. For eksempel har hver fil tre tidsstempler knyttet til den.

Formatet er stort sett umulig å oversette i hodet ditt med mindre du er et matematisk geni. Men den har fortsatt noen fordeler fremfor mer lesbare alternativer som f.eks Ons 21. okt 2015 07:28:00 GMT . Du kan bestille to Unix -tidsstempler veldig enkelt, med et øyeblikk. Det er også vanligvis raskere å regne ut forskjellen mellom to tidsstempler. Dette gjelder spesielt datoer nær hverandre, for eksempel på tilstøtende dager.



Om epoken

Så, Unix -tid er et totalt antall sekunder siden et bestemt tidspunkt. Men hva er det tidspunktet? Det er 00:00:00 UTC1. januar 1970 . Dette blir ofte referert til som Unix -epoken. Programmerere valgte denne datoen for epoken av bekvemmelighet siden det var den nærmeste runde datoen da de oppfant Unix -tid.

Du kan godt ha sett denne datoen når noe har gått galt. Det er helt klart en feil, men en som ser veldig merkelig ut når det resulterer i en dato fra før mange av oss ble født! Det er imidlertid fullt forståelig når du vet om Unix -tid. Hvis et system prøver å vise et tidsstempel som ikke har noen verdi, vil det ofte oversette til 0 og resultere i den eksakte epokedatoen.





kan jeg koble bluetooth -hodetelefoner til xbox one

Unix Time Data Format

Strengt tatt er det ikke en. Den opprinnelige datatypen var et 32-bits heltall, og dette er ofte tilfellet, selv i mye kraftigere systemer.

Denne datatypen lar verdien lagre totalt 2^32 sekunder, som er litt over 136 år. Denne verdien er vanligvis signert, noe som betyr at den kan være negativ eller positiv. Så det representerer vanligvis 68 år på hver side av epoken, dvs. 1902-2038.





Dette er selvfølgelig fortsatt en begrenset periode. Men den primære bruken av tidsstempelformatet var for begreper som filendring. Behovet var i stor grad å representere tiden nær nåtiden, i stedet for gammel historie eller langt inn i fremtiden. Selv for applikasjoner som kalendere er det sjelden behov for å representere datoer mer enn noen få tiår inn i fremtiden.

Men det betyr ikke at denne begrensede tidsperioden er uten problemer ...

Året 2038 problem

Y2K Bug (en av historiens verste programmeringsfeil) påvirket datasystemer som lagret år som tosifrede verdier. Da år 2000 kom, behandlet slike systemer det som om det var 1900. I så fall var dette ikke så katastrofalt som fryktet, hovedsakelig fordi mange mennesker brukte mye tid og krefter på forhånd på å forberede seg på det.

Hvis du var oppmerksom i forrige seksjon, kan du ha oppdaget et lignende problem som kan påvirke Unix -tid. Vel, Unix time har et eget dataproblem: Y2k38 -problemet. (Det blir ofte referert til som et problem, ikke en feil. Kanskje vi har blitt mer optimistiske siden år 2000!) Når Unix -tiden bokstavelig talt går ut i 2038, vil systemer behandle nye datoer enten som 1902 eller 1970. Eller muligens de ' vil bare mislykkes helt.

Dette problemet vil i hvert fall ikke ramme oss ved midnattslaget nyttårsaften. Det siste sekundet av 32-biters Unix-tid faller den 19. mars. I det siste vil vi sannsynligvis oppgradere de fleste systemene innen 2038, eller de vil uansett være foreldet da.

Noen nyttige tidsstempelressurser

De Epokomformer området er muligens den mest omfattende tidsstempelomformeren som er tilgjengelig. Den begynner med å vise den nåværende Unix-tiden-i sanntid-og legger til nesten alle tenkelige funksjoner i tillegg til det. Dets viktigste bruk er å konvertere mellom tidsstempler og lesbare datoer i begge retninger.

Dan's Tools er en enorm samling nyttige web -apper, hvorav den ene er en tidsstempelomformer . Det er mer grunnleggende, men har en veldig ren presentasjon og er enkel å bruke.

Tiden er presenterer et annet, enda mer minimalistisk utseende. Den viser tid i en rekke formater, inkludert Unix -tid. Den inkluderer gjeldende tid i sidetittelen, noe som er nyttig.

Bruke Unix Time med kommandolinjeverktøy

På Linux og macOS er Dato programmet er kjerneværktøyet for å håndtere dato/klokkeslett, inkludert Unix tidsstempler. Kalt uten argumenter, returnerer den gjeldende dato/klokkeslett i et lesbart format:

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

Hvis du trenger gjeldende dato/klokkeslett i Unix -tid, bruker du +%s argument:

$ date +%s
1612960114

Du kan konvertere fra en lesbar dato til et tidsstempel ved hjelp av -d flagg hvis din versjon av Dato støtter det. De fleste Linux -versjoner bør som standard:

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

På macOS, Dato er et annet program, som krever et annet sett med flagg:

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

Når du går i den andre retningen, kan du konvertere fra et Unix -tidsstempel ved hjelp av -r flagg:

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

Noen andre programmer bruker %s format for å håndtere Unix -tid. For eksempel, hvis du vil vise endringsdatoen for en fil i Unix -tid, med Linux -versjon av ls , kan du bruke følgende:

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

Hvordan bruke Unix Time i programmeringsspråk

PHP har tid() funksjon som returnerer gjeldende Unix tidsstempel. Det er Dato() funksjon tar et tidsstempel som sitt andre argument:

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

JavaScript nærmer seg ting på en interessant måte. Den har en Date.now () metode for å få antall millisekunder siden Unix -epoken. Selvfølgelig kan du dele dette med 1000 og runde resultatet for å gi tilsvarende Unix -tid i sekunder:

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

Forstå Unix Time

Unix time er et enkelt konsept som dukker opp mange steder. Når du forstår det, kan du finne det ganske nyttig, for eksempel når du beregner tidsforskjeller. Du kan også kjenne igjen når det kan være årsaken til visse feil.

Konsepter som epoken og tidsstemplene er en viktig del av å komme i gang med Linux. For å finne ut mer om essensielle som ls , sjekk vår guide til grunnleggende Linux -kommandoer.

Dele Dele kvitring E -post 9 grunnleggende kommandoer for å komme i gang med Linux

Vil du bli kjent med Linux? Start med disse grunnleggende Linux -kommandoene for å lære standard databehandlingsoppgaver.

Les neste
Relaterte temaer Om forfatteren Bobby Jack(58 artikler publisert)

Bobby er en teknologientusiast som jobbet som programvareutvikler i de fleste to tiårene. Han brenner for spill, jobber som Reviews Editor i Switch Player Magazine, og er fordypet i alle aspekter av online publisering og webutvikling.

Mer fra Bobby Jack

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis ebøker og eksklusive tilbud!

Klikk her for å abonnere