Nyheter i Android, Telefoner, Prylar Och Recensioner

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

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

Unix-tid är ett sätt att representera ett specifikt datum och tid, som används av Linux, macOS och många andra driftskompatibla system. Den är så utbredd att du förmodligen använder den utan att vara medveten om det. När du väl förstår Unix-tiden kommer du dock att se det i många sammanhang. Flera verktyg kan hjälpa dig att arbeta med Unix-tid.

Vad är syftet med Unix-tid?

Unix-tid är ett antal sekunder totalt sedan en fast tid och ett fast datum. Det är ett datum/tid (eller tidsstämpel) format som ser annorlunda ut än de läsbara datum och tider som vi är vana vid. Detta är rent 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 utrymmesskillnaden inte alls så stor. Men tänk på att Unix uppstod i slutet av 1960-talet när tillgänglig lagring var mycket mindre. Tidsstämplar används också mycket, så deras lagring ökar. Till exempel har varje fil tre tidsstämplar kopplade till sig.

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

Om epoken

Så Unix-tid är ett totalt antal sekunder sedan en specifik tidpunkt. Men vad är den tidpunkten? Dess 00:00:00 UTC på 1 januari 1970. Detta kallas ofta för Unix-epoken. Programmerare valde detta datum för epok av bekvämlighet eftersom det var det närmaste runda datumet när de uppfann Unix-tiden.

Du kanske har sett detta datum när något har gått fel. Det är helt klart en bugg, men en som ser väldigt märklig ut när den resulterar i ett datum från före den tidpunkt då många av oss föddes! Det är dock fullt förståeligt när du känner till Unix-tiden. 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.

Relaterad  Skattekredit-videospel är i drift: förfrågningar om skattelättnader pågår

Unix Time Data Format

Det finns strängt taget ingen. Den ursprungliga datatypen var ett 32-bitars heltal, och detta förblir ofta fallet, även i mycket kraftfullare system.

Denna datatyp låter värdet lagra totalt 2^32 sekunder, vilket är drygt 136 år. Detta värde är vanligtvis 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 i hög grad att representera tid nära nuet, snarare än forntida historia eller långt in i framtiden. Även för applikationer som kalendrar finns det sällan ett behov av att representera datum mer än några decennier in i framtiden.

Men det betyder inte att denna begränsade tidsperiod är problemfri…

År 2038-problemet

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

Om du var uppmärksam i föregående avsnitt kanske du har upptäckt ett liknande problem som kan påverka Unix-tiden. Tja, Unix-tid har ett eget dataproblem: Y2k38-problemet. (Det hänvisas ofta till som ett problem, inte en bugg; 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 de’ kommer bara att misslyckas helt.

Det här problemet kommer åtminstone inte att drabba oss vid midnatt på nyårsafton. Den sista sekunden av 32-bitars Unix-tid infaller den 19 mars. I en händelse kommer vi troligen att uppgradera de flesta system till 2038, annars kommer de att vara föråldrade då ändå.

Relaterad  Pixiv och Wacom är värdar för en massiv online ritfestival i maj

Några användbara tidsstämpelresurser

Epoch Converter-webbplatsen är möjligen den mest omfattande tidsstämpelkonverteraren som finns. Det börjar med att visa den aktuella Unix-tiden – i realtid – och lägger till nästan alla tänkbara funktioner utöver det. Dess huvudsakliga användning är för att konvertera mellan tidsstämplar och läsbara datum, i båda riktningarna.

Dan’s Tools är en enorm samling användbara webbappar, varav en är en tidsstämpelkonverterare. Det är mer grundläggande, men har en mycket ren presentation och är lätt att använda.

Time.is presenterar en annan, ännu mer minimalistisk look. Den visar tid i ett antal format, inklusive Unix-tid. Den inkluderar den aktuella tiden i sin sidtitel, vilket är användbart.

På Linux och macOS, datum programmet är kärnverktyget för att hantera datum/tid, inklusive Unix-tidsstämplar. Anropad utan några argument returnerar den 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 hjälp av -d flagga om din version av datum stödjer 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 hjälp av -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-versionen 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 dividera detta med 1 000 och avrunda resultatet för att ge motsvarande Unix-tid i sekunder:

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

Förstå Unix-tid

Unix-tid är ett enkelt koncept som dyker upp på många ställen. När du väl har förstått det kan du tycka att det är ganska användbart när du till exempel beräknar tidsskillnader. Du kan också känna igen när det kan vara orsaken till vissa buggar.

Relaterad  SaGa-seriens skapare tipsar om möjlig remaster, remake och nytt spel

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

Om författaren

Bobby Jack (65 artiklar publicerade)

Bobby är en teknikentusiast som arbetat som mjukvaruutvecklare under de flesta av två decennier. Han brinner för spel, arbetar som chefredaktör på Switch Player Magazine och är fördjupad i alla aspekter av onlinepublicering och webbutveckling.

Mer från Bobby Jack

Prenumerera på vårt nyhetsbrev

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

Klicka här för att prenumerera