[ Perl ] 西暦から元号のついた和暦に変換する

Pocket

ここでは、西暦 ( YYYYMMDD 形式の文字列 ) を元号のついた和暦に変換するサンプルを掲載しています。

スポンサーリンク

Perl をはじめて使うことになって

最近 Perl をはじめて使用した私はおっちゃんです。Perl は勢いをなくしているだとか既に廃れたとかという意見をよく耳にします。それに対する反論も当然ながら湧き起っています。ここら辺の話は言語問わず結構言われることなのであまり気になりませんが、無意識のうちに擁護派に肩入れしてしまう今日この頃です。

新しいものについていけない言い訳かもしれませんね。

本ページの本題でありますが、Perl では .Net などとは違って簡単に和暦に変換するようなことはできない様子です。もちろんモジュールなんかも開発されているようですが、標準装備とはいかないらしい印象を受けました。

なので、簡単な変換関数を作成してみましたので公開します。誰かの参考になれば幸いです。

西暦を和暦に変換するサンプル

#
# 西暦を和暦に変換する
#   入力パラメータ例) 20140513
#   出力例)           平成26年
#
sub seireki2wareki {

  # パラメータはyyyymmdd形式で受け付ける
  # 元号は困ったことに日付単位で変更される、仕方のない話があるため
  my ($yyyymmdd) = @_;

  # 西暦部分のみ抜き出す
  my $yyyy = substr($yyyymmdd, 0, 4);

  if(($yyyymmdd ge "19120730") and ($yyyymmdd le "19261224")) {
  
      return "大正" .  ($yyyy - 1911) . "年";
      
  } elsif(($yyyymmdd ge "19261225") and ($yyyymmdd le "19890107")) {
  
      return "昭和" .  ($yyyy - 1925) . "年";
      
  } elsif (($yyyymmdd ge "19890108") and ($yyyymmdd le "99991231")) {
  
      return "平成" .  ($yyyy - 1988) . "年";
  
  } else {
  
      return "昔々";
  }
}

注意

パラメータのバリデートなどは一切やっていないので関数内外で処理を追加する必要があります。また、細かい話になりますが、1926年12月25日は大正15年であり、昭和元年でもあります。どちらを優先させるかは、システムごとに決定すればよいと思います。

本サンプルでは、新しい時代 ( 昭和 ) を優先しています。なお、どのシステムでも同じですが新しい元号に変わった場合には、処理を追加してやる必要があります。

スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>