自19/1/19以来返回秒数的功能

时间:2012-01-10 16:49:10

标签: time linux-kernel

内核中是否有一个函数用于将从timespec返回的do_gettimeofday转换为自“1/4/1900”以来的“64位无符号定点数”中的秒数如RFC 1305

中所述

1 个答案:

答案 0 :(得分:0)

您想要的有几个问题。但是要看看你的内核在做什么 尝试这样的搜索:

http://www.google.com/codesearch#search/&q=adjtimex%20lang:%5Ec$&type=cs

这应该返回用于直接读取和设置内核的内部时间保存数据的代码。你必须滚动很多列表。

npt使用的是结构时间值,两个32位无符号整数,一个跟踪秒,另一个跟踪1900年1月1日以来的分数。跟踪的分数在ntp与timeval结构中是不同的。

其中一个问题是:您使用32位还是64位时间&约会api?请注意,1900不能代表32位api(这是32位Linux输出,使用TZ = UTC)

#include <time.h>
#include <stdio.h>
void ptime(char *dest, time_t *lt)
{
   strftime(dest, 80, "%c", localtime(lt));
   printf("%08x(%010u): %s\n", *lt, *lt, dest);
}

int main(void)
{
   char tmp[80]={0x0};
   time_t lt[8]={1, 0xffffffff, 0x7fffffff, 0x80000000, 0}, *p=lt;
   while(*p) ptime(tmp, p++);
   return 1;
}
output:
00000001(0000000001): Thu Jan  1 00:00:01 1970
ffffffff(4294967295): Wed Dec 31 23:59:59 1969
7fffffff(2147483647): Tue Jan 19 03:14:07 2038
80000000(2147483648): Fri Dec 13 20:45:52 1901

请注意开始和结束时间。它们与1900没有任何关系.64位api也以不同的方式错过了1900。

ntp协议走向了自己的鼓点。它从0秒开始,并将在2037年的某个地方“耗尽”时间(如Y2K问题)。

我会查找C代码xntp或ntp并使用它们的表示,但不要期望能够使用Linux时间和它做任何事情。日期api。您必须查询ntp服务器才能可靠地获得所需内容。