use warnings; use strict; use DateTime; use DateTime::Format::Strptime; my $str = "03/13/2016 09:59:59"; my $strp = DateTime::Format::Strptime->new( pattern => '%m/%d/%Y %H:%M:%S', time_zone=>'UTC', on_error=>'croak'); my $dt = $strp->parse_datetime($str); print $dt->strftime('%Y-%m-%d %H:%M:%S %Z')," is ", $dt->clone->set_time_zone('America/Los_Angeles') ->strftime('%Y-%m-%d %H:%M:%S %Z'),"\n"; $dt->add(seconds=>1); print $dt->strftime('%Y-%m-%d %H:%M:%S %Z')," is ", $dt->clone->set_time_zone('America/Los_Angeles') ->strftime('%Y-%m-%d %H:%M:%S %Z'),"\n"; __END__ 2016-03-13 09:59:59 UTC is 2016-03-13 01:59:59 PST 2016-03-13 10:00:00 UTC is 2016-03-13 03:00:00 PDT #### use warnings; use strict; use DateTime; use DateTime::Format::Strptime; my $str = "03/13/2016 02:00:00"; my $strp = DateTime::Format::Strptime->new( pattern => '%m/%d/%Y %H:%M:%S', time_zone=>'floating', on_error=>'croak'); my $dt = $strp->parse_datetime($str); if ($dt->year==2016 && $dt->month==3 && $dt->day==13 && $dt->hour==2) { # any minute and second $dt->add(hours=>1); } $dt->set_time_zone('America/Los_Angeles'); print $dt->strftime('%Y-%m-%d %H:%M:%S %Z'),"\n"; __END__ 2016-03-13 03:00:00 PDT