我需要能够计算现在和特定时间之间的秒数(比如下一次下午3点)。我看到了一些类似的问题,但我无法使用其中任何一个。
答案 0 :(得分:1)
C标准库有两种时间表示:time_t
是自Unix Epoch和struct 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");
}