Τι είναι ένα Unix timestamp (και γιατί το χρησιμοποιούν οι προγραμματιστές);

Ένα Unix timestamp είναι ένας ακέραιος αριθμός: το πλήθος των δευτερολέπτων που έχουν περάσει από 1 Ιανουαρίου 1970, στις 00:00:00 UTC. Αυτή η στιγμή ονομάζεται Unix epoch, και κάθε δευτερόλεπτο από τότε μετριέται συνεχόμενα, χωρίς διακοπή.

Το τρέχον timestamp αυτή τη στιγμή είναι κάπου γύρω στο 1.750.000.000. Αυτός ο αριθμός από μόνος του λέει σε οποιονδήποτε υπολογιστή, βάση δεδομένων ή API ακριβώς ποια χρονική στιγμή εννοείτε — χωρίς ασάφειες.

Γιατί το 1970;

Το Unix αναπτύχθηκε στα τέλη της δεκαετίας του 1960 στα Bell Labs. Όταν οι μηχανικοί χρειάστηκαν ένα σταθερό σημείο αναφοράς για τον χρόνο, διάλεξαν την 1η Ιανουαρίου 1970 — αρχή νέας δεκαετίας, εύκολο να το σκεφτείς, και αρκετά «πρόσφατο» ώστε οι αποθηκευμένες ημερομηνίες να μην χρειάζονται αρνητικούς αριθμούς για πρακτικές χρήσεις εκείνης της εποχής.

Ήταν μια πρακτική επιλογή, όχι μια “φιλοσοφική” απόφαση. Και τελικά καθιερώθηκε.

Ποιο πρόβλημα λύνουν τα Unix timestamps

Όταν αναπαριστάς ημερομηνίες ως αναγνώσιμα strings, δημιουργείς ασάφεια σε κάθε επίπεδο:

  • Διαφωνίες μορφής: Το 03/04/25 είναι 4 Μαρτίου ή 3 Απριλίου; Είναι το 1925 ή το 2025;
  • Σύγχυση ζώνης ώρας: “3 μ.μ. την Παρασκευή” σημαίνει διαφορετική στιγμή στο Λονδίνο σε σχέση με το Τόκιο
  • Διαφορές τοπικοποίησης: Άλλες χώρες γράφουν ημέρα-μήνας-έτος, άλλες μήνας-ημέρα-έτος

Ένα Unix timestamp αποφεύγει όλα αυτά. Το 1711929600 είναι μία, ξεκάθαρη χρονική στιγμή ανεξάρτητα από το πού βρίσκεστε ή τι μορφή προτιμάτε. Οι μηχανές συμφωνούν· οι άνθρωποι μετατρέπουν.

Δευτερόλεπτα, χιλιοστά και μικροδευτερόλεπτα

Το αρχικό Unix timestamp είναι σε δευτερόλεπτα. Αλλά διαφορετικά συστήματα χρησιμοποιούν διαφορετική ανάλυση:

ΜορφήΜονάδαΠαράδειγμα
Unix (POSIX)Δευτερόλεπτα1711929600
JavaScript Date.now()Χιλιοστά δευτερολέπτου1711929600000
Python time.time()Δευτερόλεπτα (float)1711929600.123
Timestamps βάσεωνΣυχνά μικροδευτερόλεπτα1711929600000000

Αυτό είναι από τις πιο συχνές αιτίες bugs όταν δουλεύετε μεταξύ συστημάτων. Ένα 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 που αποθηκεύονται ως signed 32-bit integer μπορούν να μετρήσουν μέχρι 2.147.483.647 δευτερόλεπτα — που αντιστοιχεί σε 19 Ιανουαρίου 2038, στις 03:14:07 UTC. Μετά από αυτό, ένας 32-bit μετρητής “γυρίζει” σε μεγάλο αρνητικό αριθμό.

Συστήματα που ακόμα αποθηκεύουν timestamps ως 32-bit integers θα “σπάσουν” σε αυτή την ημερομηνία. Τα περισσότερα σύγχρονα συστήματα χρησιμοποιούν 64-bit integers, που μεταθέτουν την υπερχείλιση στο έτος 292 δισεκατομμύρια — πρακτικά άνευ σημασίας.

Αν δουλεύετε με embedded συστήματα, legacy βάσεις ή παλιό C code, αξίζει να ελέγξετε πώς αποθηκεύονται τα timestamps.

Πότε να χρησιμοποιείτε Unix timestamp

Χρησιμοποιήστε Unix timestamp όταν:

  • Αποθηκεύετε ημερομηνίες σε βάση και θέλετε έναν απλό, ταξινομήσιμο ακέραιο
  • Περνάτε ημερομηνίες μεταξύ συστημάτων ή APIs
  • Συγκρίνετε ή ταξινομείτε γεγονότα χρονικά
  • Υπολογίζετε διάρκειες (απλά αφαιρείτε δύο timestamps)
  • Δουλεύετε με cache ή λογική λήξης (expires_at = now + 3600)

Χρησιμοποιήστε μορφοποιημένο date string όταν:

  • Εμφανίζετε ημερομηνία σε χρήστη
  • Καταγράφετε γεγονότα με τρόπο αναγνώσιμο από ανθρώπους
  • Δουλεύετε σε spreadsheets ή εξαγωγές CSV

Γρήγορες μετατροπές

ΤιΔευτερόλεπτα
1 λεπτό60
1 ώρα3.600
1 ημέρα86.400
1 εβδομάδα604.800
30 ημέρες2.592.000
1 έτος (περίπου)31.536.000

Ο Unix Timestamp Converter μετατρέπει οποιοδήποτε timestamp σε αναγνώσιμη ημερομηνία ή μετατρέπει μια ημερομηνία σε Unix timestamp άμεσα.