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.
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- 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- 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.