ある地方公務員電算担当のナヤミ このページをアンテナに追加 RSSフィード

2006 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 |
2012 | 05 | 06 | 08 |
このブログは、「地方公務員のためのブログガイドライン」に準拠しています。

2007年8月27日(月)

「生年月日から年齢を計算する簡単な計算式」は使えるとは限らない

先週はブログをお休みさせていただきました。お休みの間にも多くの方にご覧頂いていたようです。ありがたいことです。ブログの更新が止まっていてもカウンタが回っていることにちょっと驚きです。

ブログをお休みしていた間にも、いくつかの気になる記事が出ていたようですが、目に留まったのがこの記事でした。

生年月日から年齢を計算する簡単な計算式 - ITpro
http://itpro.nikkeibp.co.jp/article/Watcher/20070822/280097/

こことか、いろんなブログで取り上げられているようです。Int(([基準日]-[生年月日])/10000)という計算式で年齢が簡単に出せるというものです。

何人かのブックマーカーの方がコメントされていますし、コメントがなくても自治体職員の方であればこのようなことは常識であると思いますが、この式はこのままで使えるとは限りません。

日本の法律を確認してみました。誕生日の前日が終了する瞬間(すなわち誕生日をむかえる午前0時00分の直前)に1歳を加えることになる。ただしうるう年など、年によって期間を定めた場合において最後の月に応当する日がないときは、その月の末日をもってその年齢が満了する、ということになるようです。

この記事を書いた方は、この部分で仕様がこうなると思い込まれているようです。

「誕生日の前日が終了する瞬間(すなわち誕生日をむかえる午前0時00分の直前)」の属する日、というのは誕生日ではなくて誕生日の前日なのです。このことを間違えると、1日違いで大きな間違いをしでかす結果となります。

例えば老齢支給年金の支給要件は、国民年金法第26条によって25年の支払期間を満たしている者が65歳に達したときに支給することとされていますが、その年金給付の支給はいつからなのかというと、国民年金法第18条によって「これを支給すべき事由が生じた日の属する月の翌月から始め」ることとされています。

これを支給すべき事由が生じた日、つまり65歳に達した日というのは誕生日の前日です。

ということで、例えば9月1日生まれの方は8月31日に65歳に達しているということで支給事由の生じた日の属する月の翌月、つまり9月分から年金が支給されます。これを9月1日に65歳に達したという定義にしてしまうと、年金は10月分からです。

1か月分支給する年金を間違えたら、一大事です。

何も考えずにプログラムに組み込むようなことをすればこれだけ大きな違いによる影響が、さまざまな分野で生じるのです。

日本の法律を確認してみました。

これでは確認したことにはなっていません。年齢計算ニ関スル法律だけでは判断できない事項なのです。業務ごとにどのような定義なのか、理解していないとひどい間違いをすることになります。

プログラマの皆さまにおかれましては、上記を参考にしていただき、その数式が適用可能な業務であるのかどうか検討の上、採用すべきかご判断頂きたいものです。

ちなみに、自分がこの式に出会ったのは、業務上持っていたExcelのファイルの生年月日の項目を、2000年問題対応ですべてyyyymmdd形式に変える時でした。結局基準日を出すには月ごとの月末日を取得する必要があるので、面倒だなと思ったのを覚えています。8年前のことです。当時はまだ電算担当ではなくて、担当の先輩に教わったのですけど。なつかしいな。