use POSIX qw( strftime ); use Time::Local qw( timelocal ); # Pretend we're executing at 12:00:05 am on Mar 12th, 2008. # The DST time zone change occured on Mar 9th, 2008 here. my $time = timelocal(5,0,0,12,3-1,2008); my $offset = 7; my $date = strftime "%Y-%m-%d", localtime($time - $offset * 86400); print("Expecting: 2008-03-05\n"); print("Received: $date\n");