-3

我需要计算自年初以来经过的秒数。我对我发现的所有时间函数有点困惑。

我想也许可以使用计时器(从 1970 年 1 月 1 日开始查找秒数),但我该如何继续使用这个计时器?

4

4 回答 4

3

默认情况下,C++ 只能访问可以说是丑陋的<ctime>库,但您仍然可以摆脱它:

  1. 调用time以获取当前时间time_t(=几乎普遍地,自 1970 年 1 月 1 日以来经过的秒数,即 UNIX 纪元);
  2. 使用;将给定时间转换为struct tm(具有各种时间组件 - 年、月、... - 拆分的结构)localtime
  3. 更改此struct tm设置以使其转到当年年初;
  4. 调用mktime将给定的转换回struct tma time_t;现在你有time_t今年年初的。
  5. time_t用 ; 从您在第 1 点获得的值中减去该值difftime;现在你有自年初以来经过的秒数。
于 2012-05-01T19:47:48.017 回答
1

我认为你的意思是time功能。是的,你可以使用它。更具体地说,请看以下内容:

  • time(返回当前时间)
  • localtime(将当前时间解码为更容易获得年、月等的形式)
  • struct tm(什么localtime返回)
  • mktime(从 a 转换回struct tma time_t
  • difftime(以秒为单位计算两个time_ts 之间的差异)。
于 2012-05-01T19:48:58.997 回答
1
#include <ctime>

double seconds_since_year_began()
{
    time_t now = std::time(NULL);
    tm* tmp = std::localtime(&now);
    tm t = {0};
    t.tm_year = tmp->tm_year;
    return std::difftime(now, std::mktime(&t));
}
于 2012-05-01T19:52:46.143 回答
0
#include <ctime>

看看这里的例子:

http://www.cplusplus.com/reference/clibrary/ctime/mktime/

您想使用它来获取 1 月 1 日 0:00 的“纪元以来的秒数”,并从time().

于 2012-05-01T19:50:42.070 回答