Waarom heeft Unix zijn eigen concept van tijd? Wat is het tijdperk en wat is het Y2038-probleem?
Unix-tijd is een manier om een specifieke datum en tijd weer te geven, die wordt gebruikt door Linux, macOS en vele andere interoperabele systemen. Het is zo wijdverbreid dat u het waarschijnlijk gebruikt zonder dat u het merkt. Maar als je Unix-tijd eenmaal begrijpt, zul je het in veel contexten zien. Verschillende tools kunnen u helpen om met Unix-tijd te werken.
Wat is het doel van Unix Time?
Unix-tijd is een telling van het totale aantal seconden sinds een vaste tijd en datum. Het is een datum / tijd-indeling (of tijdstempel) die er anders uitziet dan de voor mensen leesbare datums en tijden die we gewend zijn. Dit is puur om redenen van efficiëntie. Er is veel minder ruimte nodig om een enkel getal dat seconden vertegenwoordigt op te slaan dan om afzonderlijke waarden op te slaan voor het jaar, de maand, het uur, enz.
In moderne termen is het verschil in ruimte natuurlijk helemaal niet zo veel. Maar bedenk dat Unix is ontstaan aan het eind van de jaren zestig, toen de beschikbare opslag veel kleiner was. Tijdstempels worden ook veel gebruikt, dus hun opslag klopt. Aan elk bestand zijn bijvoorbeeld drie tijdstempels gekoppeld.
Het formaat is vrijwel onmogelijk in je hoofd te vertalen, tenzij je een wiskundig genie bent. Maar het heeft nog steeds enkele voordelen ten opzichte van beter leesbare alternatieven zoals Woe, 21 oktober 2015 07:28:00 GMT. U kunt in één oogopslag twee Unix-tijdstempels bestellen. Het is meestal ook sneller om het verschil tussen twee tijdstempels te bepalen. Dit geldt met name voor datums die dicht bij elkaar staan, zoals op aangrenzende dagen.
Over het tijdperk
Unix-tijd is dus een totaal aantal seconden sinds een bepaald tijdstip. Maar wat is dat punt in de tijd? Haar 00:00:00 UTC Aan 1 januari 1970. Dit wordt vaak het Unix-tijdperk genoemd. Programmeurs kozen deze datum voor het tijdperk uit gemak, omdat het de dichtstbijzijnde ronde datum was toen ze de Unix-tijd uitvonden.
Misschien heb je deze datum gezien als er iets mis is gegaan. Het is duidelijk een bug, maar een die er heel vreemd uitziet als het resulteert in een datum van vóór de tijd dat velen van ons werden geboren! Het is echter volkomen begrijpelijk als je de Unix-tijd kent. Als een systeem een tijdstempel probeert weer te geven die geen waarde heeft, vertaalt dit zich vaak naar 0 en resulteert dit in de exacte epoch-datum.
Het Unix-tijdgegevensformaat
Strikt genomen is er geen. Het oorspronkelijke gegevenstype was een 32-bits geheel getal, en dit blijft vaak het geval, zelfs in veel krachtigere systemen.
Met dit gegevenstype kan de waarde in totaal 2 ^ 32 seconden opslaan, wat iets meer is dan 136 jaar. Deze waarde is doorgaans ondertekend, wat betekent dat deze negatief of positief kan zijn. Het vertegenwoordigt dus gewoonlijk 68 jaar aan weerszijden van het tijdperk, d.w.z. 1902-2038.
Dit is natuurlijk nog een beperkte periode. Maar het primaire gebruik van het tijdstempelformaat was voor concepten zoals bestandswijziging. De behoefte was heel erg om de tijd dichtbij het heden weer te geven, in plaats van de oude geschiedenis of ver in de toekomst. Zelfs voor toepassingen zoals kalenders is het zelden nodig om datums weer te geven die meer dan een paar decennia in de toekomst liggen.
Maar dat betekent niet dat deze beperkte tijdspanne zonder problemen is...
Het jaar 2038-probleem
De Y2K-bug (een van de ergste programmeerfouten in de geschiedenis) getroffen computersystemen die jaren opslaan als tweecijferige waarden. Toen het jaar 2000 aanbrak, behandelden dergelijke systemen het alsof het 1900 was. In het geval was dit niet zo catastrofaal als gevreesd, vooral omdat veel mensen van tevoren veel tijd en moeite hebben besteed om zich erop voor te bereiden.
In zijn legendarische verleden veroorzaakte codering ook vernietiging. Gevallen van een klein beetje slechte code veroorzaakten op een groot niveau een ramp. De volgende zijn 10 van de ergste programmeerfouten in de geschiedenis.
Als je in het vorige gedeelte oplet, heb je misschien een soortgelijk probleem ontdekt dat van invloed kan zijn op de Unix-tijd. Welnu, Unix-tijd heeft een eigen gegevensprobleem: het Y2k38-probleem. (Het wordt vaak een probleem genoemd, geen bug; misschien zijn we optimistischer geworden sinds het jaar 2000!) Wanneer de Unix-tijd letterlijk om is in 2038, zullen systemen nieuwe datums behandelen als 1902 of 1970. Of misschien falen ze gewoon helemaal.
Dit probleem zal ons in ieder geval niet rond middernacht op oudejaarsavond treffen. De laatste seconde van 32-bits Unix-tijd valt op 19 maart. In het geval dat we de meeste systemen tegen 2038 zullen upgraden, anders zijn ze hoe dan ook verouderd.
Enkele nuttige bronnen voor tijdstempels
De Epoch-omzetter site is mogelijk de meest uitgebreide tijdstempelconverter die beschikbaar is. Het begint met het weergeven van de huidige Unix-tijd - in real-time - en voegt daarbovenop bijna elke denkbare functie toe. Het belangrijkste gebruik is voor het omzetten tussen tijdstempels en door mensen leesbare datums, in beide richtingen.
Dan’s Tools is een enorme verzameling nuttige webapps, waaronder een tijdstempel converter. Het is eenvoudiger, maar heeft een zeer duidelijke presentatie en is gemakkelijk te gebruiken.
Tijd is presenteert een andere, nog meer minimalistische look. Het toont de tijd in een aantal formaten, waaronder Unix-tijd. Het bevat de huidige tijd in de paginatitel, wat handig is.
Op Linux en macOS is het datum programma is het belangrijkste hulpprogramma voor het omgaan met datum / tijd, inclusief Unix-tijdstempels. Het wordt zonder argumenten aangeroepen en retourneert de huidige datum / tijd in een voor mensen leesbaar formaat:
$ datum
Woe 10 februari 12:28:30 GMT 2021
Als je de huidige datum / tijd in Unix-tijd nodig hebt, gebruik dan de +% s argument:
$ date +% s
1612960114
U kunt een door mensen leesbare datum converteren naar een tijdstempel met behulp van de -d vlag als uw versie van datum ondersteunt het. De meeste Linux-versies zouden standaard:
$ date -d "2 jan 1970" +% s
82800
Op macOS, datum is een ander programma, waarvoor een andere set vlaggen nodig is:
$ date -j -f "% b% d% Y% T" "02 jan 1970 00:00:00" "+% s"
82800
Als u de andere kant op gaat, kunt u converteren van een Unix-tijdstempel met behulp van de -r vlag:
$ date -r 1600000000
Zo 13 sep 2020 13:26:40 BST
Sommige andere programma's gebruiken de % s formaat om met Unix-tijd om te gaan. Als u bijvoorbeeld de wijzigingsdatum van een bestand in Unix-tijd wilt weergeven, met de Linux-versie van lskunt u het volgende gebruiken:
$ ls -l --time-style = +% s index.tmp.html
-rw-r - r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html
Unix Time gebruiken in programmeertalen
PHP heeft de tijd() functie die de huidige Unix-tijdstempel retourneert. Haar datum() functie heeft een tijdstempel als tweede argument:
$ php -r 'echo datum ("Y-m-d", tijd ());'
2021-02-11
JavaScript benadert de dingen op een interessante manier. Het heeft een Date.now () methode om het aantal milliseconden te krijgen sinds het Unix-tijdperk. Je kunt dit natuurlijk delen door 1.000 en het resultaat afronden om de equivalente Unix-tijd in seconden te geven:
> Math.floor (Date.now () / 1000)
1613083012
Unix Time begrijpen
Unix-tijd is een eenvoudig concept dat op veel plaatsen opduikt. Als u het eenmaal begrijpt, vindt u het misschien best handig, bijvoorbeeld bij het berekenen van tijdsverschillen. U kunt ook herkennen wanneer dit de oorzaak kan zijn van bepaalde bugs.
Concepten zoals de epoch en tijdstempels zijn een belangrijk onderdeel van het starten met Linux. Voor meer informatie over essentiële zaken zoals ls, bekijk dan onze gids voor basis Linux-commando's.
Wilt u vertrouwd raken met Linux? Begin met deze basis Linux-opdrachten om standaard computertaken te leren.
- Niet gespecificeerd
Bobby is een technologieliefhebber die het grootste deel van twee decennia als softwareontwikkelaar heeft gewerkt. Hij is gepassioneerd door gamen, werkt als recensie-editor bij Switch Player Magazine en is ondergedompeld in alle aspecten van online publiceren en webontwikkeling.
Abonneer op onze nieuwsbrief
Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!
Nog een stap…!
Bevestig uw e-mailadres in de e-mail die we u zojuist hebben gestuurd.