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

标签 perl

我正在尝试计算从数据库中提取的两个日期之间的日历天数。我认为将日期转换为秒将是一个简单而正确的解决方案。

#!/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: $maxDate\n"; 

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

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

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

print "Min date in Seconds: $minDateSec\n";
print "Max date in Seconds: $maxDateSec\n";
print "Num days: $numCalDaysSec\n";

最初,我认为这种方法为我提供了可靠的结果:
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

关于Perl:通过转换为秒来计算天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37863415/

相关文章:

perl - 如何使用 Perl 列出目录中的所有文件?

perl - Perl 的 rand 参数可以有多大?

regex - perl 正则表达式 : regex needs to describe entire segment for lookahead grouping to work?

perl - 如何从 Perl CGI 应用程序安排一次性任务?

perl - 如何检查数据库查询是否会返回结果?

java - MATLAB - 删除二进制文件的元素而不加载整个文件

mysql - 选择所有 30 天前的记录

珀尔 : Dereference between @_ and $_

xml - 使用 HTML::TreeBuilder::XPath 模块访问父级或同级的 Xpath 表达式

perl - 如何通过写入附加到文件来替换特定行