- ベストアンサー
C言語を使って、ある特定の日の前日を求めたい
プログラミングを初めて約2か月の初心者です。 C言語を使って、int型で表示されたある日付から、一日分差し引いた日付を求めたいのですが。 (例えば、2008年7月31日を求めたいなら、 20080801 から、一日分差し引い、20080731 にする。) どうしたらいいのか全く分からない状態なので、 なにかとっかかりになるものだけでもいいので、教えていただけないでしょうか。 よろしくおねがいします。
- みんなの回答 (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に正しい年月日が格納されます。
その他の回答 (2)
- bodyshot
- ベストアンサー率14% (46/326)
具体的なやり方は失念しましたが、 通算日に変換して計算してから元に戻すのが一般的です。 この方法以外でやると月跨り、年跨り、閏年などの面倒な処理を手書きする必要が出てくるので実用的ではありません。
お礼
お礼が遅れてしまってすみません。 値を変換すればいいんですね。さっそく試してみます。 ありがとうございました。
- buriburi3
- ベストアンサー率44% (353/792)
ある日 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 ; で元の書式に戻せばよい。
お礼
お礼が遅くなってしまいすみません。 なんとか、年・月・日に分けて、一日差し引くところまでは出来たのですが、 それをどうやって、元の書式に戻そうか悩んでいたので、とても助かりました。 ありがとうございました。
お礼
お礼が遅くなってしまいすみません。 とてもわかりやすい説明をありがとうございました。 無事解決することができました。