我需要计算自年初以来经过的秒数。我对我发现的所有时间函数有点困惑。
我想也许可以使用计时器(从 1970 年 1 月 1 日开始查找秒数),但我该如何继续使用这个计时器?
默认情况下,C++ 只能访问可以说是丑陋的<ctime>
库,但您仍然可以摆脱它:
time
以获取当前时间time_t
(=几乎普遍地,自 1970 年 1 月 1 日以来经过的秒数,即 UNIX 纪元);struct tm
(具有各种时间组件 - 年、月、... - 拆分的结构)localtime
struct tm
设置以使其转到当年年初;mktime
将给定的转换回struct tm
a time_t
;现在你有time_t
今年年初的。time_t
用 ; 从您在第 1 点获得的值中减去该值difftime
;现在你有自年初以来经过的秒数。我认为你的意思是time
功能。是的,你可以使用它。更具体地说,请看以下内容:
time
(返回当前时间)localtime
(将当前时间解码为更容易获得年、月等的形式)struct tm
(什么localtime
返回)mktime
(从 a 转换回struct tm
a time_t
)difftime
(以秒为单位计算两个time_t
s 之间的差异)。#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));
}
#include <ctime>
看看这里的例子:
http://www.cplusplus.com/reference/clibrary/ctime/mktime/
您想使用它来获取 1 月 1 日 0:00 的“纪元以来的秒数”,并从time()
.