Michael G Schwern wrote: >It does present a problem... how do you reliably say "same date next year"?
"Same date next year" is exactly what the original poster asked DateTime for, by using the set_year method, and he got the correct answer: "there isn't one". Presumably what he actually wanted was "a year later", which is a different question. DateTime does support it: $dt->add(years=>1); In the awkward case, it advances to March 1st: $ perl -MDateTime -lwe ' $dt=DateTime->new( year=>2012, month=>2, day=>29, hour=>12, minute=>0, second=>0, time_zone=>"UTC", ); $dt->add(years=>1); print $dt->iso8601; ' 2013-03-01T12:00:00 Of course, it has the downside that year addition isn't associative: advancing from a February 29th by four years gives a different result from advancing by one year four times. >You can't add 365 days because that falls afoul of the leap year problem. You can ask DateTime for that too: $dt->add(days=>365); It's nicer, in that day addition *is* associative. Of course, a quarter of the time (when the 365 days spans a leap day), the 365-days-later won't be the same-date-next-year. Is that what you mean by the "leap year problem"? -zefram