Как я могу сравнить две даты в формате с помощью Perl:Как сравнить даты с помощью perl?
"dd mon yyyy hh:mm:ss GMT"
.: 12 например May 2013 10:10:20 GMT
Я не могу установить любые внешние модули Perl. Пожалуйста, совет.
Как я могу сравнить две даты в формате с помощью Perl:Как сравнить даты с помощью perl?
"dd mon yyyy hh:mm:ss GMT"
.: 12 например May 2013 10:10:20 GMT
Я не могу установить любые внешние модули Perl. Пожалуйста, совет.
Если у вас есть Perl v5.9.5 или новее, вы можете использовать основной модуль Time::Piece
. Вот простая демонстрация соответствующих операций
Преобразование даты из строки в Time::Piece
объекта
my $date = "12 May 2013 10:10:20 GMT";
my $tp1 = Time::Piece->strptime($date, "%d %B %Y %T %Z");
my $tp2 = ...
Найти разницу между 2 раза
my $diff = $tp2 - $tp1;
, который дает вам Time::Seconds
объект ,
Наконец, отобразите разницу в единицах секунд (или что-то еще).
print $diff->seconds;
Или вы могли бы просто сравнить два напрямую (спасибо stevenl)
$tp2 > $tp1
Ссылки:
Time::Piece->strptime
$tp->strftime
aAbBcdHIjmMpSUwWxXyYZ%
безопасны, если вы используете не-Unix системы (например, Window Perl не поддерживает спецификатор %e
).Помимо выполнения вычитания, вы можете сделать прямое сравнение: '$ tp1 <$ tp2' – stevenl
@stevenl, спасибо за головы. Добавлена информация к сообщению. – doubleDown
Предполагая, что вы имеете в виду perl 5.9.5 (эффективно perl 5.10) здесь; «perl 5.95» неверен. – hobbs
Один из самых популярных модулей даты - DateTime. Он имеет a FAQ, который может помочь вам приступить к работе.
sub to_comparable {
my ($date) = @_;
my ($H,$M,$S,$d,$m,$Y) = $date =~ m{^([0-9]{2}):([0-9]{2}):([0-9]{2}), ([0-9]{2})/([0-9]{2})/([0-9]{4})\z}
or die;
return "$Y$m$d$H$M$S";
}
if (to_comparable($date2) < to_comparable($date1)) {
...
} else {
...
}
Преобразование даты в формат yyyymmddhhmmss
(например, 20130512101020
) и сравнить как строки. Тем не менее, обработка часовых поясов может оказаться сложной без модулей.
«Я не могу установить любые внешние модули Perl» - это [не очень вероятно] (http://www.perlmonks.org/?node=693828) – Quentin
«Я не могу установить любой внешний Perl модулей "- тогда это первая проблема, которую вы должны решить. Если вы не можете устанавливать модули из CPAN, вы не используете большую часть возможностей Perl.Фиксирование должно быть вашим наивысшим приоритетом. –
Если у вас есть собственный код Perl в системе, вы можете установить модуль Perl. Либо через [local :: lib] (http://p3rl.org/local::lib), либо просто скопируйте их с помощью своего кода. –