如何使用Perl获得以分钟为单位的日期差异?



我的例子是:如何使用perl比较日期?

...
# $ARG1 is specified by the user for example "10" min
my $difftime=$ARG1; 
# -- Get date ---------------------------------------------------------------------
#Stores current date and time - $time min
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime(time() - (60*$difftime));
$year += 1900;
#parse date format to '22.10.2021 00:00:00' -----------------------------------------------------
my $act_date="$mday.$mon.$year $hour:$min:$sec";
...

我的第一个问题是$hour和$mon是一个低为什么?

我的第二个问题是时间是一个数字&;8:4:34&;而不是两个数字"08:04:34"。这对日期比较有问题吗?

...
#compare date
# date example for $sql_value is 06.10.2021 09:38:27
my $date_to_compare=$sql_value;
if ($act_date <= $date_to_compare) 
{
print "the current date is smaller";
} 
else 
{
print "the current date is greater";
}
...

我只得到"当前日期更小";为什么?

另外,我怎样才能得到以分钟为单位的时间差异?

感谢

像你试图做的那样,在较低层次上处理日期和时间真的会让你的生活比它需要的更困难。你应该按照你所链接的例子的答案中的建议,使用Time::Piece。

我的第一个问题是$小时和$月是一个低为什么?

如果$hour是错误的,那么这可能是由于时区差异。但是$monlocaltime()的文档中被定义为0到11之间。这就是我所说的在这种水平上工作让你的生活变得太艰难的部分原因。

你真的没有说清楚你要做什么。但是您可以使用strptime()从datetime字符串中创建Time::Piece对象。

my $date_str = '22.10.2021 00:00:00';
my $date = Time::Piece->strptime($date_str, '%d.%m.%y %H:%M:%S');

两个Time::Piece对象可以直接比较:

if ($dt1 > $dt2) {
# do something
} else {
# do something else
}

如果您减去两个Time::Piece对象,您将得到两个时间戳之间的秒数。

my $secs = $dt1 - $dt2;

你可以使用strftime()方法来获得你想要的任何格式的时间戳。

say $dt1->strftime('%d.%m.%y %H:%M:%S');

最新更新