2

日付値を含む 2 つの Perl 文字列変数があります。str1 変数の日付値が str2 値の 1 日前かどうかを確認したい。どうすれば確認できますか?str2 の 1 日前でない場合は、エラー メッセージを出力する必要があります。

 $str1="20120704"
 $str2="20120705
4

3 に答える 3

5

標準の 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
于 2012-07-05T10:11:13.323 に答える
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";
}
于 2012-07-05T07:21:03.303 に答える
1

これらの日付スタンプは ISO 8601 形式であるため、それらを比較するには単純な文字列比較で十分です。

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

これは ISO 8601 形式の特定の機能であり、必ずしも他の形式の日付スタンプには適用されません。具体的には、年/月/日の順にフィールドが必要であり、月と日のフィールドには 0 が埋め込まれていることに注意してください。

于 2012-07-05T11:04:31.363 に答える