Нека кажем, че чета от низ от някъде товасъдържа дата и форматът на датата не съкращава месеца. Има ли модул, който може да се справи с четенето му и след това да го изведе в избрания от мен формат? Бързо погледнах през CPAN и всеки модул за дата, който разгледах, изглежда не може да побере несъкратен месец.
Благодаря за всяка помощ
РЕДАКТИРАНЕ: Като пример кажете, че имаме низ като този; „2 февруари 1988 г.“. Сега искаме да го преобразуваме в "1988-02-02" (ГГГГ-ММ-DD).
Отговори:
4 за отговор № 1Използвайки DateTimeX::Easy
:
програма
my $dt = DateTimeX::Easy->new("2 February 1988");
print $dt->date();
продукция
1988-02-02
6 за отговор № 2
Можете да използвате ядрото Време :: Piece модул и неговото strptime
метод. Форматът е описан на страница на strftime man, за пълномесечно име има %B
спецификатор на формата:
use Time::Piece;
my $dt = Time::Piece->strptime("2 February 1988", "%d %B %Y");
print $dt->ymd,"n";
1 за отговор № 3
Винаги използвам Date :: Parse, тъй като той може автоматично да открие входния формат и да го конвертира в unix време с "str2time". Ако след това искам да форматирам датата, използвам "strftime".
use Date::Parse;
use POSIX "strftime";
$unix_time = str2time "2 February 1988";
print strftime "%Y-%m-%d", localtime $unix_time;
-1 за отговор № 4
Трябва да напишете свой собствен модул за преобразуване.
Можете да използвате хешове, за да направите бързи преобразувания по следния начин:
моят% месец = ("януари" => "01", "Feb" => "02", "Март" => "03", "Април" => "04", "Май" => "05", "Jun" => "06", "Юли" => "07", "Август" => "08", "Септември" => "09", "Oct" => "10", "Ноември" => "11", "Dec" => "12");
my% day = ("Sun" => "01", "Понеделник" => "02", "Вторник" => "03", "Wen" => "04", "Чет" => "05", "Fri" => "06", "Сб" => "07");