UNIX Laiko Žymės Keitiklis: Greitai Konvertuokite Laiką

Dabartinė UNIX laiko žymė

Sekundės
Milisekundės

Laiko žymė → Data ir laikas


Data ir laikas → Laiko žymė

UNIX Laiko Žymės Keitiklis (internetinis UNIX laiko konverteris)

Šis UNIX laiko žymės keitiklis leis jums greitai konvertuoti UNIX laiką (epocha laiką / POSIX laiką) į datą ir laiką bei atgal. Jis palaiko laiko žymes sekundėmis ir milisekundėmis, rodo vietinį laiką, UTC ir ISO 8601 formatus, o rezultatus galima nukopijuoti vienu paspaudimu.


Kas yra UNIX laiko žymė (epocha laikas / POSIX laikas)?

UNIX laiko žymė yra skaičius, išreiškiantis laiką kaip sekundžių skaičių nuo 1970 m. sausio 1 d. 00:00:00 UTC (vadinamoji UNIX epocha). Praktiškai tai yra vienas iš dažniausiai naudojamų formatų datos ir laiko saugojimui bei perdavimui sistemose, duomenų bazėse, API ir žurnaluose.

Pavyzdys: 1700000000 atitinka datą 2023 m. lapkričio 14 d. 22:13:20 UTC.

Kodėl būtent 1970 m. sausio 1 d.?

Epochos pradžia (1970-01-01) buvo pasirinkta kuriant UNIX sistemą kaip praktinis atskaitos taškas: ji yra arti sistemos sukūrimo laikotarpio ir leidžia lengvai skaičiuoti laiką.


UNIX laiko žymė: sekundės vs. milisekundės

UNIX laiko žymė dažniausiai pasirodo dviem formomis:

Laiko žymės formatasPavyzdysĮprastas naudojimas
Sekundės (s)1700000000duomenų bazės, backend, API, failai
Milisekundės (ms)1700000000000JavaScript (Date.now()), analizė, detalūs žurnalai

Kaip atpažinti, ką turite?

  • Sekundės „šiuolaikinėse“ datose paprastai turi 10 skaitmenų.
  • Milisekundės paprastai turi 13 skaitmenų ir yra maždaug 1000 kartų didesnės.
  • Apytiksliai: jei reikšmė yra > 10¹², beveik neabejotinai tai yra milisekundės.

Kaip naudotis UNIX laiko žymės keitikliu

1) Laiko žymė → Data ir laikas

  1. Įveskite UNIX laiko žymę į laukelį arba spustelėkite Dabar (dabartinis UNIX laikas).
  2. Jei laiko žymė yra milisekundėmis, aktyvuokite parinktį Milisekundės.
  3. Spustelėkite Konvertuoti (arba paspauskite Enter).
  4. Bus rodomas konvertavimas į vietinį laiką, UTC ir ISO 8601.
  5. Spustelėdami rezultatą, nukopijuosite jį į iškarpinę.

2) Data ir laikas → Laiko žymė

  1. Pasirinkite datą ir laiką formoje.
  2. Spustelėkite Konvertuoti.
  3. Rezultatą gausite kaip laiko žymę sekundėmis ir milisekundėmis.

Kur dažniausiai naudojama UNIX laiko žymė?

UNIX laiką sutiksite praktiškai visur, kur IT srityje dirbama su laiku:

  • Duomenų bazės – laiko saugojimas ir palyginimas MySQL, PostgreSQL, SQLite ir pan.
  • API – REST/GraphQL dažnai grąžina laiką kaip laiko žymę (lengvas serializavimas).
  • Žurnalai ir stebėjimas – tikslus įvykių išdėstymas laiku.
  • Git – atlikimuose (commits) yra laiko duomenys.
  • Failų sistemos – laikai, tokie kaip mtime/ctime/atime (paskutinio modifikavimo laikas ir pan.).
  • JWT – reikalavimai (claims) iat (išduota) ir exp (galioja iki) paprastai yra epochos sekundėmis.
  • Linux/Unix apvalkalas (shell)date +%s grąžina dabartinę laiko žymę.
  • JavaScriptDate.now() grąžina laiką milisekundėmis.

Praktiniai UNIX laiko konvertavimo pavyzdžiai

