2016-07-01 1 views
1

「Fri Jul 1 05:21:23 2016」の形式でdatetime値がありますが、これをどのように比較できますか?比較方法「Fri Jul 1 05:21:23 2016」perlのdatetime形式

私は親切に答えを見つけるのに役立つif($date1<$date2) { print "do something"! }

のように行う必要があります!

+2

[ '時間:: Piece'](http://search.cpan.org/~esaym/ Time-Piece-1.31/Piece.pm#Date_Parsing) – Sobrique

答えて

2

Time::Pieceを使用すると、文字列を直接比較できるオブジェクトに変換できます。

#!/usr/bin/perl 

use strict; 
use warnings; 
use 5.010; 

use Time::Piece; 

my $date1 = 'Fri Jul 1 05:21:23 2016'; 
my $date2 = 'Thu Jun 30 12:00:00 2016'; 

my $date_format = '%a %b %d %H:%M:%S %Y'; 

my $tp1 = Time::Piece->strptime($date1, $date_format); 
my $tp2 = Time::Piece->strptime($date2, $date_format); 

if ($tp1 < $tp2) { 
    say "$date1 is before $date2"; 
} elsif ($tp1 > $tp2) { 
    say "$date1 is after $date2"; 
} else { 
    say "$date1 is the same as $date2"; 
} 
+0

なぜ「5.010」を使うのですか? – melpomene

+3

私はプログラムで 'say()'を使っているので。また、5.10はTime :: Pieceを標準ディストリビューションに含める最初のバージョンでした(もちろん、Perlの以前のバージョンのユーザーはCPANからインストールできます)。しかし、主に私は、Perl 5.10が深刻なPerl開発のための最小許容バージョンであると考えているからです。 –

+2

日付/時刻操作のために 'Datetime'&Coを使う方がより普遍的です。たとえば、 'Time :: Piece'は' Thu Jul 1 05:21:23 2016''(曜日名に注意してください)を受け入れ、 'Datetime'は受け入れません。 –

3

あなたは比較をサポートDatetimeオブジェクトに文字列を解析するためにDateTime::Format::Strptimeを使用することができます。

use strict; 
use warnings; 
use feature 'say'; 
use DateTime::Format::Strptime; 

my $strp = DateTime::Format::Strptime->new(pattern => '%a %b %d %H:%M:%S %Y'); 

my $dt1 = $strp->parse_datetime("Fri Jul 1 05:21:23 2016"); 
my $dt2 = $strp->parse_datetime("Sat Jul 2 05:21:23 2016");  

if ($dt1 < $dt2) { # or use DateTime->compare() 
    say '$dt1 < $dt2'; 
} 
elsif ($dt1 == $dt2) { 
    say '$dt1 == $dt2'; 
} 
else { 
    say '$dt1 > $dt2'; 
}