Какво е Unix timestamp (и защо разработчиците го използват)?

Unix timestamp е едно цяло число: броят секунди, които са изминали от 1 януари 1970 г., 00:00:00 UTC. Този момент се нарича Unix epoch, и всяка секунда оттогава се брои без прекъсване.

Текущият timestamp в момента е някъде около 1,750,000,000. Само това число казва на всеки компютър, база данни или API точно кой момент във времето имате предвид — без двусмислие.

Защо 1970?

Unix е разработен в края на 60-те години в Bell Labs. Когато инженерите са имали нужда от фиксирана референтна точка за време, са избрали 1 януари 1970 г. — началото на ново десетилетие, лесно за осмисляне и удобно в близкото минало, така че съхраняваните дати да не изискват отрицателни числа за нищо практично по онова време.

Това е бил прагматичен избор, не принципен. И е останал.

Проблемът, който Unix timestamps решават

Представянето на дати като четими за човек низове създава двусмислие на всяко ниво:

  • Разногласия във формата: 03/04/25 е 4 март или 3 април? 1925 или 2025?
  • Объркване с часови зони: „3pm в петък“ означава различен момент в Лондон спрямо Токио
  • Локални разлики: някои държави пишат ден-месец-година, други месец-ден-година

Unix timestamp заобикаля всичко това. 1711929600 е един, недвусмислен момент във времето независимо къде сте или какъв формат предпочитате. Машините са съгласни; хората могат да конвертират.

Секунди, милисекунди и микросекунди

Оригиналният Unix timestamp е в секунди. Но различните системи използват различна резолюция:

FormatUnitExample
Unix (POSIX)Seconds1711929600
JavaScript Date.now()Milliseconds1711929600000
Python time.time()Seconds (float)1711929600.123
Database timestampsOften microseconds1711929600000000

Това е един от най-честите източници на бъгове при работа между системи. JavaScript timestamp, подаден директно към Python или Go функция, ще е 1,000× по-голям. Винаги проверявайте резолюцията, когато пресичате граници между системи.

Четене и запис на Unix timestamps

В JavaScript / TypeScript

// Current timestamp in seconds
Math.floor(Date.now() / 1000)

// Current timestamp in milliseconds
Date.now()

// Convert timestamp (seconds) to Date object
new Date(timestamp * 1000)

// Convert Date to timestamp (seconds)
Math.floor(new Date('2024-04-01').getTime() / 1000)

В Python

import time, datetime

# Current timestamp (float)
time.time()

# Convert to datetime
datetime.datetime.fromtimestamp(1711929600)

# Convert datetime to timestamp
datetime.datetime(2024, 4, 1).timestamp()

В SQL (PostgreSQL)

-- Current timestamp
EXTRACT(EPOCH FROM NOW())::int

-- Convert to timestamp
TO_TIMESTAMP(1711929600)

Часовите зони не влияят на самия timestamp

Това е важно и често се разбира погрешно.

Unix timestamp винаги представя момент в UTC. Когато го показвате, го конвертирате към локална часова зона. Когато го съхранявате, съхранявате UTC стойността. Самият timestamp е неутрален спрямо часови зони.

Това означава:

  • двама потребители в различни часови зони, които съхраняват „сега“, ще получат един и същ timestamp
  • при показване всеки потребител го вижда в своята локална часова зона
  • не са нужни корекции на offset в базата данни — само на презентационния слой

Проблемът „2038“

Unix timestamps, съхранявани като 32-битово знаково цяло число, могат да броят само до 2,147,483,647 секунди — което съответства на 19 януари 2038 г., 03:14:07 UTC. След това 32-битовият брояч „препълва“ и става голямо отрицателно число.

Системи, които все още съхраняват timestamps като 32-битови цели числа, ще се счупят на тази дата. Повечето модерни системи използват 64-битови цели числа, което изтласква датата на препълване до годината 292 милиарда — безопасно нерелевантно за практическите цели.

Ако работите с вградени системи, наследени бази данни или стар C код, струва си да проверите как се съхраняват timestamps.

Кога да използвате Unix timestamp

Използвайте Unix timestamp когато:

  • съхранявате дати в база данни и искате просто, сортираемо цяло число
  • предавате дати между системи или APIs
  • сравнявате или сортирате събития хронологично
  • изчислявате продължителности (просто извадете два timestamps)
  • работите с кешове или логика за изтичане (expires_at = now + 3600)

Използвайте форматиран низ за дата когато:

  • показвате дата на потребител
  • записвате логове, четими за човек
  • работите в електронни таблици или CSV експорти

Бързи конверсии

WhatSeconds
1 minute60
1 hour3,600
1 day86,400
1 week604,800
30 days2,592,000
1 year (approx.)31,536,000

Unix Timestamp Converter конвертира всеки timestamp към дата, четима за човек, или конвертира дата към Unix timestamp моментално.

Свързани статии