【Perl】Excel 形式の和暦日付に変換する

Excel で和暦の日付は次のように表される。

書式: [年号][年].[月].[日]
例  : H22.10.26
      S64.1.7

これを Perl で扱おうと思って DateTime オブジェクトを扱うスクリプト書いた。

#!/usr/bin/perl
use utf8;
use strict;
use warnings;
use DateTime::Format::Strptime;

my $fmt = new DateTime::Format::Strptime(
    pattern => "%Y/%m/%d",
);

my $平成 = $fmt->parse_datetime( "1989/1/8" );
my $昭和 = $fmt->parse_datetime( "1926/12/25" );
my $大正 = $fmt->parse_datetime( "1912/7/30" );
my $明治 = $fmt->parse_datetime( "1868/10/23" );

sub to_jp {
    my $d = shift;
    $d or return "";
    my $y = $d >= $平成 ? "H" . ( $d->year - $平成->year + 1 ) :
        $d >= $昭和 ? "S" . ( $d->year - $昭和->year + 1 ) :
        $d >= $大正 ? "T" . ( $d->year - $大正->year + 1 ) :
        $d >= $明治 ? "M" . ( $d->year - $明治->year + 1 ) :
        $d->year;
    sprintf "%s.%d.%d", $y, $d->month, $d->day;
}

for my $i (qw! 2010/10/26 1989/1/7 !) {
    my $dt = $fmt->parse_datetime( $i );
    print to_jp( $dt ) . "\n";
}
$ perl test.pl
H22.10.26
S64.1.7

Continue reading