Как сказал Эрик, это связано с тем, что месяцы указаны в диапазоне 0-11.
Это обычное поведение - то же самое верно для результатов Perl из localtime () и, возможно, многих других языков.
Это, вероятно, первоначально унаследовано от вызова Unix localtime ().
(делай "man localtime")
Причина в том, что дни / годы являются их собственными целыми числами, а месяцы (как #) являются индексами массива, который в большинстве языков - особенно в C, где основной вызов реализован в Unix - начинается с 0.