我对perl脚本很陌生。我需要找出天/小时/分钟/秒内两个日期的差异,只要我有POSIX模块(我不能使用时间::Piece或DateTime或.(模块)
喜欢,
$date1 = Tue Nov 30 10:53:38 2021;
$date2 = Fri Dec 10 02:12:25 2021;
$output = $date2 - $date1 :: $output应为09天3小时19分钟47秒
你能告诉我如何实现这一点吗:解析、计算?
您的帮助将不胜感激。
谢谢!
发布于 2021-12-12 07:22:48
算法可以用POSIX::mktime函数来解决这个问题。
输入日期需要一些“按摩”才能将所提供的日期以mktime
函数的预期形式表示出来,这是由date2epoch
函数实现的,后者以秒为单位返回日期的表示。
一旦将日期转换为秒,获得以天/小时/分钟/秒表示的时间差是一个简单的计算问题。
注1:假定日期是在同一时区内获得的。
注2:OP的日期差异计算为incorrect
use strict;
use warnings;
use feature 'say';
use POSIX;
my $date1 = 'Tue Nov 30 10:53:38 2021';
my $date2 = 'Fri Dec 10 02:12:25 2021';
my $diff = date_diff($date1,$date2);
printf "Date difference: %02d days %02d hours %02d min %02d sec\n",
$diff->@{qw/days hours min sec/};
sub date_diff {
my $date1 = shift;
my $date2 = shift;
my $diff;
my $sec_diff = date2epoch($date2) - date2epoch($date1);
$diff->{sec} = $sec_diff % 60;
$diff->{min} = ($sec_diff % 3600 - $diff->{sec} ) / 60;
$diff->{hours} = $sec_diff / 3600 % 24;
$diff->{days} = int( $sec_diff / ( 24 * 3600 ) );
return $diff;
}
sub date2epoch {
my $str_date = shift;
my($months,$date,$epoch);
$months->@{qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/} = (0..11);
$date->@{qw/week_day month month_day time year/} = split(' ', $str_date);
$date->@{qw/hour min sec/} = split(':', $date->{time});
$date->{month} = $months->{ $date->{month} };
$date->{year} -= 1900;
$epoch = POSIX::mktime( $date->@{qw/sec min hour month_day month year/} );
return $epoch;
}
输出
Date difference: 09 days 15 hours 18 min 47 sec
https://stackoverflow.com/questions/70314673
复制相似问题