Использование Date :: Manip - один из вариантов:
use warnings;
use strict;
use Date::Manip;
my $date = new Date::Manip::Date;
while (<DATA>) {
chomp;
my $error = $date->parse($_);
die "Can't parse '$_': ${error}\n"
if $error;
print $date->printf("$_: %s %O\n");
}
exit 0;
__DATA__
today
yesterday
tomorrow
01-02-2019
01/02/2019
23:12:01 01/03/2019
2019-03-02
Тестовый прогон:
$ perl dummy.pl
today: 1550354400 2019-02-17T00:00:00
yesterday: 1550268000 2019-02-16T00:00:00
tomorrow: 1550440800 2019-02-18T00:00:00
01-02-2019: 982688400 2001-02-20T19:00:00
01/02/2019: 1546380000 2019-01-02T00:00:00
23:12:01 01/03/2019: 1546549921 2019-01-03T23:12:01
2019-03-02: 1551477600 2019-03-02T00:00:00
Форматы даты могут быть неоднозначными, например,сравните в приведенном выше примере 01-02-2019
против 01/02/2019
.Хотя 2-й выглядит хорошо, вы должны спросить: MM/DD/YYYY
(по-американски, как он был проанализирован) или DD/MM/YYYY
(по-европейски)?
Еще одна вещь, которую вы всегда должны учитывать: есливходной формат не включает часовой пояс, в каком часовом поясе мне нужно его интерпретировать?
Пожалуйста, изучите подробную документацию для подробностей.