Vad är Unix -tid och när var Unix -epoken?

Vad är Unix -tid och när var Unix -epoken?

Varför har Unix sitt eget tidsbegrepp? Vad är epoken och vad är Y2038 -problemet?





Unix -tid är ett sätt att representera ett specifikt datum och en viss tid, som används av Linux, macOS och många andra driftskompatibla system. Det är så utbrett att du förmodligen använder det utan att vara medveten om det. Men när du väl förstår Unix -tid kommer du att upptäcka det i många sammanhang. Flera verktyg kan hjälpa dig att arbeta med Unix -tid.





Vad är syftet med Unix Time?

Unix -tid är en räkning av totala sekunder sedan en fast tid och ett datum. Det är ett datum/tid (eller tidsstämpel) -format som ser annorlunda ut än de mänskligt läsbara datum och tider vi är vana vid. Detta är enbart av effektivitetsskäl. Det tar mycket mindre utrymme att lagra ett enda nummer som representerar sekunder än att lagra separata värden för år, månad, timme, etc.





Naturligtvis, i moderna termer, är rymdskillnaden inte så mycket alls. Men tänk på att Unix har sitt ursprung i slutet av 1960 -talet då tillgängligt lagringsutrymme var mycket mindre. Tidsstämplar används också mycket, så deras lagring ökar. Till exempel har varje fil tre tidsstämplar associerade.

Formatet är ganska omöjligt att översätta i ditt huvud om du inte är ett matematiskt geni. Men det har fortfarande vissa fördelar framför mer läsbara alternativ som t.ex. Ons, 21 okt 2015 07:28:00 GMT . Du kan enkelt beställa två Unix -tidsstämplar mycket snabbt. Det är också vanligtvis snabbare att räkna ut skillnaden mellan två tidsstämplar. Detta gäller särskilt datum nära varandra, till exempel närliggande dagar.



Om epoken

Så, Unix -tiden är ett totalt antal sekunder sedan en viss tidpunkt. Men vad är den tidpunkten? Dess 00:00:00 UTC1 januari 1970 . Detta kallas ofta Unix -epoken. Programmerare valde detta datum för epoken av bekvämlighet eftersom det var det närmaste rundedatumet när de uppfann Unix -tiden.

Du kan mycket väl ha sett detta datum när något har gått fel. Det är helt klart en bugg, men en som ser väldigt konstig ut när det resulterar i ett datum från innan många av oss föddes! Det är dock helt förståeligt när du vet om Unix -tid. Om något system försöker visa en tidsstämpel som inte har något värde, översätts det ofta till 0 och resulterar i det exakta epokdatumet.





hur man minskar minnesanvändning windows 10

Unix Time Data Format

Strängt taget finns det ingen. Den ursprungliga datatypen var ett 32-bitars heltal, och det är ofta så, även i mycket kraftfullare system.

Denna datatyp gör att värdet kan lagra totalt 2^32 sekunder, vilket är drygt 136 år. Detta värde är typiskt signerat, vilket betyder att det kan vara negativt eller positivt. Så det representerar vanligtvis 68 år på vardera sidan av epoken, dvs 1902-2038.





Detta är naturligtvis fortfarande en begränsad period. Men den primära användningen av tidsstämpelformatet var för begrepp som filändring. Behovet var mycket att representera tiden nära nutiden, snarare än antik historia eller långt in i framtiden. Även för applikationer som kalendrar är det sällan nödvändigt att representera datum mer än några decennier in i framtiden.

Men det betyder inte att denna begränsade tidsperiod är utan problem ...

Året 2038 Problem

Y2K-buggen (ett av historiens värsta programmeringsfel) påverkade datorsystem som lagrade år som tvåsiffriga värden. När år 2000 kom, behandlade sådana system det som om det var 1900. I händelse av detta var detta inte så katastrofalt som befarat, främst för att många människor ägnade mycket tid och ansträngning i förväg för att förbereda sig för det.

