Je bent hier: ITFAQ.nl » Wat is? » Wat is epoch? Unix-tijd en timestamps uitgelegd

Wat is epoch? Unix-tijd en timestamps uitgelegd

Wat is (een) epoch? Epoch is één punt in de tijd: een startpunt waar je vanaf telt. In de computerwereld spreken we vaak over het Unix epoch, of de Unix timestamp, maar wat is dat? En hoe reken je een timestamp om naar een gewone datum?

Unix Epoch

Het Unix epoch is het startpunt van de Unix-tijd: 1 januari 1970, middernacht UTC/GMT. Een Unix timestamp (of Unix tijd, POSIX tijd, of kortweg epoch) is het aantal voorbijgegane seconden sinds dat moment. Zogenoemde leap seconds (bijstellingsseconde van de tijd) worden hierbij niet meegeteld. Het Epoch timestamp 0 kan geschreven worden in het ISO 8601 formaat als: 1970-01-01T00:00:00Z.

Wat rekenwerk:

  • een Epoch uur is 3600 seconden
  • een Epoch dag is 86400 seconden lang, leap seconds niet meegeteld

Vanwege het formaat is een Unix Epoch (of Unix timestamp) een ideaal middel om unieke nummers (bijvoorbeeld ten behoeve van website-sessies), of tijden mee te genereren, of om in databases op te slaan. Een voorbeeld Unix epoch is: 1452853796. Dat is 15 januari 2016, 10:29:56 uur UTC.

Een Unix timestamp omrekenen naar een datum

Een Unix timestamp is altijd in UTC. Nederland en België lopen daar 1 uur (wintertijd) of 2 uur (zomertijd) op voor. Zo reken je een timestamp om, en vraag je de huidige timestamp op:

PowerShell

# Timestamp naar datum (UTC)
[DateTimeOffset]::FromUnixTimeSeconds(1452853796).UtcDateTime

# Huidige Unix timestamp
[DateTimeOffset]::UtcNow.ToUnixTimeSeconds()

# Vanaf PowerShell 7.1 kan het ook met Get-Date
Get-Date -UnixTimeSeconds 1452853796 -AsUTC

Bash (Linux en WSL)

# Huidige Unix timestamp
date +%s

# Timestamp naar datum (UTC)
date -u -d @1452853796

In het artikel Convert Unix timestamps to dates in Bash op Saotn.org vind je meer voorbeelden van het omzetten van een Unix timestamp (of Epoch) naar een echte datum.

Excel

Staat de timestamp in cel A1, gebruik dan in de Nederlandstalige Excel de formule =A1/86400+DATUM(1970;1;1) en geef de cel de opmaak Datum of een aangepaste opmaak zoals dd-mm-jjjj uu:mm:ss. In de Engelstalige Excel is dat =A1/86400+DATE(1970,1,1). Ook hier is de uitkomst in UTC.

PHP en MySQL

<?php
echo time();                                // huidige Unix timestamp
echo date( 'Y-m-d H:i:s', 1452853796 );     // timestamp naar datum, in de tijdzone van PHP
SELECT UNIX_TIMESTAMP();               -- huidige Unix timestamp
SELECT FROM_UNIXTIME(1452853796);      -- timestamp naar datum, in de tijdzone van de MySQL-sessie

Wil je liever niets installeren of typen? Op bijvoorbeeld EpochConverter reken je epoch-seconden online om.

Het jaar 2038-probleem

Oudere systemen slaan een Unix timestamp op als een 32-bits getal met teken. Het grootste getal dat daarin past is 2147483647, en dat is 19 januari 2038, 03:14:07 uur UTC. Eén seconde later loopt het getal over naar een negatieve waarde, en denkt zo’n systeem dat het december 1901 is. Moderne besturingssystemen en programmeertalen gebruiken daarom 64-bits timestamps, maar in oude software, apparaten en databasevelden kan het probleem nog voorkomen.

Andere epochs en betekenissen

  • Windows telt niet vanaf 1970: de Windows-bestandstijd (FILETIME) is het aantal intervallen van 100 nanoseconden sinds 1 januari 1601 UTC.
  • Excel telt dagen vanaf 1 januari 1900. Daarom deel je in de formule hierboven door 86400 en tel je de datum 1 januari 1970 erbij op.
  • In machine learning betekent een epoch iets heel anders: één volledige doorloop van alle trainingsdata door het model.

Op Wikipedia vind je een overzicht van nog meer epochs in de computerwereld.

Scroll naar boven