2010-12-07 14 views

答えて

5

は、私はあなたが既に答えを受け入れてきたことを知っているが、それはかなり無骨な古い日付:: 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); 
} 
+0

なぜ、「Date :: Calc」ではなく「DateTime」を使用することをお勧めしますか? –

+2

"古いスタイル"の日付と時刻モジュールはすべて1つのことをします。それらのほとんどはうまくいっていますが、Date :: CalcとDate :: Parseは日付と時刻の内部表現がまったく異なるため、一緒に使用したいと思うと問題があります。 DateTimeファミリのモジュールは、連携して動作するように明示的に設計されたモジュールの統合セットです。 DateTimeモジュールを使用すると、互換性のない表現間で変換することなく、必要なものすべてを処理することができます。 –

+0

**大人向けの日付計算なので、DateTimeを使用します。タイムゾーンと閏秒は必須ですが、世界の仕組みの現実を反映しています。 Date-Calcのメンテナーは、これが重要だとは思わないようです。 – daxim

3

Date::Calcを使用してください。

use Date::Calc qw(Delta_Days Add_Delta_Days); 

my @begin = reverse split /\./, '27.12.2007'; 
my @end = reverse split /\./, '12.03.2010'; 

my $delta = Delta_Days(@begin, @end); 

for my $i (0..$delta) { 
    printf "%d-%02d-%02d\n", Add_Delta_Days(@begin, $i); 
} 
関連する問題