Perl 如何打印两个边界日期之间的日期

Perl 如何打印两个边界日期之间的日期,perl,Perl,我有两个日期的格式: 27.12.2007 12.03.2010 如何打印这两个日期之间的所有日期(周期)?使用 我知道您已经接受了一个答案,但它使用了相当笨拙的Date::Calc模块。现在,大多数人会建议改用DateTime #!/usr/bin/perl use strict; use warnings; use DateTime; my %start; @start{qw[day month year]} = split /\./, '27.12.2007'; my %end; @

我有两个日期的格式:

27.12.2007

12.03.2010

如何打印这两个日期之间的所有日期(周期)?

使用


我知道您已经接受了一个答案,但它使用了相当笨拙的Date::Calc模块。现在,大多数人会建议改用DateTime

#!/usr/bin/perl

use strict;
use warnings;

use DateTime;

my %start;
@start{qw[day month year]} = split /\./, '27.12.2007';
my %end;
@end{qw[day month year]} = split /\./, '12.03.2010';

my $start = DateTime->new(%start);
my $end   = DateTime->new(%end);

my $curr = $start;

while ($curr <= $end) {
  print $curr->ymd, "\n";
  $curr->add(days => 1);
}
#/usr/bin/perl
严格使用;
使用警告;
使用日期时间;
我的%开始;
@开始{qw[日-月-年]}=split/\./,'27.12.2007';
我的%结束;
@结束{qw[日-月-年]}=split/\./,'12.03.2010';
我的$start=日期时间->新建(%start);
my$end=日期时间->新建(%end);
我的$curr=$start;
而($curr ymd,“\n”;
$curr->add(天数=>1);
}

为什么建议使用
DateTime
而不是
Date::Calc
?因为“旧式”日期和时间模块都做一件事。大多数模块都做得很好,但如果您想(比如)同时使用date::Calc和date::Parse,则会遇到问题,因为它们具有完全不同的日期和时间的内部表示形式。DateTime系列模块是一组集成的模块,它们被明确设计为协同工作。一旦你切换到使用DateTime模块,你就可以做几乎所有你想做的事情,而不必在不兼容的表示之间进行转换。我使用DateTime是因为它是成年人的日期计算。时区和闰秒是必须的,它们反映了世界的实际运行情况。date Calc的维护者就是这样做的似乎并不认为这很重要。这是主观的,但我认为DateTime的界面比其他选择好得多-有一些问题,但通常会产生易于理解的代码
#!/usr/bin/perl

use strict;
use warnings;

use DateTime;

my %start;
@start{qw[day month year]} = split /\./, '27.12.2007';
my %end;
@end{qw[day month year]} = split /\./, '12.03.2010';

my $start = DateTime->new(%start);
my $end   = DateTime->new(%end);

my $curr = $start;

while ($curr <= $end) {
  print $curr->ymd, "\n";
  $curr->add(days => 1);
}