获取一系列日期的perl子例程

时间:2011-08-11 19:36:09

标签: perl datetime date

是否有我可以使用的perl例程可以执行以下操作?我正在寻找一个很好的例子。

我希望能够根据范围打印出一系列日期。

作为参数我希望能够做到这样的事情: ./myperlscript -r 20110630 20110731(以-r =范围为例)。

所以基本上,如果我可以将这个格式的日期作为输入,并打印我那些日子。

20110630
20110701
20110702
...
..

1 个答案:

答案 0 :(得分:4)

这应该让你开始。您可能希望添加一些输入验证(即确保@ARGV的元素格式正确,第一个表示小于第二个的日期等,等等。)。

use strict;
use warnings;
use DateTime;

unless(@ARGV==2)
{
    print "Usage: myperlscript first_date last_date\n";
    exit(1);
}

my ($first_date,$last_date)=@ARGV;

my $date=DateTime->new(
{
  year=>substr($first_date,0,4),
  month=>substr($first_date,4,2),
  day=>substr($first_date,6,2)
});


while($date->ymd('') le $last_date)
{
  print $date->ymd('') . "\n";
  $date->add(days=>1);
}

ETA:如果不清楚发生了什么,我们会创建$date作为DateTime对象,解析$first_date中给出的年,月和日。然后,我们会在没有分隔符($date->ymd(''))的情况下打印出年,月和日,并将$date增加一天,直到我们处于$last_date