0

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

"dd mon yyyy hh:mm:ss GMT"

例如:格林威治标准时间 2013 年 5 月 12 日 10:10:20

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

4

3 回答 3

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. 时间::秒
  2. 时间::件
  3. man strftime用于使用的格式字符串Time::Piece->strptime
  4. man strptime用于使用的格式字符串$tp->strftime
    • 请注意,aAbBcdHIjmMpSUwWxXyYZ%如果您使用的是非 Unix 系统,则只有格式字符是安全的(例如,Window 的 Perl 不支持该%e说明符)。
于 2013-06-11T16:12:24.593 回答
2

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

于 2013-06-11T09:40:27.733 回答
1

最流行的日期模块之一是DateTime。它有一个常见问题解答,可以帮助您入门。

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 回答