DEV Community

nikosst
nikosst

Posted on

Local Time, UTC, Offset και Epoch: Ο απόλυτος οδηγός για developers

Το πρόβλημα της ώρας

Η ώρα είναι από τα πιο ύπουλα προβλήματα στην ανάπτυξη λογισμικού.

Αν ένας χρήστης στην Αθήνα δημιουργήσει μια παραγγελία στις 20:00 και ένας άλλος στη Νέα Υόρκη τη δει στις 13:00, ποια είναι η "σωστή" ώρα;

Αν μια εφαρμογή αποθηκεύσει μόνο το 20:00, χωρίς να γνωρίζει τη ζώνη ώρας, τότε η πληροφορία είναι πρακτικά άχρηστη.

Αυτός είναι ο λόγος που υπάρχουν έννοιες όπως:

  • Local Time
  • UTC
  • UTC Offset
  • Epoch / Unix Timestamp

Δεν δημιουργήθηκαν για να μας μπερδεύουν. Δημιουργήθηκαν για να λύνουν το πρόβλημα της παγκόσμιας διαχείρισης χρόνου.


Local Time

Το Local Time είναι η ώρα που βλέπει ο χρήστης στη χώρα του.

Παραδείγματα:

Αθήνα:    2026-06-09 20:00
Λονδίνο:  2026-06-09 18:00
Νέα Υόρκη:2026-06-09 13:00
Enter fullscreen mode Exit fullscreen mode

Όλες οι παραπάνω ώρες μπορεί να αντιστοιχούν στην ίδια ακριβώς χρονική στιγμή. Συνέβει ένα γεγονός μία ενέργεια στον πλανίτη γη ακριβώς αυτή την στιγμή που όμως για διαφορετικές γεωγραφικές περιοχές αντιστοιχεί σε διαφορετικές ώρες.

Πότε χρησιμοποιούμε Local Time;

Μόνο για εμφάνιση στον χρήστη.

Παραδείγματα:

  • Ημερομηνία παραγγελίας
  • Ώρα δημιουργίας post
  • Ημερολόγιο συναντήσεων
  • Reports προς τον χρήστη

Πότε ΔΕΝ το αποθηκεύουμε;

Σχεδόν ποτέ ως μοναδική πηγή αλήθειας.

Αν αποθηκεύσεις:

2026-06-09 20:00
Enter fullscreen mode Exit fullscreen mode

δεν γνωρίζεις:

  • Σε ποια χώρα δημιουργήθηκε
  • Σε ποια ζώνη ώρας ανήκει
  • Αν ίσχυε θερινή ώρα (DST)

UTC (Coordinated Universal Time)

Το UTC είναι η παγκόσμια αναφορά χρόνου.

Όλες οι ζώνες ώρας υπολογίζονται σε σχέση με αυτό.

Παράδειγμα:

UTC: 2026-06-09 17:00
Enter fullscreen mode Exit fullscreen mode

Την ίδια στιγμή με βάση την UTC ώρα μπορούμε να έχουμε:

στην Αθήνα   UTC+3 -> 20:00
στο Λονδίνο UTC+1 -> 18:00
στη Νέα Υόρκη UTC-4 -> 13:00
Enter fullscreen mode Exit fullscreen mode

Πότε χρησιμοποιούμε UTC;

Σχεδόν πάντα στο backend.

Αποθηκεύουμε:

2026-06-09T17:00:00Z
Enter fullscreen mode Exit fullscreen mode

Το Z σημαίνει UTC.

Γιατί;

Επειδή:

  • Δεν αλλάζει με DST
  • Δεν εξαρτάται από χώρα
  • Είναι παγκόσμιο σημείο αναφοράς

Ένας κανόνας που ακολουθούν σχεδόν όλες οι μεγάλες εταιρείες:

Store in UTC, display in Local Time.


UTC Offset

Παραδείγματα:

UTC+3
UTC+2
UTC-5
UTC+9
Enter fullscreen mode Exit fullscreen mode

Για την Αθήνα:

Χειμώνας -> UTC+2
Καλοκαίρι -> UTC+3
Enter fullscreen mode Exit fullscreen mode
Χειμώνας -> UTC+2
Καλοκαίρι -> UTC+3
Enter fullscreen mode Exit fullscreen mode

Παράδειγμα

2026-06-09T20:00:00+03:00
Enter fullscreen mode Exit fullscreen mode

σημαίνει:

Τοπική ώρα: 20:00
Offset: +03:00
UTC: 17:00
Enter fullscreen mode Exit fullscreen mode

Πότε αποθηκεύουμε Offset;

Όταν θέλουμε να γνωρίζουμε ακριβώς τι έβλεπε ο χρήστης τη στιγμή της καταχώρησης.

Παραδείγματα:

  • Αεροπορικά εισιτήρια
  • Νομικά έγγραφα
  • Ιατρικά συστήματα
  • Financial systems

Epoch / Unix Timestamp

Το Epoch είναι η πιο "καθαρή" αναπαράσταση χρόνου.

Μετράει πόσα δευτερόλεπτα έχουν περάσει από:

1970-01-01 00:00:00 UTC
Enter fullscreen mode Exit fullscreen mode

Αυτό ονομάζεται Unix Epoch. epochconverter

Παράδειγμα:

1780968655
Enter fullscreen mode Exit fullscreen mode

Αυτός είναι απλά ένας αριθμός.

Δεν περιέχει:

Timezone
Offset
DST

Μόνο μια απόλυτη χρονική στιγμή.


