• ベストアンサー

C言語を使って、ある特定の日の前日を求めたい

プログラミングを初めて約2か月の初心者です。 C言語を使って、int型で表示されたある日付から、一日分差し引いた日付を求めたいのですが。 (例えば、2008年7月31日を求めたいなら、 20080801 から、一日分差し引い、20080731 にする。) どうしたらいいのか全く分からない状態なので、 なにかとっかかりになるものだけでもいいので、教えていただけないでしょうか。 よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.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に正しい年月日が格納されます。

agl
質問者

お礼

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

その他の回答 (2)

  • bodyshot
  • ベストアンサー率14% (46/326)
回答No.2

具体的なやり方は失念しましたが、 通算日に変換して計算してから元に戻すのが一般的です。 この方法以外でやると月跨り、年跨り、閏年などの面倒な処理を手書きする必要が出てくるので実用的ではありません。

agl
質問者

お礼

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

  • buriburi3
  • ベストアンサー率44% (353/792)
回答No.1

ある日 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 ; で元の書式に戻せばよい。

agl
質問者

お礼

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

関連するQ&A

専門家に質問してみよう