0

Perlを使用して2つの日付を形式で比較するにはどうすればよいですか:

"dd mon yyyy hh:mm:ss GMT"

例: 2013 年 5 月 12 日 10:10:20 GMT

外部 Perl モジュールをインストールできません。ご意見をお聞かせください。

4

3 に答える 3

4

Perl v5.9.5 以降であれば、Time::Piececore モジュールを使用できます。関連する操作の簡単なデモを次に示します。

  • 日付を文字列から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
    

参考文献:

  1. 時間::秒
  2. 時間::ピース
  3. 使用するフォーマット文字列のman strftimeTime::Piece->strptime
  4. 使用するフォーマット文字列のman strptime$tp->strftime
    • Unix 以外のシステムを使用している場合は、フォーマット文字のみaAbBcdHIjmMpSUwWxXyYZ%が安全であることに注意してください (たとえば、Windows の Perl は%e指定子をサポートしていません)。
于 2013-06-11T16:12:24.593 に答える
2

日付を形式yyyymmddhhmmss(例: 20130512101020) に変換し、文字列として比較します。ただし、モジュールがないとタイムゾーンの処理が難しくなる可能性があります。

于 2013-06-11T09:40:27.733 に答える
1

最も人気のある日付モジュールの 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 {
       ...
    }
于 2013-06-11T09:38:28.413 に答える