加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl:通过转换为秒来计算天数

发布时间:2020-12-15 21:58:52 所属栏目:大数据 来源:网络整理
导读:我试图计算从数据库中提取的两个日期之间的日历天数.我认为将日期转换为秒将是一个简单而正确的解决方案. #!/usr/bin/perluse warnings;use strict;use POSIX qw(strftime);use Date::Parse;my $minDate = "2016-03-27";my $maxDate = "2016-06-15";print "F
我试图计算从数据库中提取的两个日期之间的日历天数.我认为将日期转换为秒将是一个简单而正确的解决方案.
#!/usr/bin/perl
use warnings;
use strict;
use POSIX qw(strftime);
use Date::Parse;

my $minDate = "2016-03-27";
my $maxDate = "2016-06-15";

print "Format as extracted from db: mindate: $minDate and maxdate: $maxDaten"; 

my ($dbYear,$dbMonth,$dbDay) = split ('-',$minDate);
my $datum = "$dbYear$dbMonth$dbDay";
my $minDateSec = str2time($datum);

($dbYear,$maxDate);
$datum = "$dbYear$dbMonth$dbDay";
my $maxDateSec = str2time($datum);

my $numCalDaysSec = ($maxDateSec-$minDateSec)/86400;

print "Min date in Seconds: $minDateSecn";
print "Max date in Seconds: $maxDateSecn";
print "Num days: $numCalDaysSecn";

最初,我认为这种方法为我提供了可靠的结果:

bash-3.2$./testNumDays.pl
As extracted from db: mindate: 2016-06-14 and maxdate: 2016-06-15
Min date in Seconds: 1465855200
Max date in Seconds: 1465941600
Num days: 1
bash-3.2$./testNumDays.pl
As extracted from db: mindate: 2016-05-31 and maxdate: 2016-06-15
Min date in Seconds: 1464645600
Max date in Seconds: 1465941600
Num days: 15
bash-3.2$./testNumDays.pl
As extracted from db: mindate: 2016-03-28 and maxdate: 2016-06-15
Min date in Seconds: 1459116000
Max date in Seconds: 1465941600
Num days: 79
bash-3.2$./testNumDays.pl
As extracted from db: mindate: 2016-03-27 and maxdate: 2016-06-15
Min date in Seconds: 1459033200
Max date in Seconds: 1465941600
Num days: 79.9583333333333
bash-3.2$

显然,日期之间的日历日期数应该是整数.嗯,我做错了什么?为什么转换为秒不可靠?

由于我是一个Perl新手,我可能会忽略这一点.因此,非常欢迎任何帮助.

解决方法

一种方法是使用 Time::Piece核心模块:
use warnings;
use strict;
use Time::Piece qw();

my $t1 = Time::Piece->strptime('2016-03-27','%Y-%m-%d');
my $t2 = Time::Piece->strptime('2016-06-15','%Y-%m-%d');
my $seconds = $t2 - $t1;
print $seconds->days(),"n";

__END__

80

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读