Now might also be a good time to look at, for example, Date::Calc::Object, and the many other date/time routines available on CPAN.
I particularly like this one because, as the name implies, it introduces the notion of a “date/time object.” Which just turns out to be an extremely useful notion to have. A date value, regardless of how you introduced it to the system, becomes “a thing” that you can query and manipulate and “do things with” in a very natural way.
Every kind of date/time manipulation can be found somewhere in CPAN ... even for archaic calendars. (It’s great fun to go poking around in there to see what you find.)