質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

3回答

2334閲覧

時間の比較(c言語)

vaiton.jp

総合スコア2

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/06/16 06:00

前提・実現したいこと

C言語で時間を比較する方法を知りたいです。
例えば変数aに2020年3月○○日○○時○○分○○秒という時間情報を入れ、変数bに2021年3月○○日○○時○○分○○秒という時間情報を入れ、2つの時間を比較する方法が知りたいです。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

int main(void)
{
変数a = ある時間;
変数b = 変数aより未来の時間

if(変数aとbを比較してbの方が未来であれば)
{
処理を行う;
}

### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2021/06/16 06:02

調べたこと、試したことを追記してください。
nob.

2021/06/17 02:41

何がわからないのでしょう? どっちが先、どっちが後、なら小学生でもわかると思いますが。 質問者さん、ご自身は後先をどうやって判定されますか? それと同じ事をプログラム言語で書くだけです。 まず、日本語で書きましょう。それをプログラム言語に翻訳しましょう。 その段階で分からなければ、それを質問しましょう。
guest

回答3

0

質問ポイントが不明ですが、時刻は1970年1月1日0時0分0秒からの通算秒数で表すというのが普通です。Unixtimeと言います。大小比較はこの整数値で行います。
ミリ秒まで扱いたいとか、1970年以前も扱いたいとか言う場合は別。

"2021年6月16日22時20分3秒"というような文字列を上記のUnixtimeに変換したいと言うことであれば、strptime関数が使えます。整数値に変換してから比較します。
参考:Man page of STRPTIME

投稿2021/06/16 13:41

otn

総合スコア85762

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

大小関係が知りたいだけなら、
桁数の揃った数字の文字列にして比較するというやり方もあるでしょう。

C

1#include <stdio.h> // sscanf, sprintf 2#include <string.h> // strcmp 3 4int main(void) 5{ 6 char a[] = "2020年3月4日5時6分7秒"; 7 char b[] = "2021年3月31日23時59分59秒"; 8 int y, m, d, hh, mm, ss; 9 char aa[16], bb[16]; 10 11 sscanf(a, "%d年%d月%d日%d時%d分%d", &y, &m, &d, &hh, &mm, &ss); 12 sprintf(aa, "%04d%02d%02d%02d%02d%02d", y, m, d, hh, mm, ss); 13 sscanf(b, "%d年%d月%d日%d時%d分%d", &y, &m, &d, &hh, &mm, &ss); 14 sprintf(bb, "%04d%02d%02d%02d%02d%02d", y, m, d, hh, mm, ss); 15 if (strcmp(aa, bb) < 0) { 16 printf("%s < %s\n", aa, bb); 17 } 18}

追記
strcmp(a, b) と間違っていたので訂正しました。

投稿2021/06/16 15:02

編集2021/06/17 01:04
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

例えば変数aに2020年3月○○日○○時○○分○○秒という時間情報を入れ、変数bに2021年3月○○日○○時○○分○○秒という時間情報を入れ、2つの時間を比較する方法が知りたいです。

両者をUnix Timeで管理すれば、「(変数aとbを比較してbの方が未来であれば」という条件は単なる大小比較で片付きます。

投稿2021/06/16 06:24

maisumakun

総合スコア145930

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問