Om du uppmärksammade det föregående avsnittet kan du ha upptäckt ett liknande problem som kan påverka Unix -tiden. Jo, Unix time har ett eget dataproblem: Y2k38 -problemet. (Det kallas ofta som ett problem, inte ett fel, kanske har vi blivit mer optimistiska sedan år 2000!) När Unix -tiden bokstavligen tar slut 2038 kommer systemen att behandla nya datum antingen som 1902 eller 1970. Eller möjligen jag misslyckas helt och hållet.

Åtminstone kommer detta problem inte att drabba oss vid midnattstiden på nyårsafton. Den sista sekunden av 32-bitars Unix-tid faller den 19 mars. I slutändan kommer vi troligtvis att uppgradera de flesta systemen år 2038, annars kommer de att vara föråldrade då.

Några användbara tidsstämplingsresurser

De Epokomvandlare webbplats är möjligen den mest omfattande tidsstämpelomvandlaren som finns. Det börjar med att visa den aktuella Unix-tiden-i realtid-och lägger till nästan alla tänkbara funktioner ovanpå det. Dess huvudsakliga användning är att konvertera mellan tidsstämplar och människoläsbara datum, i båda riktningarna.

Dans verktyg är en enorm samling användbara webbappar, varav en är en tidsstämpelomvandlare . Det är mer grundläggande, men har en mycket ren presentation och är lätt att använda.

Tiden är presenterar en annan, ännu mer minimalistisk look. Den visar tid i ett antal format, inklusive Unix -tid. Den innehåller den aktuella tiden i sidtiteln vilket är användbart.

Använda Unix Time med kommandoradsverktyg

På Linux och macOS, datum programmet är kärnverktyget för att hantera datum/tid, inklusive Unix -tidsstämplar. Kallas utan några argument, det returnerar aktuellt datum/tid i ett läsbart format:

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

Om du behöver aktuellt datum/tid i Unix -tid, använd +%s argument:

$ date +%s
1612960114

Du kan konvertera från ett läsbart datum till en tidsstämpel med -d flagga om din version av datum stöder det. De flesta Linux -versioner bör som standard:

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

På macOS, datum är ett annat program, som kräver en annan uppsättning flaggor:

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

Om du går åt andra hållet kan du konvertera från en Unix -tidsstämpel med -r flagga:

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

Vissa andra program använder %s format för att hantera Unix -tid. Till exempel, om du vill visa ändringsdatumet för en fil i Unix -tid, med Linux version av ls , kan du använda följande:

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

Hur man använder Unix Time i programmeringsspråk

PHP har tid() funktion som returnerar den aktuella Unix -tidsstämpeln. Dess datum() funktion tar en tidsstämpel som sitt andra argument:

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

JavaScript närmar sig saker på ett intressant sätt. Den har en Date.now () metod för att få antalet millisekunder sedan Unix -epoken. Naturligtvis kan du dela detta med 1000 och runda resultatet för att ge motsvarande Unix -tid i sekunder:

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

Förstå Unix Time

Unix time är ett enkelt koncept som växer fram på många ställen. När du väl förstår det kan du tycka att det är ganska användbart, till exempel vid beräkning av tidsskillnader. Du kan också känna igen när det kan vara orsaken till vissa buggar.

Begrepp som epoken och tidsstämplarna är en viktig del för att komma igång med Linux. För att få veta mer om väsentligheter som t.ex. ls , kolla in vår guide till grundläggande Linux -kommandon.

Dela med sig Dela med sig Tweet E-post 9 grundläggande kommandon för att komma igång med Linux

Vill du bli bekant med Linux? Börja med dessa grundläggande Linux -kommandon för att lära dig vanliga datoruppgifter.

Läs Nästa
Relaterade ämnen Om författaren Bobby Jack(58 artiklar publicerade)

Bobby är en teknikentusiast som arbetade som mjukvaruutvecklare i de flesta av två decennier. Han brinner för spel, jobbar som Recensions Editor på Switch Player Magazine och är fördjupad i alla aspekter av online -publicering och webbutveckling.

Mer från Bobby Jack

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e -böcker och exklusiva erbjudanden!

Klicka här för att prenumerera