gpt4 book ai didi

c - C中的格式化耗时

转载 作者:行者123 更新时间:2023-12-02 08:14:36 27 4
gpt4 key购买 nike

我正在编写一个函数,除其他外,它必须打印出耗时计数器。它通过引用接收开始时间 _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。为什么会这样?我怎样才能让小时开始归零,就像分钟一样?

最佳答案

time_t 通常(参见编辑)存储绝对时间戳(自 1970 年 1 月 1 日午夜 UTC 以来的秒数)。通过计算 current - *_start,您将获得以秒为单位的耗时(根据需要),然后将其传递给 localtimestrftime ,您是在告诉计算机计算自程序启动以来耗时,并将其视为自 UTC 1-1-1970 午夜以来耗时。

我猜这恰好是您系统本地时区的 01:00:00。

我不知道有 C99 函数可以打印耗时,但是自己写一个并不难。

void format_elapsed_time(char *time_str, int total_seconds_elapsed) {
int hours_elapsed = total_seconds_elapsed / 3600;
int minutes_elapsed = (total_seconds_elapsed % 3600) / 60;
int seconds_elapsed = total_seconds_elapsed % 60;
sprintf(time_str, "%02i:%02i:%02i", hours_elapsed, minutes_elapsed, seconds_elapsed);
}

编辑:正如@chux 指出的那样,time_t 不必将时间戳存储为自 1-1-1970 以来的秒数。参见 this answer了解详情。

关于c - C中的格式化耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43107072/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com