年齢を計算するには?

解決


桜坂  2007-02-18 11:30:35  No: 24944  IP: 192.*.*.*

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

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

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

編集 削除
AY  2007-02-18 16:24:25  No: 24946  IP: 192.*.*.*

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

編集 削除
桜坂  2007-02-18 20:23:59  No: 24947  IP: 192.*.*.*

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

編集 削除
Fusa  2007-02-19 14: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 14:46:58  No: 24949  IP: 192.*.*.*

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

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

YearsBetweenのヘルプ

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

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

編集 削除
通りすがりん  2007-02-19 16:24:02  No: 24951  IP: 192.*.*.*

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

編集 削除
桜坂  2007-02-19 22:41:21  No: 24952  IP: 192.*.*.*

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

編集 削除
AY  2007-02-19 23: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 00:02:41  No: 24954  IP: 192.*.*.*

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

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

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

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

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

編集 削除
桜坂  2007-05-07 16:47:13  No: 24956  IP: 192.*.*.*

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

編集 削除