4

perlには、テキストファイルから渡される日付から10日を引く方法があり、出力は1999年1月1日の形式である必要があります。

私はファイルを読み取り、その後の日付を取得するために以下のコードを使用しています。日付を引くことに打たれました。

date.txt

2013年1月25日

#!/usr/bin/perl
use warnings;
use strict;
use DateTime;

my $inp= "date.txt";
my $todate;
my $fromdate;

open(date,"$inp");
while(<date>)
{
$todate = $_ ;
print "$todate \n";
}

$fromdate = $todate - 10 days ;
4

3 に答える 3

9

DateTime を使用した回答を次に示します。

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

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

my $parser = DateTime::Format::Strptime->new(
  pattern => '%d-%B-%Y'
);

my $input = '25-jan-2013';

my $todate = $parser->parse_datetime($input);

my $fromdate = $todate->clone;
$fromdate->subtract(days => 10);
say 'From: ', $fromdate->strftime('%d-%B-%Y');
say 'To: ', $todate->strftime('%d-%B-%Y');
于 2013-02-02T21:28:09.477 に答える
3

昔は、Time::Localを使用して時間をエポックからの秒数に変換し、10 日間の秒数 (10 * 24 * 60 * 60) を引き、それを元の時間に変換していました。localtimeを使用した時間。それは楽しく、教育的であり、ほとんどの場合、過度に複雑でエラーが発生しやすいものでした.

Perl 5.10 以降を使用できる場合は、Time::Pieceを使用することを好みます。これにより物事が単純になり、最も重要なのは、標準の Perl モジュールだからです。さらに、別の標準 Perl モジュールであるTime::Secondsとうまく連携します。

use warnings;
use strict;
use autodie;
use feature qw(say);

use Time::Piece;
use Time::Seconds;

my $date = "25-jan-2013";

#Create the "date object". The `%d-%b-%Y" is format the date is in
my $my_date = Time::Piece->strptime($date, "%d-%b-%Y");  #

#Now subtract ten days from it
$my_date -= ( 10 * ONE_DAY );  #Constant from Time::Seconds

say $my_date;   #Prints out Tue Jan 15 00:00:00 2013

#Printing it out in dd-mmm-yyyy format you had
say $my_date->mday . "-" . $my_date->monname . "-" . $my_date->year;
于 2013-07-11T18:50:58.220 に答える
1

Date::Manipを使用できます:

#!/usr/bin/perl
use warnings;
use strict;

use Date::Manip;

my $todate  = '25-jan-2013';
my $newdate = DateCalc(ParseDate($todate), ParseDateDelta('- 10 days'));

print "$newdate\n";
于 2013-02-01T10:11:11.493 に答える