It looks like you've already identified your issue. Right now, it's EDT which is -04:00, not -05:00. It looks like your wmic system call is lying about time zone, and I'll bet that [localtime](8) returns 1, a.k.a. daylight savings. One way to correct your code would be to change your localtime call to
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday, $isdst) = localtime(
+);
and then modify your timestamp code to
my $Date = sprintf("%s, %02d %3s %04d %02d:%02d:%02d %5s",$dayofweek[$
+wday],$mday,$monthnames[$mon],$year,$hour - $isdst,$min,$sec,$timezon
+e);
Or you can try to figure out how to get a correct answer from
wmic
#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.