Time and time zones test values

Hours that do not exist, happen twice, or are written without a zone. 12 values, each with what it breaks and what a correct application does instead.

time-zones version 2.0, updated 2026-10-15 CC-BY-4.0

Type them one at a time with AltShiftN in the palette, or take them all into a script with nkb emit time-zones.

Hour skipped by the next spring clock change

time-zones/dst-nonexistent
Next date: the last Sunday of March, 02:30
  • 16 graphemes
  • 16 code points
  • 16 bytes
  • 16 UTF-16 units
What it breaks
On the day clocks go forward in central Europe this hour does not exist locally; parsers either shift it silently or fail with a raw error.
What a correct application does
Rejected with an explanation, or shifted with the shift shown to the user.

Hour repeated by the next autumn clock change

time-zones/dst-ambiguous
Next date: the last Sunday of October, 02:30
  • 16 graphemes
  • 16 code points
  • 16 bytes
  • 16 UTF-16 units
What it breaks
On the day clocks go back in central Europe this hour happens twice; without a zone the value cannot be resolved to a moment.
What a correct application does
The zone requested, or one interpretation chosen and stated.

Timestamp without a zone

time-zones/no-offset
2026-09-06T14:32:07 2026-09-06T14:32:07
  • 19 graphemes
  • 19 code points
  • 19 bytes
  • 19 UTF-16 units
What it breaks
A timestamp without a zone is meaningless the moment it crosses a machine boundary, and it always does.
What a correct application does
Rejected, or interpreted with the assumed zone stated next to the value.

Timestamp with an offset

time-zones/with-offset
2026-09-06T14:32:07+02:00 2026-09-06T14:32:07+02:00
  • 25 graphemes
  • 25 code points
  • 25 bytes
  • 25 UTF-16 units
What it breaks
The correct form; a field rejecting it accepts only the ambiguous one.
What a correct application does
Accepted and preserved, including the offset.

Timestamp in UTC

time-zones/utc-z
2026-09-06T12:32:07Z 2026-09-06T12:32:07Z
  • 20 graphemes
  • 20 code points
  • 20 bytes
  • 20 UTF-16 units
What it breaks
The same moment written in the universal form; storing it as local time loses two hours somewhere.
What a correct application does
Accepted and converted for display, not stored as if it were local.

Date and time as people type them

time-zones/local-format
06.09.202614:32 06.09.2026 14:32
  • 16 graphemes
  • 16 code points
  • 16 bytes
  • 16 UTF-16 units
What it breaks
The format people actually type; a field accepting only the international one rejects every human.
What a correct application does
Accepted with the expected format shown, or both accepted.

Midnight written as 24:00

time-zones/midnight-24
24:00 24:00
  • 5 graphemes
  • 5 code points
  • 5 bytes
  • 5 UTF-16 units
What it breaks
Midnight at the end of the day: valid in the international notation and rejected by most parsers.
What a correct application does
Accepted and normalised to the next day's zero hour, or rejected with a message.

Leap second

time-zones/leap-second
2026-06-30T23:59:60Z 2026-06-30T23:59:60Z
  • 20 graphemes
  • 20 code points
  • 20 bytes
  • 20 UTF-16 units
What it breaks
The sixty-first second exists in the standard and in no common date type.
What a correct application does
Rejected with a message, or clamped visibly - not accepted and silently shifted.

Start of the Unix epoch

time-zones/epoch-zero-time
1970-01-01T00:00:00Z 1970-01-01T00:00:00Z
  • 20 graphemes
  • 20 code points
  • 20 bytes
  • 20 UTF-16 units
What it breaks
The zero point of the most common timestamp; indistinguishable from "no time set" in many interfaces.
What a correct application does
Displayed as a real moment, distinct from an empty field.

Last second of 2099

time-zones/far-future
2099-12-31T23:59:59Z 2099-12-31T23:59:59Z
  • 20 graphemes
  • 20 code points
  • 20 bytes
  • 20 UTF-16 units
What it breaks
Far dates break retention rules, schedulers and columns with a narrower range than the interface.
What a correct application does
Accepted up to a stated range, enforced on both sides.

Timestamp eleven hours behind UTC

time-zones/negative-offset
2026-09-06T14:32:07-11:00 2026-09-06T14:32:07-11:00
  • 25 graphemes
  • 25 code points
  • 25 bytes
  • 25 UTF-16 units
What it breaks
An offset far from the server's own; sorting by local time produces a different order than sorting by moment.
What a correct application does
Sorted and compared by moment, not by the text of the timestamp.

Time without a date

time-zones/time-only
14:32 14:32
  • 5 graphemes
  • 5 code points
  • 5 bytes
  • 5 UTF-16 units
What it breaks
A time without a date; storing it against today's date changes its meaning tomorrow.
What a correct application does
Stored as a time of day, or the date requested explicitly.