#!/usr/bin/perl use strict; use warnings; use Date::Manip; use feature 'say'; my $DEFAULT_TIME_ZONE = "GMT"; my @dates = ( "0618-01-01 00:00:00", # intpreted as 2518-01-01 "1066-10-14 00:00:00", "1899-06-24 09:44:00", "1900-12-31 23:59:59", "1901-01-01 00:00:00", "1960-12-31 23:59:59", "1968-12-31 23:59:59", "1969-01-01 00:00:00", "1969-12-31 23:59:59", "1970-01-01 00:00:01", "2000-01-01 00:00:00", "2018-02-20 00:00:00", "20180220", "02/20/2018", "02/20/18", # interpreted as 1918-02-20 "2018-02-20", "2238-02-20 09:44:00" ); # define format for printf statements say "Well formatted date Variable input date"; say UnixDate( ParseDate($_), '%Y-%m-%d %T' ) . qq{ $_} for (@dates); exit 0; __END__ $ format_date.pl Well formatted date Variable input date 0618-01-01 00:00:00 0618-01-01 00:00:00 1066-10-14 00:00:00 1066-10-14 00:00:00 1899-06-24 09:44:00 1899-06-24 09:44:00 1900-12-31 23:59:59 1900-12-31 23:59:59 1901-01-01 00:00:00 1901-01-01 00:00:00 1960-12-31 23:59:59 1960-12-31 23:59:59 1968-12-31 23:59:59 1968-12-31 23:59:59 1969-01-01 00:00:00 1969-01-01 00:00:00 1969-12-31 23:59:59 1969-12-31 23:59:59 1970-01-01 00:00:01 1970-01-01 00:00:01 2000-01-01 00:00:00 2000-01-01 00:00:00 2018-02-20 00:00:00 2018-02-20 00:00:00 2018-02-20 00:00:00 20180220 2018-02-20 00:00:00 02/20/2018 2018-02-20 00:00:00 02/20/18 2018-02-20 00:00:00 2018-02-20 2238-02-20 09:44:00 2238-02-20 09:44:00