0

私は DD-MON-YYYY 形式で日付を取得している場所から DB にアクセスするために perl を使用しています。2 つの操作を実行する必要があります。

  1. この形式を MM/DD/YYYY 形式に変換します。
  2. この日付を 2 つの日付と比較して、その時間範囲内にあるかどうかを確認します。

    私の $chdate = '2013 年 2 月 15 日';

    サブ get_stats {

    my %map = ( 'Jan' => '01', 'Feb' => '02', 'Mar' => '03', 'Apr' => '04',
                'May' => '05', 'Jun' => '06', 'Jul' => '07', 'Aug' => '08',
                'Sep' => '09', 'Oct' => '10', 'Nov' => '11', 'Dec' => '12');
    
        $chdate =~ s/(..)-(...)-(....)/$map{$2}\/$1\/$3/;
        print "New date: $chdate";
    

    }

(2)の操作はどのように行うのですか?

古いバージョンの Perl (Time::Piece モジュールなし) を持っていますが、更新する権限がありません :)

4

3 に答える 3

5

Time::Pieceモジュールを使用することをお勧めします。これは Perl5 v9.5 以降のコア モジュールであるため、おそらくインストールする必要はありません。

を使用して日付をデコードし、を使用して再エンコードするだけstrptimeですstrftime

use strict;
use warnings;

use Time::Piece;

my $date = '28-jul-1986';

print Time::Piece->strptime($date, '%d-%b-%Y')->strftime('%m/%d/%Y');

出力

07/28/1986
于 2013-03-04T12:21:05.283 に答える
1

日付をTime::Pieceオブジェクトに変換すると、標準の数値比較演算子を使用して比較できます。だから、あなたはこのようなことをすることができます。

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

use Time::Piece;

my $start_date_str = '1-mar-2013';
my $end_date_str   = '31-mar-2013';
my $date_to_test_str = '4-mar-2013';

my $in_fmt  = '%d-%b-%Y';
my $out_fmt = '%m/%d/%y'; # Warning: Illogical format!

my $start_date_tp = Time::Piece->strptime(
  $start_date_str, $in_fmt
);
my $end_date_tp = Time::Piece->strptime(
  $end_date_str, $in_fmt
);
my $date_to_test_tp = Time::Piece->strptime(
  $date_to_test_str, $in_fmt
);

print $date_to_test_tp->strftime($out_fmt), ' is ';
unless ($start_date_tp <= $date_to_test_tp and
    $date_to_test_tp <= $end_date_tp) {
      print ' not ';
}
say 'between the two test dates';
于 2013-03-04T13:16:27.267 に答える