The glitch starts with the existence of “year 0”: there's no such thing in the Christian calendars, it goes straight from 1BC to 1AD. (Zero didn't even exist in the 6th century when the Anno Domini epoch was set).
If there was a year 0, we would still be in the 21st century. It would just have started 1 year earlier, in 2000 instead of 2001:
0 – 99: 1st century
100 – 199: 2nd century
...
1900 – 1999: 20th century
2000 – 2999: 21st century
Although I think centuries are usually treated as starting in years ending in 0 anyway, in casual settings. Most people were certainly happy to celebrate "the new millennium" at the start of the year 2000.
In a zero based array type language. In pascal I believe arrays can start where you want them to as in "array[-10..10] of integer". It's been a while though.
There is no year zero. Trying to compute with one is almost certainly an error. Trying to work with it is like dividing by zero - it does not make sense.
The year "1" was originally a Julian Date. Using a Gregorian Date before the calendar was introduced is almost certainly an error.
For ancient things, use Before Present, where I believe Present is defined to be sometime in 1950 or there about. For "modern" things (varying definitions of modern) use a sensible format/calendar that works in your database.
> The first century starts at 0001-01-01 00:00:00 AD, although they did not know it at the time. This definition applies to all Gregorian calendar countries. There is no century number 0, you go from -1 century to 1 century. If you disagree with this, please write your complaint to: Pope, Cathedral Saint-Peter of Roma, Vatican.