用Perl计算日期

用Perl计算日期,perl,datetime,Perl,Datetime,我试图从输入的日期开始计算未来七天零四小时的日期/时间,并以可读格式打印出来 我有: print "Enter a date YYYY MM DD. Remember perl's months go from 0-11.\n"; while (@dateEnt < 1) { my $dateEntered = <STDIN>; chomp $dateEntered; push @dateEnt, $dateEntered; (@datedat

我试图从输入的日期开始计算未来七天零四小时的日期/时间,并以可读格式打印出来

我有:

print "Enter a date YYYY MM DD. Remember perl's months go from 0-11.\n";
while (@dateEnt < 1) {
    my $dateEntered = <STDIN>;
    chomp $dateEntered;
    push @dateEnt, $dateEntered;

    (@datedata) = split (/\s+/, $dateEntered);
    $year= $datedata[0];
    $month = $datedata[1]; 
    $day = $datedata[2]; 
}

$time = time; 
$readabletime = localtime($time); 

use Time::Local; 
$timeEntUseable = timelocal(00, 00, 00, $day, $month, $year);  
$laterdate = localtime($timeEntUseable + (60 * 60 * 4 * 24)); 
print "The time 7 days and 4 hours from the time entered is $laterdate\n"; 
print“输入日期YYYY-MM-DD。记住perl的月份从0到11。\n”;
而(@dateEnt<1){
我的$dateEntered=;
输入chomp$date;
推送@dateEnt,$dateEntered;
(@datedata)=拆分(/\s+/,输入$datedata);
$year=$datedata[0];
$month=$datedata[1];
$day=$datedata[2];
}
$time=时间;
$readabletime=localtime($time);
使用时间::本地;
$timeEntUseable=timelocal(00,00,00,$day,$month,$year);
$laterdate=localtime($timeEntUseable+(60*60*4*24));
打印“从输入的时间算起7天4小时的时间是$laterdate\n”;
当我在第一个问题中输入2015 00 01(2015年1月1日)时,我的结果是2015年1月2日4:00:00。答案应该是2015年1月7日4:00:00。有什么帮助吗

我认为:

$laterdate = localtime($timeEntUseable + (60 * 60 * 4 * 24)); 
应该是:

$laterdate = localtime($timeEntUseable + (60 * 60 * (24 * 7 + 4)));
2015年1月8日4:00:00的输出是否正确

  • 60*60
    表示一小时
  • 24*7
    指7天中的每小时
  • +4
    意味着7天的工作时间增加4小时
    • 我认为:

      $laterdate = localtime($timeEntUseable + (60 * 60 * 4 * 24)); 
      
      应该是:

      $laterdate = localtime($timeEntUseable + (60 * 60 * (24 * 7 + 4)));
      
      2015年1月8日4:00:00的输出是否正确

      • 60*60
        表示一小时
      • 24*7
        指7天中的每小时
      • +4
        意味着7天的工作时间增加4小时

      使用时间::片和时间::秒(核心从5.10开始):

      #/usr/bin/perl
      使用警告;
      严格使用;
      使用时间::件;
      使用时间:秒;
      我的$date;
      截止日期($日期){
      打印“输入日期(YYYY/MM/DD):”;
      chomp(我的$input=);
      $date=eval{'Time::Piece'->strtime($input,'%Y/%m/%d');
      }
      $date+=7*一天+4*一小时;
      打印$date,“\n”;
      

      请注意,结果是2015年1月4日804:00:00,因为
      1+7=8

      使用Time::Piece和Time::Seconds(核心自5.10起):

      #/usr/bin/perl
      使用警告;
      严格使用;
      使用时间::件;
      使用时间:秒;
      我的$date;
      截止日期($日期){
      打印“输入日期(YYYY/MM/DD):”;
      chomp(我的$input=);
      $date=eval{'Time::Piece'->strtime($input,'%Y/%m/%d');
      }
      $date+=7*一天+4*一小时;
      打印$date,“\n”;
      

      请注意,结果是2015年1月4日804:00:00,因为
      1+7=8

      这里有理由使用
      eval
      ?我们不能直接调用
      Time::Pice->strtime
      吗?@skmrx:它处理不正确的输入,如“今天”、“qwerty”等。这里使用
      eval
      有什么原因吗?我们不能直接调用
      Time::Pice->strtime
      吗?@skmrx:它处理不正确的输入,如“今天”、“qwerty”等。