Модуль Perl, который автоматически определяет форматы времени?(и может конвертировать) - PullRequest
0 голосов
/ 17 февраля 2019

Я создаю какой-то движок, получающий данные из разных источников, имеющих разные форматы даты (например, MM-DD-YYYY, HH24:MM:SS MM/DD/YYYY, YYYY-MM-DD, Epoch и т. Д.), И я хочу проанализировать их все и преобразовать эти даты /форматы времени к определенному (например, только YYYY-MM-DD).

Я начинал кодировать это и делать огромный хэш со многими регулярными выражениями предопределенных форматов, которые я получу (около 20), нотогда я думал ...

Знаете ли вы какой-нибудь модуль, который делает это обнаружение автоматически?Т.е. когда мы не указываем формат, поскольку мы его не знаем.

1 Ответ

0 голосов
/ 17 февраля 2019

Использование 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 (по-европейски)?

Еще одна вещь, которую вы всегда должны учитывать: есливходной формат не включает часовой пояс, в каком часовом поясе мне нужно его интерпретировать?

Пожалуйста, изучите подробную документацию для подробностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...