Edited at

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

More than 1 year has passed since last update.

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

まだ年齢計算で消耗してるの? - 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