#!/usr/bin/perl -w use strict; use Time::Local 'timegm'; my $stamp = '20150619-17:30:43.616'; my @nn = $stamp =~ /([.][0-9]+|[0-9]{2})/g; my $f = pop @nn; # Fractional seconds my $cc = shift @nn; # Century my $yy = shift @nn; # Year $nn[0] -= 1; # Make month 0-based (ugh) unshift @nn, "$cc$yy"; # Put 4-digit year back in front. $ENV{TZ} = "US/Eastern"; @nn = localtime( timegm( reverse @nn ) ); $nn[4]++; # Make month 1-based (ugh) $nn[5] += 1900; # (ugh) $stamp = sprintf "%d%02d%02d-%02d:%02d:%02d%s", @nn[reverse 0..5], $f; print "$stamp\n"; __END__ 20150619-13:30:43.616