如何比较Perl中的日期字符串

时间:2012-07-05 07:16:14

标签: perl

我有两个包含日期值的Perl字符串变量。我想检查str1变量日期值是否是str2值之前的1天。我怎么检查它?如果它在str2之前没有1天,那么我需要打印一条错误消息。

 $str1="20120704"
 $str2="20120705

3 个答案:

答案 0 :(得分:4)

use Date::Parse;
$str1="20120704";
$str2="20120705";
@lt1 = localtime(str2time($str1)); 
@lt2 = localtime(str2time($str2));
if ($lt1[7] + 1 != $lt2[7]) {
  die "$str2 < $str1";
}

答案 1 :(得分:4)

使用标准的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

答案 2 :(得分:1)

由于这些日期戳是ISO 8601格式,因此只需进行简单的字符串比较就可以比较它们。

if( $str1 gt $str2 ) {
   # $str2 represents a later date than $str1
}

这是ISO 8601表单的特定功能,不一定适用于其他格式的日期戳。请特别注意,它需要年/月/日顺序中的字段,并且该月和日字段具有0填充。