use warnings; use strict; use DateTime::Format::Strptime; my $strp = DateTime::Format::Strptime->new( pattern => '%F %H:%M %P %Z', on_error => 'croak', zone_map => { CST => '-0600', CDT => '-0500' } ); for my $str ('2020-03-08 1:23 AM CST','2020-03-08 1:23 AM CDT') { print $str, " = "; my $dt = $strp->parse_datetime($str); $dt->set_time_zone('UTC'); print $dt->strftime('%F %T %Z'), " = "; $dt->set_time_zone('America/Chicago'); print $dt->strftime('%F %T %Z'), "\n"; } __END__ 2020-03-08 1:23 AM CST = 2020-03-08 07:23:00 UTC = 2020-03-08 01:23:00 CST 2020-03-08 1:23 AM CDT = 2020-03-08 06:23:00 UTC = 2020-03-08 00:23:00 CST