C函数time()如何处理小数秒?

时间:2018-01-02 01:01:37

标签: c

time()函数将返回自1970年以来的秒数。我想知道如何对返回的第二个进行舍入。

例如,对于100.4s,它会返回100还是101?

是否有明确的定义?

3 个答案:

答案 0 :(得分:4)

ISO C标准并没有多说。它只表示time()返回

  

实施对当前日历时间的最佳近似值

结果是time_t类型,它是一个真正的类型(整数或浮点),“能够表示时间”。

许多系统将time_t实现为有符号整数类型,表示自1970-01-01 00:00:00 GMT以来的整数秒。

我的Ubuntu系统上的快速实验(比较time()gettimeofday()返回的值)表示time()返回的值被截断,例如,如果高精度时间为1514866171.750058time()函数将返回1514866171。 ISO C和POSIX都不能保证这一点,但我希望它能在任何类UNIX系统上保持一致。

答案 1 :(得分:3)

  

7.27.2.4p3

     

time函数返回实现的最佳近似值   当前的日历时间。如果是,则返回值(time_t)( - 1)   日历时间不可用。如果timer不是空指针,那么   返回值也分配给它指向的对象。

它是实现定义的,因此除非您指定编译器和操作系统,否则答案是“最佳近似”。

答案 2 :(得分:2)

  

是否有明确的定义?

没有

http://en.cppreference.com/w/c/chrono/time

  

time_t中的日历时间编码未指定,但大多数系统符合POSIX规范,并返回保持自Epoch以来的秒数的整数类型的值。 time_t是32位有符号整数(许多历史实现)的实现在2038年失败。