0

Util という名前の .pm ファイルがあります。次の日付を返すサブルーチン。

sub getNextDate { 
    $inputDate = @_[1]; 
    if ($inputDate != "") { 
        ($year,$mon,$day) = split("-",$inputDate); 
        $mon = $mon - 1; 
        $dtToday = timelocal(0,0,0,$day,$mon,$year); 
    } else { 
        $dtToday = time; 
    } 
    $nextDate = $dtToday + 86400; 
    $nextMonth = ( localtime( $nextDate)->mon ) + 1; 
    $nextYear = ( localtime( $nextDate)->year ) + 1900; 
    $nextDay = localtime( $nextDate)->mday;
    if($nextMonth <= 9) { 
        $nextMonth = '0'.$nextMonth; 
    }
    if($nextDay <= 9) { $nextDay = '0'.$nextDay ; }
    return $nextYear . "-" . $nextMonth . "-" . $nextDay; 
}

.ksh ファイルがあります。.ksh ファイルから .pm のサブルーチンに引数として日付を渡したいです。

.ksh の私のコードは

startDate=2013-02-25 perl -MUtil -e 'print Util::getNextDate("$startDate");' > $result
echo $result

動作していません..私が渡している日付ではなく、現在の日付に基づいて出力を取得しています..

変数の代わりに日付を直接保持すると、正しい出力が得られます。perl -MUtil -e 'print Util::getNextDate("2013-02-25");'

$startDateしかし、代わりに使用したい2013-02-25.....助けてください

4

3 に答える 3

2

Time::Pieceこの目的のために使用する必要があります。バージョン 9.5 以降のコア Perl モジュールであるため、インストールする必要はありません。

use strict;
use warnings;

use Time::Piece;
use Time::Seconds 'ONE_DAY';

sub getNextDate {
  my $date = @_ ? Time::Piece->strptime($_[0], '%Y-%m-%d') : localtime;
  return ($date + ONE_DAY)->strftime('%Y-%m-%d');
}

print getNextDate('2012-12-31'), "\n";
print getNextDate, "\n";

出力

2013-01-01
2013-10-21
于 2013-10-20T13:19:52.793 に答える