年齢を計算するには?

解決


桜坂  2007-02-18 20:30:35  No: 24944  IP: [192.*.*.*]

生年月日がEdit1に19550615と入っているとします。
例えば今日現在(20070218)の年齢をEdit2に年、Edit3に端数の月を計算する方法は、どうするのでしょうか。初心者です。教えてください。

編集    削除
ナニはなくともヘルプ  2007-02-18 20:52:50  No: 24945  IP: [192.*.*.*]

ヘルプの「日付時刻ルーチン」参照

編集    削除
AY  2007-02-19 01:24:25  No: 24946  IP: [192.*.*.*]

答えを聞く前に、先ずは調べてみられてはいかがでしょうか?
1.Google
2.「delphi 年齢計算」で検索
サンプル沢山  ヘルプ参照

編集    削除
桜坂  2007-02-19 05:23:59  No: 24947  IP: [192.*.*.*]

皆さんご指摘ありがとうございました。

編集    削除
Fusa  2007-02-19 23:17:01  No: 24948  IP: [192.*.*.*]

ぐぐったログを調べても
バグ混入ソースが見つかる場合があるから
改めて議論する価値はあったりするよ。

ということで、書いておきました。

DelFusaBlog 年齢計算
http://delfusa.blog65.fc2.com/blog-entry-42.html#more

5年も前だけど、MLのソースを仕事でつかってたら
誕生日がうるう日、2/29の人がいて
その人のデータみる時だけエラーをだし、システムがとまった。
っていうバグを見つけるのは
大変でしたよ。
現地まで訪問してさ...

編集    削除
HOta  2007-02-19 23:46:58  No: 24949  IP: [192.*.*.*]

YearsBetween
という関数も有ります。

編集    削除
のかな?  2007-02-19 23:59:48  No: 24950  IP: [192.*.*.*]

YearsBetweenのヘルプ

YearsBetween 関数は,2 つの指定された TDateTime 値の間にあるおよその年数を返します。

「およそ」というのがコンピュータらしくなくてイイ...

編集    削除
通りすがりん  2007-02-20 01:24:02  No: 24951  IP: [192.*.*.*]

民法の規定では、日本人は誕生日の前日に年をとるはずです。
2/29生まれの人は2/28に、3/1生まれの人はうるう年では2/29に、それ以外は2/28に年をとるので、
法律上は閏日が誕生日って言う特殊状況は回避できるみたいです。
だから選挙権は選挙日の前日が誕生日の19歳(法律上は20歳だが)の人にも来るのです。

編集    削除
桜坂  2007-02-20 07:41:21  No: 24952  IP: [192.*.*.*]

改めて皆さんありがとうございます。ちょっと、ホッとしました。
解決のチェックをしてしまいましたが、よかったら質問させてください。
私が見たサイトの場合、日付はTDateTime型となっており、string型やinteger型とは異なります。
TDateTime型に変換する関数として、StrToDate関数があるようですが、これは'2007/02/18'のように区切り文字を含む必要があるため、'19550615'や'20070218'のような場合には変換できないようです。
上手い解決方法はないでしょうか。教えて下さい。

編集    削除
AY  2007-02-20 08:02:38  No: 24953  IP: [192.*.*.*]

Edit1に入っている文字列は、必ず8桁と決まっているのですね?
そうであれば、4,2,2に区切って編集してはどうでしょう

strtodate(copy(edit1.Text,1,4)+'/'+ copy(edit1.Text,5,2)+'/'+copy(edit1.Text,7,2))

桁数がまちまちであれば  問題ですが。

編集    削除
桜坂  2007-02-20 09:02:41  No: 24954  IP: [192.*.*.*]

AYさん、遅い時間にもかかわらず、ご指導頂きありがとうございます。
何とか行けそうです。copyに、こんな記述方法があったんですね。勉強になりました。

編集    削除
Ru  2007-02-20 17:20:08  No: 24955  IP: [192.*.*.*]

もしくはStringReplace関数を使用する手段もいいかもしれません。

x := StringReplace('2007/02/18', '/', '', [rfReplaceAll])
x の値は 20070218

ただし条件としては変換前の文字列の書式が YYYY/MM/DD である必要があります。

編集    削除
桜坂  2007-05-08 01:47:13  No: 24956  IP: [192.*.*.*]

ありがとうございました。

編集    削除