Perl日期比较查询

问题描述 投票:1回答:1

如果输入文件中提供的日期距离“今天”大于一天,我将尝试输出“不好”。

当test.txt包含以下数据时,使用“ ./code.sh

07/02/2020 08/02/2020

当我重新散列下面的代码以尝试将“今天的日期”用作变量,并且在输入文件中只有一个日期时,出现以下错误:

Use of uninitialized value in concatenation (.) or string at code.sh line 27, <> line 1

工作代码(输入文件中有两个日期):

#!/usr/bin/perl

use strict;
use warnings;

use Time::Piece;

#my $date = localtime->strftime('%d/%m/%Y');
#print "$date";

my $format = '%d/%m/%Y';

while (<>) {
   chomp;

         my ($str1, $str2) = split;
#        my ($date, $str2) = split;

#  my $dt1 = Time::Piece->strptime($date, $format);
   my $dt1 = Time::Piece->strptime($str1, $format);
   my $dt2 = Time::Piece->strptime($str2, $format);

   #  print "$date / $str2 ";
  print "$str1 / $str2 ";

     if ($dt2->julian_day - $dt1->julian_day ==1) {

         print "ok\n";

     } else {
         print "not ok\n";
         }
}

破损代码(输入文件中有一个日期):

#!/usr/bin/perl

use strict;
use warnings;

use Time::Piece;

my $date = localtime->strftime('%d/%m/%Y');
print "$date";

my $format = '%d/%m/%Y';

while (<>) {
   chomp;

#        my ($str1, $str2) = split;
         my ($date, $str2) = split;

   my $dt1 = Time::Piece->strptime($date, $format);
#  my $dt1 = Time::Piece->strptime($str1, $format);
   my $dt2 = Time::Piece->strptime($str2, $format);

     print "$date / $str2 ";
 # print "$str1 / $str2 ";

     if ($dt2->julian_day - $dt1->julian_day ==1) {

         print "ok\n";

     } else {
         print "not ok\n";
         }
}

不太确定我在做什么错...

感谢您的任何帮助

perl date string-comparison
1个回答
0
投票

[输入代码时请多加注意,示例中有一些未输入的类型

#!/usr/bin/perl
#
# vim: ai:ts=4:sw=4
#

use strict;
use warnings;
use feature 'say';

use Time::Piece;

my $format = '%d/%m/%Y';
my $date   = localtime->strftime($format);

say "Today is: $date\n";

my @str_dates = <DATA>;

chomp(@str_dates);

my $date1 = Time::Piece->strptime($str_dates[0], $format);
my $date2 = Time::Piece->strptime($str_dates[1], $format);

my $days_diff = $date2->julian_day - $date1->julian_day;

my $msg = ($days_diff == 1) ? "ok" :"not ok";

say "$date2 :: $date1 => $msg";
say "$date2 :: $date1 =  $days_diff day(s) apart";

__DATA__
07/02/2020
08/02/2020

输出

Today is: 07/02/2020

Sat Feb  8 00:00:00 2020 :: Fri Feb  7 00:00:00 2020 => ok
Sat Feb  8 00:00:00 2020 :: Fri Feb  7 00:00:00 2020 =  1 day(s) apart

注意:如果您使用,我会建议:

vim最好与选项一起使用:语法,ai,ts = 4,sw = 4

© www.soinside.com 2019 - 2024. All rights reserved.