Ruby stdlib date can parse non-existent date with year 0
Ruby date lib can parse date with year 0
 pry(main)> shitdate=Date.strptime('0000-01-07','%Y-%m-%d')
=> #<Date: 0000-01-07 ((1721064j,0s,0n),+0s,2299161j)>
 pry(main)> shitdate.year
There is no year 0 in gregorian and julian calendar between 1 BC and 1 AD
It should raise ArgumentError like it do when month/day number is 0.
#2 [ruby-core:75866] Updated by noahgibbs (Noah Gibbs) over 1 year ago
Ah! It would be hard to "fix" Ruby's stdlib to not allow dates to have a 0 year in general, because of code like the Date test that can use a Date as a delta. That is:
class DateSub < Date; end d2 = d - 1 assert_instance_of(DateSub, d2)
Things like DateSub can clearly have a 0 year, because that implies that the difference in years is 0, not that it's the year 0.
I think it still makes sense to fix strptime with the fix above. But I don't think Date or DateTime should disallow the year 0 in general.