JavaScript (laiko žymė ↔ data)

// Dabartinė UNIX laiko žymė sekundėmis
const tsSeconds = Math.floor(Date.now() / 1000);

// Dabartinė laiko žymė milisekundėmis
const tsMs = Date.now();

// Laiko žymė (s) -> data
const dateFromSeconds = new Date(1700000000 * 1000);
console.log(dateFromSeconds.toISOString());

// Data -> laiko žymė (s)
const ts = Math.floor(new Date("2024-01-01T00:00:00Z").getTime() / 1000);
console.log(ts);

Python (laiko žymė ↔ datetime)

import time
from datetime import datetime, timezone

# Dabartinė laiko žymė sekundėmis
ts = int(time.time())

# Laiko žymė -> datetime (UTC)
dt_utc = datetime.fromtimestamp(1700000000, tz=timezone.utc);

# Data -> laiko žymė
ts2 = int(datetime(2024, 1, 1, tzinfo=timezone.utc).timestamp())

SQL (MySQL)

-- Dabartinė UNIX laiko žymė (s)
SELECT UNIX_TIMESTAMP();

-- Laiko žymė -> data
SELECT FROM_UNIXTIME(1700000000);

-- Data -> laiko žymė
SELECT UNIX_TIMESTAMP('2024-01-01 00:00:00');

Laiko juostos: UTC, vietinis laikas ir ISO 8601

UNIX laiko žymė visada yra UTC – joje nėra informacijos apie laiko juostą ar vasaros laiką. Konvertavimas į vietinį laiką priklauso nuo naršyklės, serverio nustatymų ar naudojamos bibliotekos.

Terminai, kuriuos verta žinoti:

  • UTC – pasaulinis standartas be vasaros/žiemos laiko.
  • GMT – praktiškai identiškas UTC įprastam naudojimui.
  • Poslinkis – poslinkis nuo UTC (pvz., Vilnius UTC+2 žiemą, UTC+3 vasarą).

UNIX laiko žymės ribos ir 2038 metų problema

2038 metų problema (Year 2038 Problem)

Kai kuriose 32 bitų sistemose laiko žymė saugoma kaip int32 su maksimalia reikšme 2 147 483 647, o tai atitinka 2038 m. sausio 19 d. 03:14:07 UTC. Viršijus šią reikšmę, gali įvykti perpildymas ir neteisingas laikas. Šiuolaikinės 64 bitų sistemos šios problemos paprastai neturi.

64 bitų UNIX laiko diapazonas

64 bitų reikšmės apima itin platų laikotarpį (praktiškai „amžinai“). Neigiamos reikšmės reiškia datą prieš 1970 m. sausio 1 d..


DUK – Dažniausiai užduodami klausimai apie UNIX laiko žymę

Ar UNIX laiko žymė yra UTC, ar vietiniu laiku? UNIX laiko žymė visada yra UTC. Vietinis laikas atsiranda tik konvertuojant pagal laiko juostą. Todėl konverteris paprastai rodo tiek UTC, tiek vietinį laiką.
Kaip atpažinti, ar laiko žymė yra sekundėmis ar milisekundėmis? Dabartiniam laikui sekundėmis išreikšta laiko žymė paprastai turi 10 skaitmenų. Milisekundėmis išreikšta laiko žymė paprastai turi 13 skaitmenų ir yra maždaug 1000 kartų didesnė. Apytiksliai: reikšmė > 10¹² paprastai yra milisekundės.
Ką reiškia neigiama UNIX laiko žymė? Neigiama laiko žymė reiškia datą prieš 1970 m. sausio 1 d. Pavyzdžiui, -1 atitinka 1969 m. gruodžio 31 d. 23:59:59 UTC.
Kaip konvertuoti UNIX laiko žymę SQL? MySQL naudosite FROM_UNIXTIME(timestamp) ir atgal UNIX_TIMESTAMP(data). PostgreSQL tai paprastai yra TO_TIMESTAMP(timestamp) ir EXTRACT(EPOCH FROM data).
Kodėl UNIX epocha prasideda 1970 m. sausio 1 d.? Tai istoriškai pasirinktas atskaitos taškas iš ankstyvųjų UNIX laikų: paprastas, praktiškas ir artimas sistemos kūrimo laikui.