Ce este un timestamp Unix (și de ce îl folosesc dezvoltatorii)?

Un timestamp Unix este un număr întreg simplu: numărul de secunde care au trecut de la 1 ianuarie 1970, ora 00:00:00 UTC. Acel moment se numește epocha Unix, iar fiecare secundă de atunci a fost numărata fără întrerupere.

Timestamp-ul curent se află undeva în jurul valorii de 1.750.000.000. Acel număr singur spune oricărui calculator, baze de date sau API exact care moment în timp intenționezi — fără ambiguitate.

De ce 1970?

Unix a fost dezvoltat la sfârșitul anilor 1960 la Bell Labs. Când inginerii aveau nevoie de un punct de referință fix pentru timp, au ales 1 ianuarie 1970 — începutul unui nou deceniu, ușor de rațional, și convabil în trecutul recent, astfel încât datele stocate să nu necesite numere negative pentru nimic practic la acel moment.

A fost o alegere pragmatică, nu una de principiu. A rămas.

Problema pe care o rezolvă timestamp-urile Unix

Reprezentarea datelor ca șiruri de caractere lizibile de om creează ambiguitate la fiecare nivel:

  • Dezacorduri de format: 03/04/25 este 4 martie sau 3 aprilie? Este 1925 sau 2025?
  • Confuzia fusurilor orare: „vineri la 15:00" înseamnă un moment diferit la Londra față de Tokyo
  • Diferențe de localizare: Unele țări scriu zi-lună-an, altele lună-zi-an

Un timestamp Unix ocolește toate acestea. 1711929600 este un moment unic și neambiguu în timp indiferent de unde ești sau ce format preferi. Mașinile sunt de acord; oamenii pot converti.

Secunde, milisecunde și microsecunde

Timestamp-ul Unix original este în secunde. Dar diferite sisteme folosesc rezoluții diferite:

FormatUnitateExemplu
Unix (POSIX)Secunde1711929600
JavaScript Date.now()Milisecunde1711929600000
Python time.time()Secunde (float)1711929600.123
Timestamp-uri baze de dateAdesea microsecunde1711929600000000

Aceasta este una dintre cele mai frecvente surse de erori atunci când lucrezi între sisteme. Un timestamp JavaScript transmis direct unei funcții Python sau Go va fi de 1.000 de ori prea mare. Verificați întotdeauna rezoluția când traversați granițele sistemelor.

Citirea și scrierea timestamp-urilor Unix

În JavaScript / TypeScript

// Timestamp curent în secunde
Math.floor(Date.now() / 1000)

// Timestamp curent în milisecunde
Date.now()

// Conversie timestamp (secunde) la obiect Date
new Date(timestamp * 1000)

// Conversie Date la timestamp (secunde)
Math.floor(new Date('2024-04-01').getTime() / 1000)

În Python

import time, datetime

# Timestamp curent (float)
time.time()

# Conversie la datetime
datetime.datetime.fromtimestamp(1711929600)

# Conversie datetime la timestamp
datetime.datetime(2024, 4, 1).timestamp()

În SQL (PostgreSQL)

-- Timestamp curent
EXTRACT(EPOCH FROM NOW())::int

-- Conversie la timestamp
TO_TIMESTAMP(1711929600)

Fusurile orare nu afectează timestamp-ul în sine

Acest lucru este important și adesea înțeles greșit.

Un timestamp Unix reprezintă întotdeauna un moment în UTC. Când îl afișezi, convertești la un fus orar local. Când îl stochezi, stochezi valoarea UTC. Timestamp-ul în sine este neutru față de fusul orar.

Asta înseamnă:

  • Doi utilizatori din fusuri orare diferite care stochează „acum" vor obține același timestamp
  • La afișare, fiecare utilizator îl vede în ora lor locală
  • Nu sunt necesare ajustări de decalaj în baza de date — doar la nivelul de prezentare

Problema anului 2038

Timestamp-urile Unix stocate ca numere întregi cu semn pe 32 de biți pot număra doar până la 2.147.483.647 secunde — care corespunde datei de 19 ianuarie 2038, la 03:14:07 UTC. După aceea, un contor pe 32 de biți se resetează la un număr negativ mare.

Sistemele care încă stochează timestamp-uri ca numere întregi pe 32 de biți se vor defecta la acea dată. Majoritatea sistemelor moderne folosesc numere întregi pe 64 de biți, care împinge data de depășire la anul 292 de miliarde — în mod sigur irelevant pentru scopuri practice.

Dacă lucrezi cu sisteme incorporate, baze de date vechi sau cod C vechi, merită să verifici cum sunt stocate timestamp-urile.

Când să folosești un timestamp Unix

Folosește un timestamp Unix când:

  • Stochezi date într-o bază de date și vrei un număr întreg simplu și sortabil
  • Transmiți date între sisteme sau API-uri
  • Compari sau sortezi evenimente cronologic
  • Calculezi durate (pur și simplu scade două timestamp-uri)
  • Lucrezi cu cache-uri sau logică de expirare (expires_at = now + 3600)

Folosește un șir de date formatat când:

  • Afișezi o dată unui utilizator
  • Înregistrezi evenimente lizibile de om
  • Lucrezi în foi de calcul sau exporturi CSV

Conversii rapide

CeSecunde
1 minut60
1 oră3.600
1 zi86.400
1 săptămână604.800
30 de zile2.592.000
1 an (aprox.)31.536.000

Convertorul de timestamp Unix convertește orice timestamp la o dată lizibilă de om sau convertește o dată la un timestamp Unix instantaneu.