タイムリミットを計算する。

解決


無遅刻無欠勤。  2007-11-08 03:11:59  No: 66772

タイムリミットを求める。コードを書きたいのですが。
09:23:24分に実行させるコードのタイムリミットを求めるにはどうしたいいのでしょうか?
現在時刻が09:14;53だとして
00:08:31秒→00:08:30秒→00:08:29秒→とカウントダウンするようにするには
どうしたらいいのでしょうか?
時刻の引き算のコードの書き方だけでもいいので
どなたか教えて頂けませんでしょうか?
宜しくお願いします。


あむたり  2007-11-08 03:59:16  No: 66773

秒に変換してやれば差を求めるのは簡単ですよね。


無遅刻無欠勤。  2007-11-08 04:03:02  No: 66774

00:08:31
の形式にしたいのですが。


とおりすがり  2007-11-08 06:46:44  No: 66775

頭かたすぎ
表示のときに秒からHH:MM:SSの形にすればいい


ぴょぴょ  2007-11-08 07:02:54  No: 66776

#include <time.h>
#include <stdio.h>

// 時分秒の計算
#define HMS(h,m,s)    ((h)*3600+(m)*60+(s))
#define tmHMS(tm)    HMS((tm).tm_hour,(tm).tm_min,(tm).tm_sec)

// メイン関数
int main( void )
{
  struct tm tmLimit;
  struct tm tmClock;
  int timeLimit;
  int timeClock;
  int exitFlag;
  time_t t;
  
  // 実行時刻の設定
  tmLimit.tm_hour = 9;
  tmLimit.tm_min  = 23;
  tmLimit.tm_sec  = 24;
  timeLimit = tmHMS( tmLimit );
  
  do {
    // 現在時刻の取得
    time( &t );
    tmClock = *localtime( &t );
    timeClock = tmHMS( tmClock );
    // 差の計算
    timeClock = timeLimit - timeClock;
    // 表示
    printf( "%02d:%02d:%02d\r",
      ((timeClock / 3600) % 24),
      ((timeClock /   60) % 60),
      ((timeClock /    1) % 60) );
    // 終了フラグの設定
    exitFlag  = (tmClock.tm_hour == tmLimit.tm_hour);
    exitFlag &= (tmClock.tm_min  == tmLimit.tm_min);
    exitFlag &= (tmClock.tm_sec  == tmLimit.tm_sec);
  } while ( !exitFlag );
  
  return 0;
}
/*
http://wisdom.sakura.ne.jp/programming/c/c60.html
*/


ぴょぴょ  2007-11-08 07:09:56  No: 66777

終了条件はtimeClockがゼロなら実行時間と見ればよかった。

do {
  // 現在時刻の取得
  time( &t );
  tmClock = *localtime( &t );
  timeClock = tmHMS( tmClock );
  // 差の計算
  timeClock = timeLimit - timeClock;
  // 表示
  printf( "%02d:%02d:%02d\r",
    ((timeClock / 3600) % 24),
    ((timeClock /   60) % 60),
    ((timeClock /    1) % 60) );
} while ( timeClock != 0 );


ぴょぴょ  2007-11-08 07:11:09  No: 66778

終了条件はtimeClockがゼロなら実行時間と見ればよかった。
またはtimeClockがゼロ以上ならループする条件にする。

do {
  // 現在時刻の取得
  time( &t );
  tmClock = *localtime( &t );
  timeClock = tmHMS( tmClock );
  // 差の計算
  timeClock = timeLimit - timeClock;
  // 表示
  printf( "%02d:%02d:%02d\r",
    ((timeClock / 3600) % 24),
    ((timeClock /   60) % 60),
    ((timeClock /    1) % 60) );
} while ( timeClock != 0 );


無遅刻無欠勤。  2007-11-08 16:07:46  No: 66779

無事解決しました!
お答えしてくださったみなさまありがとうございます!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加