![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_04.png?8acaa2e)
課題で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で質問しましょう!
似たような質問が見つかりました
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
- その他(プログラミング・Web制作) VBA 1 2023/01/19 16:19
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Java Java、配列の問題を教えて欲しいです。 ・日、月、火、水、木、金、土 ・各曜日の英語 を2次元配列 2 2023/07/10 19:14
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- その他(ビジネス・キャリア) グーグルの障害者訓練プログラム募集あるがどうだろ?6時間勤務で月収22万!! 1 2023/02/17 20:36
- 仕事術・業務効率化 効率的な勉強方法(分野問わず)を教えてください 1 2023/08/16 01:33
- インターネット広告・アフィリエイト アフェリエイトサイト 作成について 5 2022/05/13 21:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複素関数はどこはあんまりやら...
-
c言語のリダイレクトによる円...
-
プログラム言語について c言語...
-
Python、プログラミングについ...
-
プログラミングでArduinoのc++...
-
0 == False はいいけど
-
CPUが16bitでも32bitOSでコンパ...
-
C言語について。
-
だれがとけるの?
-
[C言語]fputsとfprintfの違い
-
double型が正常に認識されてい...
-
gcc13.2のバグ?
-
サブルーチンを使った再帰的な...
-
バッチファイルで以下のような...
-
インクリメント演算子のみを用...
-
ArduinoでMouse関数を使用して...
-
VisualStudioで、コードを印刷...
-
C#でゲームのチートを作ること...
-
写真のプログラムは、1からnま...
-
関数ポインタの高速化のメリット
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
matplotlibで任意の角度の円弧...
-
VB2013での時間帯判定で困って...
-
経過日数を調べたい
-
Accessのクエリの値を変換(代入...
-
カラーコード 濃くしたい
-
秒数を入力すると○時間○分○秒と...
-
電卓の作成 VB
-
画像を二次元フーリエ変換
-
c言語またはVBのSin Cos Tan
-
2進数を10進数にする方法
-
Access2000で電卓プログラム。
-
C言語のプログラム
-
Excelで文字を数値に変換する方...
-
VB2010で、時刻と時間の計算に...
-
階乗の逆数を計算するFunction...
-
あと何日or何日目?を計算する方法
-
単位計算のアルゴリズム
-
自動車ローンの計算式について
-
世界測地系から東京測地系へ変換
-
擬似マインスイーパー
おすすめ情報