从现在到C

时间:2015-05-11 17:12:28

标签: c time count

我需要能够计算现在和特定时间之间的秒数(比如下一次下午3点)。我看到了一些类似的问题,但我无法使用其中任何一个。

1 个答案:

答案 0 :(得分:1)

C标准库有两种时间表示:time_t是自Unix Epochstruct tm以来的秒数,您可以在其中单独设置秒,分钟等。

因此,为了获得挂钟显示3 p.m.的下一个时刻,您需要花费当前时间time(NULL),将其转换为struct tm,提前时间为3下午通过设置结构字段,将其转换回time_t并计算差异:

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

int main() {
    time_t now, next3pm;
    struct tm threepm;

    // Get current time (now)
    now = time(NULL);

    // Copy current date to a `threepm`, and set time
    memcpy(&threepm, gmtime(&now), sizeof(struct tm));
    if(threepm.tm_hour > 15) {
        // Advance to a next day
        ++threepm.tm_mday;
    }

    threepm.tm_hour = 15;
    threepm.tm_min = threepm.tm_sec = 0;

    printf("%.f seconds till 3:00 PM\n", difftime(mktime(&threepm), now));

    return 0;
}

我使用了UTC转换函数gmtime() / mktime()。由于没有mktime()的时间版本版本,您可能需要自行转换时间。使用UTC时间可能会导致进入第二天的麻烦,因为它不应该这样做(因为根据UTC已经是15:00,但根据当地时间还不到15:00)。

或者,classic joke版本:

int main() {
    time_t t;
    struct tm* tm;
    do {
        t = time(NULL);
        tm = gmtime(&t);
        usleep(1000000);
    } while(tm->tm_hour != 15 && tm->tm_min != 0);

    puts("0 seconds till 3:00 PM");
}