2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-15

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

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

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?