Я намагаюся перевірити, чи є змінною $test
містить дійсний формат дати, намагаючись зробитипроаналізуйте його з Date :: Manip. Він працює, як очікувалося, коли формат "РРР / ММ / ДД". Якщо я зміню формат на "DD / MM / YYYY" (мій $ test = "20/4/2012"), він не працює належним чином. Я спробував функцію конфігурації для встановлення формату дати у Великобританії, але все-таки не зробив "t робота.
use Date::Manip qw(ParseDate );
my $test="20_4_2012";
#my $test="2012_4_20";
$test =~ s/_///g;
print $test;
$date=ParseDate($test);
if(!$date) {
print "baddate : $daten";
}
else {
print "Guddate: $daten";
}
Відповіді:
1 для відповіді № 1Це можна зробити за допомогою Time::ParseDate
що дозволяє вказати UK
в ньому аргументи до функції парсера.
use Time::ParseDate;
my $test="20/4/2012";
$time = parsedate($test, UK => 1);
1 для відповіді № 2
Як виглядав ваш виклик функції конфігурації? Я можу змусити ваш сценарій працювати, додавши це:
Date_Init("DateFormat=non-US");
перед ParseDate. (А також додавання Date_Init
до списку імпорту в use
)
1 для відповіді № 3
Сподіваємось, ви вже знайшли своє рішення :-)
Але на користь того, хто проходить, шукаючи інструменти для розбору дат для Perl, я настійно рекомендую основний модуль Time::Piece
- це шалено добре розробити те, що ви мали на увазі з будь-якого старого рядка дати.
Справжня відповідь на ваше конкретне запитання - звичайно, "це залежить від того, що ви маєте на увазі під собою".