在Perl中计算日期

时间:2015-09-24 16:15:05

标签: 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;

    (@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"; 

当我将2015 00 01(2015年1月1日)输入第一个问题时,我的结果是2015年1月2日4:00:00。答案应该是2015年1月7日4:00:00。有帮助吗?

2 个答案:

答案 0 :(得分:6)

使用Time :: Piece and Time :: Seconds(自5.10以来的核心):

#!/usr/bin/perl
use warnings;
use strict;
use Time::Piece;
use Time::Seconds;

my $date;
until ($date) {
    print 'Enter a date (YYYY/MM/DD): ';
    chomp(my $input = <>);
    $date = eval { 'Time::Piece'->strptime($input, '%Y/%m/%d') };
}
$date += 7 * ONE_DAY + 4 * ONE_HOUR;
print $date, "\n";

请注意,结果是2015年1月1日 8 04:00:00,1 + 7 = 8

答案 1 :(得分:0)

我想在这里:

$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小时