「Fri Jul 1 05:21:23 2016」の形式でdatetime値がありますが、これをどのように比較できますか?比較方法「Fri Jul 1 05:21:23 2016」perlのdatetime形式
私は親切に答えを見つけるのに役立つif($date1<$date2) { print "do something"! }
のように行う必要があります!
「Fri Jul 1 05:21:23 2016」の形式でdatetime値がありますが、これをどのように比較できますか?比較方法「Fri Jul 1 05:21:23 2016」perlのdatetime形式
私は親切に答えを見つけるのに役立つif($date1<$date2) { print "do something"! }
のように行う必要があります!
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";
}
なぜ「5.010」を使うのですか? – melpomene
私はプログラムで 'say()'を使っているので。また、5.10はTime :: Pieceを標準ディストリビューションに含める最初のバージョンでした(もちろん、Perlの以前のバージョンのユーザーはCPANからインストールできます)。しかし、主に私は、Perl 5.10が深刻なPerl開発のための最小許容バージョンであると考えているからです。 –
日付/時刻操作のために 'Datetime'&Coを使う方がより普遍的です。たとえば、 'Time :: Piece'は' Thu Jul 1 05:21:23 2016''(曜日名に注意してください)を受け入れ、 'Datetime'は受け入れません。 –
あなたは比較をサポート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';
}
[ '時間:: Piece'](http://search.cpan.org/~esaym/ Time-Piece-1.31/Piece.pm#Date_Parsing) – Sobrique