我在字符串"11:56:41,11/22/2011"中有这个日期时间格式.
这就是我想要的:
比较两个日期时间字符串,如.
$date1 = "11:56:41, 11/22/2011";
$date2 = "11:20:41, 11/20/2011";
if($date2 < $date1) {
do something...
} else {
do nothing...
}
Run Code Online (Sandbox Code Playgroud)
任何想法我怎么能在perl中实现这一点?
ste*_*enl 13
在将时间转换为Time::Piece对象后使用重载比较的另一种解决方案.创建对象可能对于简单的事情来说是过度的,但如果您需要与时间做其他事情,它们会变得非常有用.
use Time::Piece;
my $dateformat = "%H:%M:%S, %m/%d/%Y";
my $date1 = "11:56:41, 11/22/2011";
my $date2 = "11:20:41, 11/20/2011";
$date1 = Time::Piece->strptime($date1, $dateformat);
$date2 = Time::Piece->strptime($date2, $dateformat);
if ($date2 < $date1) {
do something...
} else {
do nothing...
}
Run Code Online (Sandbox Code Playgroud)
ike*_*ami 11
一种有效的方法是将字段重新排序为词法上可比较的字符.
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) lt to_comparable($date1)) {
...
} else {
...
}
Run Code Online (Sandbox Code Playgroud)
什么,已经4小时而不是单一的DateTime(所有人都欢呼强大的DateTime)回答了什么?你是懒散的,perl用户......☻
use DateTime::Format::Strptime qw();
my $p = DateTime::Format::Strptime->new(pattern => '%T, %D', on_error => 'croak',);
my $date1 = $p->parse_datetime('11:56:41, 11/22/2011');
my $date2 = $p->parse_datetime('11:20:41, 11/20/2011');
if($date2 < $date1) {
say "$date2 comes before $date1";
} else {
say "$date2 does not come before $date1";
}
Run Code Online (Sandbox Code Playgroud)
该方法parse_datetime返回DateTime其比较运算符和字符串化重载到DTRT的实例.