如何使用 Perl 比较格式中的两个日期:
"dd mon yyyy hh:mm:ss GMT"
例如:格林威治标准时间 2013 年 5 月 12 日 10:10:20
我无法安装任何外部 Perl 模块。请指教。
如何使用 Perl 比较格式中的两个日期:
"dd mon yyyy hh:mm:ss GMT"
例如:格林威治标准时间 2013 年 5 月 12 日 10:10:20
我无法安装任何外部 Perl 模块。请指教。
如果你有 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
参考:
Time::Piece->strptime
$tp->strftime
aAbBcdHIjmMpSUwWxXyYZ%
如果您使用的是非 Unix 系统,则只有格式字符是安全的(例如,Window 的 Perl 不支持该%e
说明符)。 将日期转换为格式yyyymmddhhmmss
(例如20130512101020
)并作为字符串进行比较。但是,如果没有模块,处理时区可能会变得很棘手。
最流行的日期模块之一是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 {
...
}