Где находится ParseDate
? Это Time::ParseDate
?
Я предпочитаю Time::Piece. . Это был стандартный модуль Perl, так как 5.10, и я могу указать формат, что дата в плюс, Time::Piece
является объектно-ориентированным:
use strict; # Lets you know when you misspell variable names
use warnings; # Warns of issues (using undefined variables
use feature qw(say);
use Time::Piece;
my $time1 = "21-01-2014";
my $time2 = "01-09-2014"; #Assuming this is Sept, 1, 2014
my $time_obj1 = Time::Piece->strptime("$time1", "%d-%m-%Y");
my $time_obj2 = Time::Piece->strptime("$time2", "%d-%m-%Y");
if ($time_obj1 < $time_obj2) { # Comparing number of days since "the epoc"
say $time_obj1->dmy . " is older than " . $time_obj2->dmy;
}
else {
say $time_obj2->dmy . " is older than " . $time_obj1->dmy;
}
Если вы не хотите создавать объекты, вы можете просто использовать значения, возвращаемые Time::Piece->strptime
:
if (Time::Piece->strptime("$time1", "%d-%m-%Y")
< Time::Piece->strptime("$time2", "%d-%m-%Y")) {
say "$time1 is older than $time2";
}
else {
say "$time2 is older than $time1";
}
строка %d-%m-%Y
формат вашей даты. (И вы должны проверить возвращаемое значение Time::Piece->strptime
, чтобы убедиться, что у вас есть действительный объект Time::Piece
. Я не делал этого здесь для простоты).
Вы можете найти коды в формате процента для дат либо в странице Справочника date или на странице Справочника strftime.
Откуда вы получаете функцию 'ParseDate'? Определяется ли это в стороннем модуле или в вашем собственном коде? – ThisSuitIsBlackNot
Предполагая, что мы говорим о [Time :: ParseDate] (http://search.cpan.org/~muir/Time-modules-2003.0211/lib/Time/ParseDate.pm), я хочу отметить, что он анализирует даты как 'DD/MM/YYYY' **", только если Великобритания, или недействительный mm/dd/yyyy "**. Возможно, он читает вторую дату 9 января, в американском стиле. –
Двадцать первый день января 2014 года приходит перед первым днем сентября того же года. Таким образом, ваше условие 'if' _should_ терпит неудачу. –