So, the moral of this story is let the system do the work - why code your own time stuff?
$date=`date`; *
... and then fiddle with it.
Assuming date works correctly.
Back at the turn of 2000, where I worked (then), we had a few legacy apps that were dependent on older versions of Unix. On those systems, the date command started displaying the year as 19100. This was because the systems were old enough that the code (in the date command) that converted the epoch time still didn't account for extracting more than 2 digits worth of year from the epoch time. And, of course, the year was formatted with "19%d", thus the "19100" result.
So, whatever command - or CPAN module - you use, make sure it actually works for your needs.