匹配时间perl +1分钟?

时间:2014-04-10 14:33:48

标签: regex perl time

我有以下代码,我在这里阅读时间值,并将与当前时间值进行比较。被拉的时间格式是hh:mm:ss,我比较的时间格式是hh:mm。现在我有它,所以如果$ flow的值为00:14:09,$ time只有在00:14才匹配。如果超过+1分钟,我希望它也能匹配,例如$ flow值是00:15:35。有人可以帮我解决这个问题吗?

感谢。

if ($flow[$flow_count] =~ /$time[$count]/)

示例数据:

$flow[0] = Dec 2 00:15:35 some data
$time[0] = 00:14

2 个答案:

答案 0 :(得分:0)

如果您的数据是:

$flow[0] = Dec 2 00:00:14 some data

你会有误报

一种可能的解决方案

$time[$count]=~/\d{2}\:(\d{2})/;
($min,$hour)=$2,$1;
$flow[$flow_count] =~/(\d{2})\:(\d{2})\:\d{2}/;
if ( ( $1==$hour && ($2==$min || $2==$min+1) ) || ($1==$hour+1 && $2==00 && $min==59  ) )

答案 1 :(得分:0)

如前所述,没有年份或时区信息,这种类型的测试无法完成。 DST边界会有例外,事情将无法匹配。

但是,如果这不是你的问题,那么使用Time::PieceTime::Seconds可以相当简单地做到这一点:

use strict;
use warnings;

use Time::Piece;
use Time::Seconds;

my $str = 'Dec 2 00:15:35 some data';
my $test = '00:14';

my $time = Time::Piece->strptime("$test", "%H:%M");

my $time_re = join '|', map {($time + $_)->strftime("%H:%M:")} (0, ONE_MINUTE);

if ($str =~ $time_re) {
    print "Match found\n";

} else {
    print "Not a match\n";
}

注意:因为我们只是指定一个时间,所以一切都在1970年1月1日UTC完成