我正在尝试从输入的日期开始计算未来七天四小时的日期/时间,并以人类可读的格式打印。
我有:
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。有帮助吗?
答案 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小时