end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

Date::Japanese::Eraを使ってperlで和暦-西暦を相互変換

perlで和暦-西暦を相互変換するには、Date::Japanese::Eraを使用します。
http://search.cpan.org/~miyagawa/Date-Japanese-Era-0.06/lib/Date/Japanese/Era.pm

西暦から和暦
my @date_strings =	([1970,1,1],
			 [2009,1,1]);
for my $date_str ( @date_strings ){
    my $era = Date::Japanese::Era->new( @$date_str );
    #西暦から和暦へ
    my $nengou = encode("sjis", $era->name );
    my $jp_year = $era->year;
    print join('/',@$date_str )," -> $nengou $jp_year\n";
}

実行結果

1970/1/1 -> 昭和 45
2009/1/1 -> 平成 21
和暦から西暦和暦

和暦から西暦和暦への変換では、「昭和五十二年」のような漢数字も認識します。

my @date_strings =	(['昭和五十二年'],  #漢数字もOK
			 ['昭和52年'],
			 ['昭和52年'],
			 ['昭和',	52]);

for my $date_str ( @date_strings ){
    my @date_str_org = @$date_str;
    $date_str->[0] = decode("sjis",$date_str->[0]);
    my $era = Date::Japanese::Era->new(@$date_str);
    my $gr_year = $era->gregorian_year;
    #和暦から西暦へ
    print join(',',@date_str_org )," -> $gr_year\n";
}

実行結果

昭和五十二年 -> 1977
昭和52年 -> 1977
昭和52年 -> 1977
昭和,52 -> 1977