use Time::Local; $start = '2004-11-15T18:59:52.863Z'; $end = '2004-11-15T19:09:52.972Z'; @parts = $start =~ /^(.{4})-(.{2})-(.{2})T(.{2}):(.{2}):(.{2})\.(.{3})Z$/; $start_secs = pop(@parts) / 1000; $start_secs += timegm reverse @parts; @parts = $end =~ /^(.{4})-(.{2})-(.{2})T(.{2}):(.{2}):(.{2})\.(.{3})Z$/; $end_secs = pop(@parts) / 1000; $end_secs += timegm reverse @parts; $diff = $end_secs - $start_secs; printf("%.3f$/", $diff); # 600.109