Perlを使用して2つの日付を形式で比較するにはどうすればよいですか:
"dd mon yyyy hh:mm:ss GMT"
例: 2013 年 5 月 12 日 10:10:20 GMT
外部 Perl モジュールをインストールできません。ご意見をお聞かせください。
Perlを使用して2つの日付を形式で比較するにはどうすればよいですか:
"dd mon yyyy hh:mm:ss GMT"
例: 2013 年 5 月 12 日 10:10:20 GMT
外部 Perl モジュールをインストールできません。ご意見をお聞かせください。
Perl v5.9.5 以降であれば、Time::Piece
core モジュールを使用できます。関連する操作の簡単なデモを次に示します。
日付を文字列からTime::Piece
オブジェクトに変換します
my $date = "12 May 2013 10:10:20 GMT";
my $tp1 = Time::Piece->strptime($date, "%d %B %Y %T %Z");
my $tp2 = ...
2 時間の差を求める
my $diff = $tp2 - $tp1;
オブジェクトを提供しTime::Seconds
ます。
最後に、差を秒単位 (または別のもの) で表示します。
print $diff->seconds;
または、2 つを直接比較することもできます (thanks stevenl )
$tp2 > $tp1
参考文献:
Time::Piece->strptime
$tp->strftime
aAbBcdHIjmMpSUwWxXyYZ%
が安全であることに注意してください (たとえば、Windows の Perl は%e
指定子をサポートしていません)。 日付を形式yyyymmddhhmmss
(例: 20130512101020
) に変換し、文字列として比較します。ただし、モジュールがないとタイムゾーンの処理が難しくなる可能性があります。
最も人気のある日付モジュールの 1 つはDateTimeです。始めるのに役立つFAQがあります。
sub to_comparable {
my ($date) = @_;
my ($H,$M,$S,$d,$m,$Y) = $date =~ m{^([0-9]{2}):([0-9]{2}):([0-9]{2}), ([0-9]{2})/([0-9]{2})/([0-9]{4})\z}
or die;
return "$Y$m$d$H$M$S";
}
if (to_comparable($date2) < to_comparable($date1)) {
...
} else {
...
}