我认为这是一个非常基本的问题。 但我尝试了各种各样的方法,但无法解决这个问题。
我有一个字符串值" 21-01-2014"。我必须检查此日期是否大于2014年9月1日。
我该怎么做?
我使用了Parse Date。 例如
if ( ParseDate( $row->{Date} ) >= ParseDate("01-09-2014") ){
}
但是这没用。 可能这里有一个错误?
有人可以建议一种更简单直接的方法。 $ row->日期来自数据库,定义为varchar。
感谢。
答案 0 :(得分:2)
ParseDate
来自哪里?是Time::ParseDate
吗?
我更喜欢Time::Piece。它从5.10开始就是标准的Perl模块,我可以指定日期所在的格式。另外,Time::Piece
是面向对象的:
use strict; # Lets you know when you misspell variable names
use warnings; # Warns of issues (using undefined variables
use feature qw(say);
use Time::Piece;
my $time1 = "21-01-2014";
my $time2 = "01-09-2014"; #Assuming this is Sept, 1, 2014
my $time_obj1 = Time::Piece->strptime("$time1", "%d-%m-%Y");
my $time_obj2 = Time::Piece->strptime("$time2", "%d-%m-%Y");
if ( $time_obj1 < $time_obj2 ) { # Comparing number of days since "the epoc"
say $time_obj1->dmy . " is older than " . $time_obj2->dmy;
}
else {
say $time_obj2->dmy . " is older than " . $time_obj1->dmy;
}
如果您不想创建对象,则只需使用Time::Piece->strptime
返回的值:
if ( Time::Piece->strptime("$time1", "%d-%m-%Y")
< Time::Piece->strptime("$time2", "%d-%m-%Y") ) {
say "$time1 is older than $time2";
}
else {
say "$time2 is older than $time1";
}
字符串%d-%m-%Y
是您日期的格式。 (并且你应该检查Time::Piece->strptime
的返回值,以确保你得到一个有效的Time::Piece
对象。为了简单起见,我没有这样做。