13

日付に日数を追加して新しい日付を表示する perl スクリプトに取り組んでいます。

use Time::ParseDate;
use Time::CTime;

my $date = "02/01/2003";
my $numdays = 30;

my $time = parsedate($date);

# add $numdays worth of seconds
my $newtime = $time + ($numdays * 24 * 60 * 60);

my $newdate = strftime("%m/%d/%Y",localtime($newtime));

print "$newdate\n";

    The output will be:

    03/03/2003

日付フィールドの入力を yyyymmdd に設定するにはどうすればよいですか 例: my $date = "20030102"

また、出力は次のようにする必要があります: 20030303

ありがとう

4

3 に答える 3

14

Time::Piece + Time::Secondsを使用します(Perl 5.10 以降のコアで)、

use Time::Piece ();
use Time::Seconds;
my $date = '20030102';
my $numdays = 60; # 30 doesn't get us to march

my $dt = Time::Piece->strptime( $date, '%Y%m%d');
$dt += ONE_DAY * $numdays;
print $dt->strftime('%Y%m%d');
于 2012-10-29T19:13:08.823 に答える
13

DateTime+を使用できますDateTime::Format::Strptime

#!/usr/bin/perl
use strict;

use DateTime;
use DateTime::Format::Strptime;

my $strp = DateTime::Format::Strptime->new(
    pattern => '%m/%d/%Y'
);

# convert date to 
my $date = '02/01/2003';
my $dt   = $strp->parse_datetime($date);
printf "%s -> %s\n", $date, $dt->add(days => 30)->strftime("%d/%m/%Y");

出力

02/01/2003 -> 03/03/2003
于 2012-10-29T14:45:01.737 に答える
5

$date を入力形式から古い形式に変換します。

$date =~ s%(....)(..)(..)%$3/$2/$1%;

出力形式が であってはならない場合は%m/%d/%Y、それに設定しないでください。あなたは明らかに必要%Y%m%dです。

于 2012-10-29T13:30:37.563 に答える