我有以下代码,我在这里阅读时间值,并将与当前时间值进行比较。被拉的时间格式是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
答案 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::Piece
和Time::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完成