我需要知道
会是什么time(NULL)
当前系统时间为:
1997-07-16T19:20:30.49+01:00
或
1997-07-16T19:20:30.50+01:00
答案 0 :(得分:4)
如果time()
报告秒数(最常见的time_t
),则肯定会截断,否则可能会报告 now 明天。
C没有指定这个,但它是time()
唯一合理的实现。
查看gettimeofday等明确提供分数和time_t
。
一个相对较新的标准C函数int timespec_get(struct timespec *ts, int base)
确实提供了可能适用于time()
的指导,因为 now 的小数部分被截断。
如果
base
为TIME_UTC
,则tv_sec
成员将设置为自实施定义时期以来的秒数,被截断为整数值以及tv_nsec
成员设置为纳秒的整数,四舍五入到系统时钟的分辨率。
样本用法:
#include <stdio.h>
#include <time.h>
void print_now(void) {
struct timespec ts = { 0 };
int base = timespec_get(&ts, TIME_UTC);
if (base) {
printf("%lld.%09ld\n", (long long) ts.tv_sec, ts.tv_nsec);
}
}
答案 1 :(得分:4)
标准没有指定确切的行为,但最可能的行为是截断任何小数秒。
举个例子,我在CentOS7上运行了以下命令:
//div[contains(@class,'additional-practice-location')]//div[@class='practice-location']/text()[preceding::strong[contains(text(), 'Phone')][1]]
当第二个增加时输出以下内容:
time_t t;
struct timeval tv;
int i;
for (i=0;i<500000;i++) {
t = time(NULL);
gettimeofday(&tv, NULL);
printf("t=%ld, tv=%ld.%06ld\n", t, tv.tv_sec, tv.tv_usec);
}
答案 2 :(得分:0)
它将忽略NULL并返回自1970年1月1日纪元开始以来的秒数。 此外,time_t与时间函数不同。毫秒将被截断,并且计时器的粒度取决于设置以及硬件粒度。 有些系统使用插值来获得超过秒的软时间。 如果在Linux中讨论时间,请参阅:http://man7.org/linux/man-pages/man7/time.7.html,在那里您会发现硬件实时和软实时之间有明显的区别。去看看jiffies,以及如何设置硬件。