C言語関係掲示板

過去ログ

No.540.システム日付と誕生日から現在の年齢を計算

[戻る] [ホームページ]
No.4525

問題解決したはずだったのにぃ〜(><;)
投稿者---雪猫(2003/01/22 22:02:01)


先ほどはありがとうございましたm(__)m

でもでも、また問題発生><;
プログラムソース↓(抜粋)
#include <stdio.h>
#include <time.h>

int main(void)
{
   time_t timer;
   struct tm *t_st;
   char systemDate[8+1];

   int Birthday=19801020;
   int Nenrei=0;

   /* 現在時刻の取得 */
   time(&timer);

   /* 現在時刻を構造体に変換 */
   t_st = localtime(&timer);

   /* yyyymmddの形式に編集 */
   sprintf(systemDate,"%4d%02d%02d",t_st->tm_year+1900,t_st->tm_mon+1,t_st->tm_mday);

   Nenrei = (int)systemDate - Birthday;

   printf("Nenrei=%d\n",Nenrei);

   return 0;
}


っと、上のように書いたんです。
やりたいことは、取得したシステム日付と、Birthdayに入力された誕生日から、
現在の年齢を計算するっていうことなんですけど・・・

とんでもない数ばっかりですぅ(><;)

誰か助けてください〜〜〜〜

No.4527

Re:問題解決したはずだったのにぃ〜(><;)
投稿者---はお(2003/01/22 22:22:15)


>とんでもない数ばっかりですぅ(><;)
とんでもない数ってなんだろ? みんなちゃんと意味のある数値なんですけどねー。

> int Birthday=19801020;
1.これを「年」「月日」の数値にする
2.誕生年とシステムの年との差を求めて年齢とする
3.誕生月日の値よりシステム月日の値のほうが小さかったら年齢から-1する

これでいいように感じますが、いかがですか?

No.4528

Re:問題解決したはずだったのにぃ〜(><;)
投稿者---カンナ(2003/01/22 23:46:46)
http://hana.sakura.ne.jp/~elfin/k/


 YYYYMMDDの8桁の値の形式で引き算したあと10000で割ってもよさそう
ですね。少なくともtime_tが有効な範囲では。

 なお
>   char systemDate[8+1];
       :
>   sprintf(systemDate,"%4d%02d%02d",t_st->tm_year+1900,t_st->tm_mon+1,t_st->tm_mday);
>
>   Nenrei = (int)systemDate - Birthday;
では、systemDateをYYYYMMDDの8桁の値にはできません。
(int)systemDateが返すのはchar配列の先頭のアドレスです。
atoiを使ってください。

No.4529

Re:問題解決したはずだったのにぃ〜(><;)
投稿者---kamadoma(2003/01/22 23:47:15)



#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <memory.h>

int main(void)
{
   time_t timer;
   struct tm *t_st;
   char systemDate[8+1];
   char Birthday[8+1]="19750316";
   int Nenrei=0;
   char myBirthOfThisYear[8+1];
   char gappi[4+1];
   char nen[4+1];

   /* 現在時刻の取得 */
   time(&timer);

   /* 現在時刻を構造体に変換 */
   t_st = localtime(&timer);

   /* yyyymmddの形式に編集 */
   sprintf(systemDate,"%4d%02d%02d",t_st->tm_year+1900,t_st->tm_mon+1,t_st->tm_mday);

   /* 誕生日の月日を取得 */
   memcpy(gappi,Birthday+4,4);
   gappi[4]='\0';

   /* 誕生日の年を取得 */
   memcpy(nen,Birthday,4);
   nen[4]='\0';

   /* 今年の自分の誕生日を求める */
   sprintf(myBirthOfThisYear,"%d%s",t_st->tm_year+1900,gappi);
   printf("%s\n",myBirthOfThisYear);

   /* 今年の自分の誕生日をまだ迎えていないとき*/
   if(atol(systemDate) < atol(myBirthOfThisYear)){
        Nenrei = (t_st->tm_year+1900) - atoi(nen) - 1;
   }
   /* 今年の誕生日をすでに迎えているとき */
   else{
        Nenrei = (t_st->tm_year+1900) - atoi(nen);
   }

   printf("%d\n",Nenrei);

   return 0;
}






No.4537

Re:問題解決したはずだったのにぃ〜(><;)
投稿者---かずま(2003/01/23 03:43:40)


> やりたいことは、取得したシステム日付と、Birthdayに入力された誕生日から、
> 現在の年齢を計算するっていうことなんですけど・・・

#include <stdio.h>
#include <time.h>

int main(void)
{
    time_t now    = time(NULL);
    struct tm *tp = localtime(&now);
    int birthday  = 19801020;
    int year  = birthday / 10000;
    int month = birthday % 10000 / 100;
    int day   = birthday / 100;

    printf("%d\n", (tp->tm_year + 1900 - year)
                 - (tp->tm_mon + 1 < month ||
                    tp->tm_mon + 1 == month && tp->tm_mday < day));
    return 0;
}

birthday が文字配列なら、
    char birthday[] = "19801020";
    int year, month, day;
    sscanf(birthday, "%4d%2d%2d", &year, &month, &day);


No.4586

ををを ありがとうございましたぁぁぁ〜
投稿者---雪猫(2003/01/23 21:36:26)


皆様方のおかげでプログラムが動きましたぁ〜

明日までに残り2本プログラム作らなくてはいけないのですが。。。(><;)

出張で返事が遅くなり申し訳ありませんでした。

また何かありましたら、よろしくお願いいたします。m(__)m