2013-02-07 100 views
-1

我想檢查當前時間是否小,等於或大於20:00(例如)。 我怎麼可以用Perl做到這一點?將時間與Perl比較

謝謝。

+2

詳細地說,請參見http://stackoverflow.com/questions/8221841/how-to-compare-string-date-time-in-perl&http://www.perlmonks.org/?node_id=233746 –

回答

3

查看localtime功能。

use warnings; 
use strict; 

my $after_time = "13:32"; 

my @time = localtime(time);  

if ($after_time =~ /(\d+):(\d+)/ and 
    $time[2] >= $1 and 
    $time[1] >= $2 
) 
{ 
    print "It is after $after_time";  
} 

更新:謝謝你,戴維十字架,指出原代碼是由於兩個電話給有缺陷localtime()

+0

。非常感謝!!! – VladB

+4

對'localtime'的兩次調用意味着時間可能會在他們之間點擊一小時。這肯定會混淆這裏的邏輯。 –

+0

確實;更好的是我的@t =本地時間;那麼你可以直接比較$ t [1]和$ t [2]。 – LeoNerd

1

這並不完全清楚你在問什麼,但可能是這樣的。

use Time::Piece; 

my $hour = localtime->hour; 

if ($hour < 20) { 
    say "It's before 20:00"; 
} elsif {$hour > 20) { 
    say "It's after 20:00"; 
} else { 
    say "It's 20:00"; 
} 
0
my $now = DateTime->now(time_zone => 'local'); 
my $cutoff = $now->clone->truncate(to => 'day')->set(hour => 20); 

if ($now < $cutoff) { 
    say "It's before 20:00"; 
} elsif ($now > $cutoff) { 
    say "It's after 20:00"; 
} else { 
    say "It's exactly 20:00"; 
} 

這可能是這種情況有點矯枉過正,但日期時間的靈活性,讓您輕鬆實現其他邏輯(不同的截止工作日/週末,截止於小時和分鐘),無需陷得大部分進入if-then-else邏輯。

0

其實正確的「如果」條件就有所不同了,你不需要檢查分鐘也大,如果時間不超過分鐘以上(我也是固定的標誌方向:)

use warnings; 
use strict; 

my $after_time = "13:32"; 

my @time = localtime(time);  

if ($after_time =~ /(\d+):(\d+)/ 
    and (($time[2] > $1) || ($time[2] == $1 and $time[1] >= $2)) 
) { 
    print "It is after $after_time";  
}