time_t --这是依赖于平台的类型。我找到了difftime,它以秒为单位返回差值,但是没有任何转换就找不到简单减法的函数。我所知道的标准并不能保证这将贯穿整个时间的连续过程,也不会告诉任何关于time_t编码的信息。另外,它也没有告诉我们两个不同的time_t不会代表一个时刻。但在现实生活中我不太确定。
time_t数据类型是为存储系统时间值而定义的ISO库中的数据类型。这些值是从标准时间()库函数返回的。此类型是标准标头中定义的ty胡枝子。ISO将time_t定义为算术类型,但没有为其指定任何特定类型、范围、分辨率或编码。同样未指定的是应用于时间值的算术运算的含义。 Unix和POSIX兼容的系统将time_t实现为整数或实浮点类型(通常为32位或64位整数),表示自1970年1月1日午夜协调世界时(不包括闰秒)开始以来的秒数。有些系统正确地处理负时间值,而另一些系统则不正确。使用带符号32位time_t类型的系统很容易受到2038年问题的影响。] t&oldid=450752800
我的意思是我需要time_t作为回报:
time_t v1;
time_t v2;
time_t diff;
diff = some_substract_fct(v2, v1)在没有time_t的情况下比较/减两个difftime是否安全?例如:
time_t v1;
time_t v2;
time_t diff;
if (v2 > v1)
{
....
}
if (v2 == v1)
{
....
}
v3 = v2-v1;相反,
if (difftime(v2, v1) > 0)
{
}
if (difftime(v2, v1) == 0.0)
{
}
diff = some_substract_fct(v2, v1)发布于 2017-08-10 14:29:00
引用C11标准:
time函数 描述 time函数确定当前日历时间。值的编码未指定。 返回 time函数返回实现对当前日历时间的最佳逼近。如果日历时间不可用,则返回值(time_t)(-1)。如果计时器不是空指针,则返回值也分配给它所指向的对象。
因此,您不能对time_t值的编码或含义作出任何假设。不同的值可以表示相同的时间,与<等的比较是没有意义的,而规则的算术减法与-是一样的。
但是,在符合POSIX标准的系统上,类型仍未指定的time_t值表示自1970年世界协调时1月1日以来的秒数。因此,您可以比较、减去和添加值与预期的行为。在其他系统上,您可能需要使用特定于系统的函数以指定的格式检索当前时间,或者使用difftime()以秒为单位计算时间差。
还请注意,您的系统上可能有另一个标准函数,它将以指定的格式提供更准确的时间戳:
timespec_get函数 简要说明 #包括 int timespec_get(struct *ts,int基); 描述timespec_get函数根据指定的时间基设置ts指向的时间间隔,以保存当前日历时间。如果基为TIME_UTC,则将tv_sec成员设置为自实现定义的时间以来的秒数,截断为整值,tv_nsec成员设置为纳秒整数,舍入到系统时钟的分辨率。 返回 如果timespec_get函数成功,则返回非零值基;否则返回零。
https://stackoverflow.com/questions/45614595
复制相似问题