アプリ版:「スタンプのみでお礼する」機能のリリースについて

プログラミングを初めて約2か月の初心者です。

C言語を使って、int型で表示されたある日付から、一日分差し引いた日付を求めたいのですが。
(例えば、2008年7月31日を求めたいなら、
20080801 から、一日分差し引い、20080731 にする。)

どうしたらいいのか全く分からない状態なので、
なにかとっかかりになるものだけでもいいので、教えていただけないでしょうか。
よろしくおねがいします。

A 回答 (3件)

ずっと昔やずっと未来の年を扱うのでなければ、



int date = 20080801;
struct tm t = { 0 };
t.tm_year = -1900 + date / 10000;
t.tm_mon = -1 + date / 100 % 100;
t.tm_mday = date % 100 - 1;
mktime(&t);

とすれば、tに正しい年月日が格納されます。
    • good
    • 1
この回答へのお礼

お礼が遅くなってしまいすみません。
とてもわかりやすい説明をありがとうございました。
無事解決することができました。

お礼日時:2008/08/27 21:28

具体的なやり方は失念しましたが、


通算日に変換して計算してから元に戻すのが一般的です。

この方法以外でやると月跨り、年跨り、閏年などの面倒な処理を手書きする必要が出てくるので実用的ではありません。
    • good
    • 0
この回答へのお礼

お礼が遅れてしまってすみません。
値を変換すればいいんですね。さっそく試してみます。
ありがとうございました。

お礼日時:2008/08/27 21:30

ある日 int date;


年 int year ;
月 int month;
日 int day ;
とすると
year = date / 10000 ;
month = (date % 10000) / 100 ;
day = date % 100 ;
で年月日を分解できます。

一日分差し引いた日付で問題なのはdayが1の場合だけです。
閏年の判定は
4の倍数でしかも100の倍数でない年は閏年。
ただし、400の倍数の年は閏年。

これで年月日が求まったら
date = year*1000+month*100+day ;
で元の書式に戻せばよい。
    • good
    • 1
この回答へのお礼

お礼が遅くなってしまいすみません。
なんとか、年・月・日に分けて、一日差し引くところまでは出来たのですが、
それをどうやって、元の書式に戻そうか悩んでいたので、とても助かりました。
ありがとうございました。

お礼日時:2008/08/27 21:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!