我認爲這將是非常簡單的,但我現在真的沒有選擇。我想從特定時間減去15分鐘。摘要15分從時間使用Perl
例子 我的時間是15:04我想減去15分鐘是14:49。我在網上搜索瞭解決方案,但沒有perl模塊可以幫助我。
我認爲這將是非常簡單的,但我現在真的沒有選擇。我想從特定時間減去15分鐘。摘要15分從時間使用Perl
例子 我的時間是15:04我想減去15分鐘是14:49。我在網上搜索瞭解決方案,但沒有perl模塊可以幫助我。
您可以使用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
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);
轉換時間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);
}
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
那麼這一切都取決於你的時間是如何存儲。我更喜歡使用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));
並非所有的日子都有24小時。 – ikegami
,如果你只關心時間,您可以使用下面的子程序不日期:
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的回答中)。
如果他只是關心時間而不是日期,他可以嘗試[時間::時鐘](http://search.cpan.org/perldoc?Time::Clock) – mpeters
我想上面的問題已經解決了我的問題問題,下面的不使用我想要的格式,但幫助我學到了很多。我能夠用以下方式回答它: sub subTime {0} {0} {0}我的($ time)= @_; \t my @splittime = split(':',$ time); \t my $ hour = $ splittime [0]; \t my $ min = $ splittime [1]; \t if($ min <15){ \t $ min =($ min + 60)-15; \t $ hour- = 1; \t} else { \t \t $ min = $ min-15; \t} \t return「$ hour:$ min」; \t } 我調用了這個函數,它返回了減少的時間。謝謝 –
並查看https://stackoverflow.com/questions/7486470/how-to-parse-a-string-into-a-datetime-object-in-perl爲字符串 - >'DateTime'。 –