Γιατί οι developers αγαπούν τα Epochs;

Επειδή οι συγκρίσεις είναι πανεύκολες.

Αν έχεις:

1780968655
1780968755
Enter fullscreen mode Exit fullscreen mode

ξέρεις αμέσως ότι το δεύτερο συνέβη αργότερα.

Δεν χρειάζεται:

  • μετατροπή timezone
  • parsing
  • date calculations

Timestamp ως Long

Στη .NET και στις περισσότερες γλώσσες το Epoch αποθηκεύεται ως:

long timestamp
Enter fullscreen mode Exit fullscreen mode

Παράδειγμα:

1780968655
Enter fullscreen mode Exit fullscreen mode

ή

1780968655000
Enter fullscreen mode Exit fullscreen mode

(σε milliseconds)

Πότε χρησιμοποιείται;

  • Databases
  • APIs
  • Event streams
  • Kafka
  • Message queues
  • Logging systems

Timestamp ως String

Παράδειγμα:

2026-06-09T17:00:00Z
Enter fullscreen mode Exit fullscreen mode

ή

2026-06-09T20:00:00+03:00
Enter fullscreen mode Exit fullscreen mode

Αυτό είναι συνήθως ISO 8601 format.

Πλεονεκτήματα

  • Αναγνώσιμο από άνθρωπο
  • Περιέχει timezone πληροφορία
  • Ιδανικό για APIs

Μειονεκτήματα

  • Μεγαλύτερο μέγεθος
  • Πιο αργό parsing

Timestamp ως DateTime

Στη .NET:

DateTime
DateTimeOffset

Σήμερα οι περισσότεροι senior developers προτιμούν:

DateTimeOffset

γιατί περιέχει και το offset.

Παράδειγμα:

2026-06-09 20:00 +03:00
Enter fullscreen mode Exit fullscreen mode

Τι να χρησιμοποιήσω τελικά;

Για αποθήκευση στη βάση

Προτίμησε:

UTC ή DateTimeOffset

Για APIs

Προτίμησε:

ISO 8601

Παράδειγμα:

{
  "createdAt": "2026-06-09T17:00:00Z"
}
Enter fullscreen mode Exit fullscreen mode

Για logs

Προτίμησε:

UTC

ή Epoch.

Για sorting και performance

Προτίμησε:

Epoch Timestamp

Για εμφάνιση στον χρήστη

Προτίμησε:

Local Time

με βάση τη ζώνη ώρας του χρήστη.


Τι είναι το Epoch Converter;

Το Epoch Converter είναι ένα πολύ γνωστό εργαλείο για developers που μετατρέπει:

Epoch → Human Readable Date
Date → Epoch
UTC ↔ Local Time
Seconds ↔ Milliseconds ↔ Microseconds

και υποστηρίζει διάφορες μορφές timestamps.

Είναι εξαιρετικά χρήσιμο όταν κάνεις debugging logs, APIs ή βάσεις δεδομένων.


Συμπέρασμα

Το μεγαλύτερο λάθος που κάνουν οι developers είναι να θεωρούν ότι η ημερομηνία είναι απλώς ένα πεδίο στη βάση.

Στην πραγματικότητα, ο χρόνος είναι ένα παγκόσμιο πρόβλημα συγχρονισμού. Το Local Time εξυπηρετεί τον χρήστη, το UTC εξυπηρετεί το σύστημα, το Offset διατηρεί το πραγματικό τοπικό πλαίσιο μιας στιγμής και το Epoch παρέχει την πιο απλή και απόλυτη αναπαράσταση του χρόνου.

Όταν σχεδιάζεις ένα σύστημα, η σωστή ερώτηση δεν είναι «ποιο type να χρησιμοποιήσω;». Η σωστή ερώτηση είναι:

Θέλω να αποθηκεύσω πώς είδε ο χρήστης την ώρα ή ποια ακριβώς στιγμή συνέβη το γεγονός;

Αν απαντήσεις σωστά σε αυτή την ερώτηση, τότε η επιλογή μεταξύ Local Time, UTC, Offset και Epoch γίνεται σχεδόν αυτονόητη. Οι καλύτερες εφαρμογές δεν είναι αυτές που χειρίζονται σωστά τις ημερομηνίες στις εύκολες περιπτώσεις· είναι αυτές που συνεχίζουν να λειτουργούν σωστά όταν οι χρήστες βρίσκονται σε διαφορετικές ηπείρους, αλλάζουν ζώνες ώρας ή όταν η θερινή ώρα αποφασίζει να σου χαλάσει το βράδυ παραγωγής.


Το πιο γνωστό και ευρέως χρησιμοποιούμενο εργαλείο μετατροπής Unix timestamps για developers.

Online εργαλείο μετατροπής Unix Epoch timestamps σε αναγνώσιμες ημερομηνίες και αντίστροφα.

Developer-focused εργαλείο για μετατροπές Epoch, UTC και ISO 8601 timestamps.

Web εφαρμογή για μετατροπές Unix time, debugging και date calculations.

Minimalistic converter για γρήγορη μετατροπή Epoch timestamps και ημερομηνιών.

Online converter με υποστήριξη Epoch, UTC, timezone conversions και date utilities.

Εργαλείο μετατροπής Unix timestamps με έμφαση σε προγραμματιστικές χρήσεις και APIs.

Πληροφοριακό site για Unix Time με converter και επεξήγηση του Epoch format.

Unix timestamp calculator με δυνατότητες date arithmetic και μετατροπών χρόνου.


nikosstit@gmail.com

Top comments (0)