use strict; use warnings; use feature qw/ say state /; use DateTime::Format::Strptime; for ( ) { chomp; say sprintf '%-24s: %s', $_, validate( $_ ) ? 'OK' : 'Not OK'; } sub validate { state $parser = DateTime::Format::Strptime->new( pattern => '%F %T.%3N', on_error => 'croak', ); return eval { $parser->parse_datetime( @_ ); 1 }; } __DATA__ 2017-01-29 11:30:07.370 2017-01-29 11:30:07.000 2017-01-32 11:30:07.370 2017-01-29 11:30:07 foo bar