【发布时间】:2017-08-23 17:47:55
【问题描述】:
我正在编写一个函数,除其他外,它必须打印出经过的时间计数器。它通过引用接收开始时间_start,并将其与current 进行比较,两者都键入为time_t。我想使用strftime() 以 ISO 8601 格式打印出观察到的时间增量。这是我尝试做的:
// Negative start time implies program has not begun
if (*_start > 0) {
time_t elapsed = current - *_start;
strftime(time_str, sizeof(time_str) - 1, "%T", localtime(&elapsed));
printf("%s\n", time_str);
}
这是我运行程序后立即得到的输出
01:00:00
01:00:00
01:00:01
01:00:01
01:00:01
秒工作正常,如果我让它运行更长时间,它们会按预期增加,分钟也是如此,但是小时从 01 开始而不是 00。为什么会发生这种情况?我怎样才能让小时数开始归零,比如分钟数?
【问题讨论】:
-
通过使用
localtime,您实际上得到了自 1970 年 1 月 1 日午夜以来的日期您的本地时区。例如,在美国西海岸,如果elapsed_time = 0然后strftime表示16:00:00,因为localtime(0)这里是Wed Dec 31 16:00:00 1969。我猜你是在欧洲大陆时间。您可以改用gmtime,但这最多只能工作 24 小时。