我有两个包含日期值的 Perl 字符串变量。我想检查 str1 变量日期值是否比 str2 值早 1 天。我怎样才能检查它?如果它在 str2 之前没有 1 天,那么我需要打印一条错误消息。
$str1="20120704"
$str2="20120705
我有两个包含日期值的 Perl 字符串变量。我想检查 str1 变量日期值是否比 str2 值早 1 天。我怎样才能检查它?如果它在 str2 之前没有 1 天,那么我需要打印一条错误消息。
$str1="20120704"
$str2="20120705
使用标准 Time::Piece 模块
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Time::Piece;
my $format = '%Y%m%d';
while (<DATA>) {
chomp;
my ($str1, $str2) = split;
my $dt1 = Time::Piece->strptime($str1, $format);
my $dt2 = Time::Piece->strptime($str2, $format);
print "$str1 / $str2: ";
if ($dt2->julian_day - $dt1->julian_day == 1) {
say "ok";
} else {
say "not ok";
}
}
__END__
20120704 20120705
20120630 20120701
use Date::Parse;
$str1="20120704";
$str2="20120705";
@lt1 = localtime(str2time($str1));
@lt2 = localtime(str2time($str2));
if ($lt1[7] + 1 != $lt2[7]) {
die "$str2 < $str1";
}
由于这些日期戳采用 ISO 8601 格式,因此简单的字符串比较就足以比较它们。
if( $str1 gt $str2 ) {
# $str2 represents a later date than $str1
}
这是 ISO 8601 表单的一个特定功能,不一定适用于其他格式的日期戳。特别注意,它需要按年/月/日顺序排列的字段,并且月和日字段具有 0 填充。