Updated Jun 30, 2026

A Moment Is Not a Clock Reading

Here's the reality you start from: you think of "time" as the number on a clock. 3:00pm. You and a friend agree to meet at 3pm and you both know what that means. So when you write code, you reach for the same thing — you store "3:00pm" and assume it's a fixed point. That assumption is the source of nearly every time bug you will ever write.

Because "3:00pm" is not a point in time. It's a clock reading. And clocks all over the world read different things at the same actual instant.

The two things people call "time"

There are really two different concepts hiding under the word time, and confusing them is the original sin.

An instant is a single point on the universe's timeline. The moment a payment cleared. The moment a sensor fired. It happens once, everywhere, simultaneously. When that payment cleared, it cleared at the same instant for someone in Tokyo and someone in New York — even though one of them was eating breakfast and the other was asleep.

A wall-clock reading is what a clock on a particular wall, in a particular place, says at that instant. At the one instant the payment cleared, the clock in Tokyo said 11:00pm and the clock in New York said 9:00am.

ONE instant on the timeline:
   |
   v
Tokyo wall clock:     11:00 PM   (Monday)
London wall clock:     2:00 PM   (Monday)
New York wall clock:   9:00 AM   (Monday)
Los Angeles clock:     6:00 AM   (Monday)

What just happened: a single instant produced four different clock readings — and even a different day in some places. The instant didn't change. The wall it's read off did. "3:00pm" with no location attached is not enough information to know when you mean.

So what is an instant, in a computer?

If wall-clock strings are ambiguous, you need a way to name an instant that means the same thing everywhere. There are two common ones, and they're really the same idea.

UTC (Coordinated Universal Time) is a single global reference clock — think of it as the world's neutral wall clock, sitting at the prime meridian, that never shifts for daylight saving. When you say "this happened at 14:00 UTC," every machine on Earth agrees on exactly which instant you mean. UTC is the anchor everyone converts to and from.

A Unix timestamp is the same instant expressed as a plain number: the count of seconds (or milliseconds) since one fixed reference instant, midnight UTC on 1 January 1970, called the epoch. No time zone, no formatting, no ambiguity — only a number that ticks up by one every second, identically, on every computer in the world.

Instant:           2026-06-30  14:00:00 UTC
Unix timestamp:    1782655200          (seconds since 1970-01-01 00:00 UTC)

What just happened: the same instant, written two ways. The UTC string is human-readable; the Unix number is what machines love — comparing two instants becomes comparing two integers, and arithmetic ("five minutes later") becomes adding 300. Neither carries any "where," because an instant doesn't need one.

A Unix timestamp is not "UTC time." It's a count of seconds with no zone at all. You convert it into a UTC string, or into a local clock reading, for display. The number itself is zone-free — that's the whole point of it.

Why "3pm" needs a "where" to become a moment

Put the two ideas together and the rule falls out. A wall-clock reading by itself ("2026-06-30 15:00:00") is not an instant. It's an instant only once you attach the place — because the place tells you how far that wall clock sits from UTC.

"2026-06-30 15:00:00" in Berlin   -> instant: 2026-06-30 13:00:00 UTC
"2026-06-30 15:00:00" in New York -> instant: 2026-06-30 19:00:00 UTC

What just happened: the exact same string of digits, "15:00:00," named two instants six hours apart, because Berlin's clock and New York's clock sit at different distances from UTC. The string alone is a riddle. The string plus the place is an answer.

This is the mental model to carry into everything else: inside your program, work with instants (UTC, or a timestamp) — unambiguous points on the timeline. At the edges — when a human types a time or reads one — convert between that instant and a local clock reading. The bugs happen when a wall-clock reading sneaks into the middle of your system pretending to be a moment.

For builders

When a value crosses a boundary — comes out of a database, arrives in an API request, gets logged — ask one question: is this an instant, or a clock reading? An instant is safe to compare, sort, and store. A clock reading is display-only until you pair it with a zone. Training yourself to ask that one question, every time a date crosses a wire, prevents more time bugs than any library will. (If you're fuzzy on what "crossing a boundary" even means at runtime, What Happens When Your Code Runs lays out where data lives as a program executes.)

[
  {
    "q": "At one single instant, the clock in Tokyo reads 11:00 PM Monday and the clock in London reads 2:00 PM Monday. What does this tell you?",
    "choices": [
      "One of the clocks is broken or set wrong",
      "A single instant produces different wall-clock readings depending on location",
      "Tokyo is in a different week than London",
      "Time moves faster in Tokyo than in London"
    ],
    "answer": 1,
    "explain": "One instant on the timeline shows up as different clock readings in different places. The instant is shared; the wall-clock reading is local."
  },
  {
    "q": "What is a Unix timestamp?",
    "choices": [
      "A clock reading in the UTC time zone, formatted as text",
      "A count of seconds since a fixed reference instant (1970-01-01 00:00 UTC), with no time zone",
      "The current local time on the server, as a string",
      "A date stored in the format the user's region prefers"
    ],
    "answer": 1,
    "explain": "It's a plain zone-free number counting seconds from the epoch. You convert it to UTC or local for display; the number itself carries no zone."
  },
  {
    "q": "Why is the string \"2026-06-30 15:00:00\" not, by itself, a moment in time?",
    "choices": [
      "It is a moment; the string already contains everything needed",
      "It is missing the year's day-of-week",
      "Without a place attached, you don't know how far that wall clock sits from UTC, so it could name many different instants",
      "It needs to be converted to a Unix timestamp first to be valid"
    ],
    "answer": 2,
    "explain": "A wall-clock reading becomes an instant only when you attach the location, which tells you its distance from UTC. The same string in Berlin and New York names instants hours apart."
  }
]

← Overview | Phase 2: Offsets, Zones, and the Golden Rules →

Check your understanding 3 questions

1. At one single instant, the clock in Tokyo reads 11:00 PM Monday and the clock in London reads 2:00 PM Monday. What does this tell you?

2. What is a Unix timestamp?

3. Why is the string "2026-06-30 15:00:00" not, by itself, a moment in time?

Was this page helpful?