

課題でy年m月はd日あるという形のプログラミングがあったのですが、それを発展させてクリスマスまであと何日とか、生まれてから今日で何日たったというプログラムを作りたいと思いました。
似たような例がhttp://www.asahi-net.or.jp/~KC2H-MSM/excel/excel …にありましたが、これをC言語で記述するとどのようになるのでしょうか。
AとBにあたる部分を西暦y年m月d日という形で入力して(Bは今日の日付でなくてもいいことにして)、Cにあたる部分を出力させるというのは分かりますが、先のプログラム(何月が何日あるというやつ)を使って、yを増やしていってdを足し続けることを何回も繰り返すのは無駄が多い気がするのでもっと有益な方法があるはずだと思って質問しています。
No.2ベストアンサー
- 回答日時:
Cなら標準ライブラリに日付関数があります。
#include <time.h>
/* 2001年1月1日から2004年4月28日までの日数をnissuに求める
** 1970年1月1日0時0分0秒~2038年1月19日3時14分7秒の範囲で使用
** この範囲外だとmktimeがエラーになるので使えない事に注意 */
struct tm t1,t2;
int nissu;
t1.tm_year = 2001 - 1900; /* 2001年 */
t1.tm_mon = 1; /* 1月 */
t1.tm_mday = 1; /* 1日 */
t1.tm_hour = 0;
t1.tm_min = 0;
t1.tm_sec = 0;
t2.tm_year = 2004 - 1900; /* 2004年 */
t2.tm_mon = 4; /* 4月 */
t2.tm_mday = 28; /* 28日 */
t2.tm_hour = 0;
t2.tm_min = 0;
t2.tm_sec = 0;
nissu = (int)(difftime(mktime(&t2),mktime(&t1)) / 86400.0) + 1;
上記例は「過去の日付から今日まで何日」の場合です。
「クリスマスまであと何日」の場合は、クリスマス当日は「あと0日」にする必要があるので、最後の行を
nissu = (int)(difftime(mktime(&t2),mktime(&t1)) / 86400.0);
と、1を足すのを削ります。
No.3
- 回答日時:
標準関数による解法は、#1・#2の方が書いておられますので、標準関数を使わずに1から作ってみたいならということで。
この問題は、通常は、「何年何月何日」の形式の日付は直接計算しません。質問にも書いておられるとおり、結構面倒な事になりますので。
では、どうするかというと、一例は、日付をユリウス日に変換します。ユリウス日と言うのは、ある日付が、ユリウス暦BC4713年1月1日から数えて、何日たっているかを表した一つの実数です。(小数点以下は、時・分・・・となります。)(正式のユリウス日の定義は、こうなりますが、コンピュータでの日付計算では、別の基点を取ることもあります。)
この形に直してしまえば、質問の問題は、とっても簡単に解けます。単に引き算するだけです。何日後であれば、足し算すればokです。
ユリウス日と日時の変換アルゴリズムに関しては、「ユリウス日」をキーワードにして検索してみれば、いっぱい出てきますが、一例を参考URLにあげておきます。
ちなみに、標準関数などでの計算もこれと同じ考え方の計算方法をとっています。
参考URL:http://web.kyoto-inet.or.jp/org/my-art/library/c …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのクエリの値を変換(代入...
-
Designer.vbは直接コードをいじ...
-
印刷要求順番と印刷出力順番が...
-
C#ソースをCSCファイルにてコン...
-
VBAで印刷スプール終了の判定を...
-
ManagementClassが見つからない。
-
クリレポのプリンタ設定について
-
意味不明の実行時エラーで困っ...
-
VB6をWindows10にインストール...
-
フォームの最前面が効かない
-
VB.NET+ActiveReports で印刷...
-
VB6上から印刷ダイアログを表示...
-
二重起動禁止にする理由とは
-
VB2008→VB2010でエラーが出てま...
-
vbaでPDFファイルが印刷されない
-
VBAでArrayListを使う為の「msc...
-
vba 時間の引き算 例えば 15:00...
-
VC#2005でエクスプローラを起動...
-
Keydownイベントについて
-
VB.NET(2017)で インストーラを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのクエリの値を変換(代入...
-
電卓の作成 VB
-
経過日数を調べたい
-
DateDiff関数の怪!?
-
画像を二次元フーリエ変換
-
秒数を入力すると○時間○分○秒と...
-
UTF_16からUTF_8への変換で困っ...
-
VB2013での時間帯判定で困って...
-
c言語またはVBのSin Cos Tan
-
離散コサイン変換(DCT)について
-
自動車ローンの計算式について
-
VBの時間残計算プログラム
-
Matlabで群遅延特性
-
4桁の整数の前位の足し算を行い...
-
カラーコード 濃くしたい
-
意味不明の実行時エラーで困っ...
-
Designer.vbは直接コードをいじ...
-
VBAでArrayListを使う為の「msc...
-
ManagementClassが見つからない。
-
vba 時間の引き算 例えば 15:00...
おすすめ情報