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.
> Using a Gregorian Date before the calendar was introduced is almost certainly an error.
It's just an extrapolation; using the calendar being used at the considered time would be meaningless for us, e.g. the short-lived french republican calendar [1].
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.