アプリ版:「スタンプのみでお礼する」機能のリリースについて

教えて下さい。

C言語を用いてプログラミングをしています。
時刻をマイコン内部で1分毎にカウントしていますが、
外部入力があった際は、時刻を外部入力値に更新します。

時刻は以下の構造体で構成しています。

[年] 0x00~0x63 未設定:0x00
[月] 0x01~0x0c 未設定:0x00
[日] 0x01~0x1f 未設定:0x00
[時] 0x00~0x17 未設定:0xff
[分] 0x00~0x3b 未設定:0xff
[曜] 0x01~0x07 未設定:0x00

-----------------------------------------------------
typedef struct {
 unsigned char year_dt;
 unsigned char month_dt;
 unsigned char day_dt;
 unsigned char hour_dt;
 unsigned char min_dt;
 unsigned char week_dt;
}CALENDER_INFO;

CALENDER_INFO Calender_Before;
CALENDER_INFO Calender_After;

void Calender_Update(void){

 /* 処理前の時刻取得 */
 Calender_Before= Calender_Data;

 if(FLG_ON == F_SOUSA_A){
  Calender_Data = Calender_a;   /* 外部操作[a]データ反映 */
 }else{
  if(FLG_ON == F_SOUSA_B){
   Calender_Data = Calender_b;   /* 外部操作[b]データ反映 */
  }else{
   Add_1min_Calender();     /* 操作無ければ1分進める */
  }
 }

 /* 処理後の時刻取得 */
 Calender_After = Calender_Data;

 /* 差分算出 */
 ???????

return;
}
-----------------------------------------------------

時刻は[正]又は[負]のどちらの方向にも変更される可能性があります。

処理前の時刻情報と処理後の時刻情報をメンバ毎に演算するしかないのでしょうか?
演算の際に時刻の繰り上がりや繰り下がりを考慮しますと、
膨大なif文だらけになりバグが多発していまうのではないかと懸念しております。

初歩的な質問で申し訳ありませんが、
時刻計算にお詳しい方がいらっしゃいましたらご教示宜しくお願い致します。

A 回答 (2件)

日付時刻の構造体は自作のものでなきゃいけない理由はあるのでしょうか?


tm構造体を使えば二つの時間の差も簡単に出せます

time関数を使えるならtm構造体を使わず差を算出できます

文章で書くとややこしくなりそうなので参考サイトを貼ります
http://www.c-tipsref.com/tips/time/time.html
http://www1.cts.ne.jp/~clab/hsample/Time/Time5.h …
    • good
    • 0
この回答へのお礼

恥ずかしながらtm構造体の存在を知りませんでした。
ご教示頂いた参考サイトのmktime関数とlocaltime関数で
問題は解決できそうです。

ご丁寧にありがとうございました。

お礼日時:2017/09/22 07:58

時刻関係の関数を使えば済むことですが、基本的な考え方では年月日時分秒を最小単位である『秒』単位の値に換算してから差分計算をします。


1時2分3秒なら3723秒にします。
もちろんうるう年も考慮しなければなりません。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2017/09/22 07:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!