如何使用perl比较日期?

时间:2013-06-11 09:33:02

标签: perl

如何使用Perl比较格式中的两个日期:

"dd mon yyyy hh:mm:ss GMT"
  

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

我无法安装任何外部Perl模块。 请指教。

3 个答案:

答案 0 :(得分:4)

如果您使用的是Perl v5.9.5或更高版本,则可以使用Time::Piece核心模块。这是相关操作的简单演示

  • 将日期从字符串转换为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;
    
  • 或者您可以直接比较两者(感谢stevenl

    $tp2 > $tp1
    

参考文献:

  1. Time::Seconds
  2. Time::Piece
  3. man strftime用于与Time::Piece->strptime
  4. 一起使用的格式字符串
  5. man strptime用于与$tp->strftime一起使用的格式字符串
    • 请注意,如果您使用的是非Unix系统,则只有格式字符aAbBcdHIjmMpSUwWxXyYZ%是安全的(例如,Window的Perl不支持%e说明符)。

答案 1 :(得分:2)

将日期转换为格式yyyymmddhhmmss(例如20130512101020)并比较为字符串。但是,如果没有模块,处理时区可能会变得棘手。

答案 2 :(得分:1)

最受欢迎的日期模块之一是DateTime。它有a 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 {
       ...
    }