Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Year "0" doesn't exist; it goes from 1 BC to 1 AD. RFC 3339 is somewhat unclear if this should be allowed, at least in my reading of it: > This document defines a [..] representation of dates and times using > the Gregorian calendar. "Gregorian calendar" has no "year zero", so it should be forbidden. But also: > All dates and times are assumed to be in the "current era", > somewhere between 0000AD and 9999AD. So meh. Practically speaking, supporting this across the board is rather tricky. Python's datetime has no way to represent this (other than None, maybe? Ugh.), PostgreSQL doesn't support it, Go's time.Time behaves oddly (e.g. IsZero() is false, which is rather surprising), etc. ISO 8601 defines year 0 as "1 BC", which is even worse since most datetime implementations don't really do BC dates. Just forbidding it is by far the easiest for everyone; for implementations with a datetime that supports it, it's just a single `if`, and for e.g. Python nothing needs to be done. The only potential downside is that people may have `d = 0000-01-01`. We already broke compatibility "for sanity" by disallowing table overrides. The alternative is making it implementation-dependent. Meh. RFC 3339 is supposed to be a "ISO 8601, without obscure edge cases"; this seems to fit with the intended purpose.
- Loading branch information