我认为这将非常简单,但我现在真的没有选择。我想从给定的时间减去15分钟。
实施例 我的时间是15:04我想减去15分钟到14:49。我在互联网上搜索过解决方案,但没有可以帮助我的perl模块。
答案 0 :(得分:20)
您可以使用DateTime
:
my $dt = DateTime->new(
year => 1,
month => 1,
day => 1,
hour => 15,
minute => 4,
);
$dt->subtract(minutes => 15);
printf "%d:%d\n", $dt->hour, $dt->minute; # prints 14:49
答案 1 :(得分:7)
这一切都取决于你的时间存储方式。我更喜欢使用内置time_t
返回的time
。
my $now = time();
my $before1 = $now - (15*60); # 15 minutes ago
my $before2 = $now - (3*60*60); # 3 hours ago
my $before3 = $now - (2*24*60*60); # 2 days ago
对于输出,我使用POSIX
模块
print POSIX::strftime( '%Y-%m-%d %T', localtime($before1) );
答案 2 :(得分:2)
perl -MClass::Date -e 'my $d=Class::Date->new("2011-07-13 15:04:00"); my $d2 = $d-"15m"; print $d2, "\n";'
输出:
2011-07-13 14:49:00
答案 3 :(得分:1)
尝试使用Date::Calc
use Date::Calc qw(Add_Delta_DHMS);
($year2, $month2, $day2, $h2, $m2, $s2) =
Add_Delta_DHMS( $year, $month, $day, $hour, $minute, $second, $days_offset, $hour_offset, $minute_offset, $second_offset );
($y,$m,$d,$H,$M,$S) = Add_Delta_DHMS(Today_and_Now(), 0, 0, -15, 0);
答案 4 :(得分:1)
将时间转换为unix时间,例如当前时间:$unixtime = time();
然后从中减去15 * 60然后转换为带有类似
sub display_time {
my ($sec,$min,$hour,$mday,$mon,$year,undef,undef,undef) = localtime(time);
$year += 1900;
$mon += 1;
return "$year.".sprintf("%02d.%02d %02d:%02d:%02d",$mon,$mday,$hour,$min,$sec);
}
答案 5 :(得分:0)
如果您只关心时间而非日期,则可以使用以下子程序:
sub subTime{
my ($time) = @_;
my @splittime = split(':', $time);
my $hour = $splittime[0];
my $min = $splittime[1];
if($min < 15){
$min=($min+60)-15;
$hour-=1;
}
else{
$min = $min-15;
}
return "$hour:$min";
}
Disclamer:这是OP使用的解决方案,他在上面的回答中提到了它(在@ eugene的回答中)。