Turns Forgejo's timestamp strings into instants, sentinels included.
Forgejo renders times as RFC-3339 with an explicit offset — "2022-11-26T18:56:24+01:00" on golden/user/user-single.json, "2026-08-01T22:12:04+02:00" on golden/repository/repo-single.json.
It also has a second spelling for "never", which the golden-fixture manifest counts: User.last_login (104 occurrences), Repository.mirror_updated (41) and CommitMeta.created (4) come back as the Go zero time "0001-01-01T00:00:00Z" rather than null, and Repository.archived_at comes back as the Unix epoch ("1970-01-01T01:00:00+01:00") on repositories that were never archived. Both are absence wearing a costume, and both are folded into None here so no caller has to know the trick.
'''Never throws.''' Answers None for a blank string, for anything that is not RFC-3339 with an offset, and for any instant at or before the Unix epoch — see the sentinels above. The epoch boundary means this cannot represent a genuine pre-1970 timestamp; Forgejo has no field that could carry one, since every timestamp it emits describes an event on a Git forge.
Two parsers sit behind this. fixedLayout reads the one shape Forgejo actually sends, character by character, with no formatter and no intermediate date objects. Anything it does not recognise — a lowercase t, an offset carrying seconds, a year outside four digits, or a value that is simply not a timestamp — falls through to java.time.OffsetDateTime.parse, so the set of strings this accepts is exactly what it has always been, and only the speed of the common case changes.