Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Perl中比较日期字符串_Perl - Fatal编程技术网

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

如何在Perl中比较日期字符串,perl,Perl,我有两个包含日期值的Perl字符串变量。我想检查str1变量日期值是否比str2值早1天。我怎么检查?如果在str2之前没有1天,那么我需要打印一条错误消息 $str1="20120704" $str2="20120705 使用日期::解析; $str1=“20120704”; $str2=“20120705”; @lt1=本地时间(str2time($str1)); @lt2=本地时间(str2time($str2)); 如果($lt1[7]+1!=$lt2[7]){ 模具“$str2s

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

 $str1="20120704"
 $str2="20120705
使用日期::解析;
$str1=“20120704”;
$str2=“20120705”;
@lt1=本地时间(str2time($str1));
@lt2=本地时间(str2time($str2));
如果($lt1[7]+1!=$lt2[7]){
模具“$str2<$str1”;
}

使用标准时间::计件模块

#!/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
#/usr/bin/perl
严格使用;
使用警告;
使用5.010;
使用时间::件;
我的$format='%Y%m%d';
而(){
咀嚼;
我的($str1,$str2)=拆分;
my$dt1=Time::Piece->strtime($str1$format);
my$dt2=Time::Piece->strtime($str2$format);
打印“$str1/$str2:”;
如果($dt2->julian_day-$dt1->julian_day==1){
说“好”;
}否则{
说“不好”;
}
}
__结束__
20120704 20120705
20120630 20120701

因为这些日期戳是ISO 8601格式的,所以一个简单的字符串比较就足以对它们进行比较

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

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

do{$str='2'.$.'10';如果eval($str),则打印$str;如果(qw(<>==!=)则打印“\n”}只需更改日期的
$str
值;)任务是检查日期是否是前一天,而不是前一天。非常感谢您提供的信息。当我编译的时候,我得到了一个错误:无法精细解析.pm。我应该从哪里下载perlmodule@Arav:来自CPAN。但它可能已经存在于您的操作系统中。然后,您只需使用apt-get安装它即可。非常感谢您提供的信息。我对朱利安·戴不太了解。使用朱利安日安全吗?它会在闰年结束时产生问题吗?使用5.010意味着什么?为了我们的目的,你可以把Julian Day看作是一个数字(目前在2500000岁以下),每天增加一个数字。这正是解决这个问题所需要的
Use5.010
的意思是“至少需要Perl5.10.0来运行这个程序(因为它使用
比如说
)。我希望您没有使用比这更旧的模块。非常感谢您提供的信息。我的系统中当前安装了以下时间的perl模块。是否有可以重用的模块,而不是安装任何新的perl模块time::piece。当前有以下模块-time/JulianDay.pm time/ParseDate.pm time/CTime.pm time/Timezone.pm time/DaysInMon我之所以将其描述为“标准时间::计件模块”是有原因的“.Time::Piece自四年前发布Perl 5.10.0以来,一直作为标准Perl发行版的一部分。如果您使用的Perl版本不包含它,那么您应该真正考虑升级。或者,时间::JulianDay似乎可以用来解决这个问题——尽管方式稍微复杂一些。尝试阅读文档(
perldoc Time::JulianDay
)。使用Perl5.8。将尝试下载计时模块并试用。谢谢。
if( $str1 gt $str2 ) {
   # $str2 represents a later date than $str1
}