民法143条「年齢計算に関する法律」に従った日基準の年齢計算のテストケース+C#のサンプルソース

ロジックや解説に関しては以下を参照のこと

まだ年齢計算で消耗してるの? - Qiita
https://qiita.com/kawasima/items/8fdd3939be151f33f7cf

年齢計算は日本の場合は、「年齢計算ニ関スル法律」に基づいた計算になります。

ここで、大きく別れるのが、時刻基準で計算するか日基準で計算するかです。
一般的には時刻基準で計算するので、4月1日生まれの人は、4月1日の0時ちょうどに歳をとることにすればよいですが…、日基準の場合には誕生日前日に歳をとることになります。日基準で計算される有名なのは学齢がありますが、選挙権なんかも同じく日基準のようです。

この民法第143条の日基準の年齢計算のロジックは参照先の通りいくつかあるが、毎度ながらテストケースに迷うのでメモ。

誕生日 歳を重ねる日 誕生日がうるう年か 基準日 基準年の歳を重ねる日 基準日がうるう年か 年齢
2012/3/1 2/28 or 2/29 2016/2/28 2016/2/29 3
2012/3/1 2/28 or 2/29 2016/2/29 2016/2/29 4
2012/3/1 2/28 or 2/29 2017/2/28 2017/2/28 - 5
2013/4/6 4/5 - 2017/4/6 2017/4/5 - 4
2013/4/6 4/5 - 2017/4/5 2017/4/5 - 4
2013/4/6 4/5 - 2017/4/4 2017/4/5 - 3
2013/3/1 2/28 or 2/29 - 2016/2/28 2016/2/29 2
2013/3/1 2/28 or 2/29 - 2016/2/29 2016/2/29 3

参照元のソースを基にC#版の民法第143条の日基準の年齢計算

DateTimeExtentions.cs
        public static int CalcAge(this DateTime birthday, DateTime baseDate = new DateTime())
        {
            var calcBaseDate = baseDate.AddDays(1);
            return (int.Parse(calcBaseDate.ToString("yyyyMMdd")) - int.Parse(birthday.ToString("yyyyMMdd"))) / 10000;

        }

追記:

世の中にある年齢計算のツールは、ほとんどが時間基準の年齢計算なので、結果が違うんですよね。
上記のケースを、試しに入力してみるといくつかのケースで結果が異なるはず。

いま,何歳? - 高精度計算サイト
http://keisan.casio.jp/exec/system/1233283157
年齢計算機/年齢早見表
http://www5d.biglobe.ne.jp/Jusl/Keisanki/JTSL/nenrei.html

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.