2016-10-24 4 views
0

で2倍の間にあるあなたがCでこれを実装するために私を助けることができる:チェック現在の時刻は、C

((on_time <= off_time and CURTIME() >= on_time and CURTIME() <= off_time) or 
(off_time < on_time and (CURTIME() <= off_time or CURTIME() >= on_time)) 

を私はon_time = 18:00:00off_time = 01:00:00(深夜翌日)を持っています。 current time : 19:27:00がonとoff_timeの間にあるかどうかをチェックしたいと思います。 onとoff_timeは文字列です。

おかげ

+0

もし 'off_time = 01:00:00あなたはoff_time' 1時今朝に'設定するのですか、次の日ですか? – chux

答えて

0

最短比較ソリューションをすべての文字列タイムスタンプをtime_t値に変換することです。

ソースをBrian McFarlandとして改善すると、memset()が示唆されます。

struct tm tmVar; 
time_t t_on_time, t_off_time, t_curr_time; 

    memset(&tmVar, 0, sizeof(tmVar));  
    if(sscanf(on_time, "%d:%d:%d", &tmVar.tm_hour, &tmVar.tm_min, &tmVar.tm_sec)==3) { 
     t_on_time = mktime(&tmVar); 
    } 
    memset(&tmVar, 0, sizeof(tmVar)); 
    if(sscanf(off_time, "%d:%d:%d", &tmVar.tm_hour, &tmVar.tm_min, &tmVar.tm_sec)==3) { 
     t_off_time = mktime(&tmVar); 
    } 
    memset(&tmVar, 0, sizeof(tmVar)); 
    if(sscanf(CURTIME(), "%d:%d:%d", &tmVar.tm_hour, &tmVar.tm_min, &tmVar.tm_sec)==3) { 
     t_curr_time = mktime(&tmVar); 
    } 

そして、あなたの比較は次のとおりです。

if (((t_on_time <= t_off_time) && (t_curr_time >= t_on_time) && (t_curr_time <= t_off_time)) || 
((t_off_time < t_on_time) && ((t_curr_time <= t_off_time) || (t_curr_time >= t_on_time))) { 
    // To do something 
} 
+2

'mktime'に関するいくつかの注意点:1)' struct tm'を 'time_t'に変換できない場合は-1を返します、2)基礎となる' struct tm'を操作して正規化し、3)もしあなたが 'memset(&tmVar、0、sizeof(tmVar))'をしなければ、各scanfの前に、(#2の部分的に)期待したものが得られません。 –

0

私はint型へのcharバッファを変換するために、sscanf関数を使用し、それら

例を比較します:

int on_hour, on_minute, on_second; 
int off_hour, off_minute, off_second; 

sscanf(on_timestr, "%d:%d:%d", &on_hour, &on_minute, &on_second); 
sscanf(off_timestr, "%d:%d:%d", &off_hour, &off_minute, &off_second); 

if (on_hour < off_hour) 
//do your compare logic 

または:

#include <time.h> 

tm on_time, off_time; 

sscanf(on_time, "%d:%d:%d", &on_time.tm_hour, &on_time.tm__min, &on_time.tm_sec); 
sscanf(off_time, "%d:%d:%d", &off_time.tm_hour, &off_time.tm__min, &off_time.tm_sec); 
+0

例2の ''操作(例:on_time/off_timeに 'mktime')を使用しているかどうかを正確にチェックしてください。 –

+0

OPの問題は、実際にはoff_timeは翌日の午前1時だと思います。 –

関連する問題