Perl date функция / модуль, способный понимать полные несокращенные месяцы - PullRequest
1 голос
/ 06 февраля 2011

Допустим, я читаю в строке откуда-то, которая содержит дату, и ее формат даты не сокращает месяц.Есть ли модуль, который может обрабатывать чтение и вывод в тот формат, который я выберу?Я быстро просмотрел CPAN, и каждый модуль даты, на который я смотрел, не подходил для сокращения месяца.

Спасибо за любую помощь

РЕДАКТИРОВАТЬ: В качестве примера, скажему нас есть такая строка;«2 февраля 1988 года».Теперь мы хотим преобразовать его в «1988-02-02» (ГГГГ-ММ-ДД).

Ответы [ 4 ]

6 голосов
/ 06 февраля 2011

Вы можете использовать модуль ядра Time :: Piece и его метод strptime.Формат описан на man-странице strftime , для полного названия месяца есть %B спецификатор формата:

use Time::Piece;
my $dt = Time::Piece->strptime("2 February 1988", "%d %B %Y");
print $dt->ymd,"\n";
4 голосов
/ 06 февраля 2011

Использование DateTimeX::Easy:

Программа

my $dt = DateTimeX::Easy->new('2 February 1988');
print $dt->date();

Вывод

1988-02-02
1 голос
/ 06 февраля 2011

Я всегда использую Date :: Parse, так как он может автоматически определять формат ввода и преобразовывать его в unix time с помощью "str2time". Если я затем хочу отформатировать дату, я использую "strftime".

use Date::Parse;
use POSIX 'strftime';

$unix_time = str2time "2 February 1988";
print strftime "%Y-%m-%d", localtime $unix_time;
0 голосов
/ 06 февраля 2011

Вы должны написать свой собственный модуль преобразования.

Вы можете использовать хеши для быстрого преобразования, например:

my% month = ("Jan" => "01", "Фев" => "02", "Мар" => "03", "Apr" => "04", "Май" => "05", "Jun" => "06", "Jul" => "07", "Aug" => "08", "Sep" => "09", "Oct" => "10", "Nov" => "11", "Dec" => "12");

my% day = ("Sun" => "01", "Пн" => "02", "Вт" => "03", "Вен" => "04", "Чт" => "05", "Пт" => "06", "Sat" => "07");

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