繁体   English   中英

检查当前时间(无日期)在C中两次之间

[英]Check current time (without date) is between two times in 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是字符串。

谢谢

我将使用sscanf将char缓冲区转换为int,然后进行比较

例:

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);

最短的比较解决方案包括将所有字符串时间戳转换为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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM