Use below regular expression to validate if given string is in specific date format.
select COUNT(1) from DUAL where regexp_like('12-JUN-2016 23:34:59','^(\d){2}-[A-Z]{3}-(\d){4}\s(\d){2}:(\d){2}:(\d){2}$')
1
select COUNT(1) from DUAL where regexp_like('121-JUN-2016 23:34:59','^(\d){2}-[A-Z]{3}-(\d){4}\s(\d){2}:(\d){2}:(\d){2}$')
0
=======================
^ : Starting String
$ : Ending String
{n} : Execute last rule n time
[A-Z] : All CAP Alphabets check
\d : digit check
\s : Space
select COUNT(1) from DUAL where regexp_like('12-JUN-2016 23:34:59','^(\d){2}-[A-Z]{3}-(\d){4}\s(\d){2}:(\d){2}:(\d){2}$')
1
select COUNT(1) from DUAL where regexp_like('121-JUN-2016 23:34:59','^(\d){2}-[A-Z]{3}-(\d){4}\s(\d){2}:(\d){2}:(\d){2}$')
0
=======================
^ : Starting String
$ : Ending String
{n} : Execute last rule n time
[A-Z] : All CAP Alphabets check
\d : digit check
\s : Space