Time 用于返回自1900年1月1日起的秒数的函数

Time 用于返回自1900年1月1日起的秒数的函数,time,linux-kernel,Time,Linux Kernel,内核中是否有一个函数,用于将从egdo_gettimeofday返回的timespec转换为“64位无符号定点数字”中自1/1/1900起的秒数,如中所述?您想要的有几个问题。但是,您需要查看内核在做什么 尝试这样的搜索: http://www.google.com/codesearch#search/&q=adjtimex%20lang:%5Ec$&type=cs 这将返回直接读取和设置内核内部计时数据的代码。你将不得不滚动浏览许多列表 自1900年1月1日起,npt使用相当

内核中是否有一个函数,用于将从eg
do_gettimeofday
返回的
timespec
转换为“64位无符号定点数字”中自1/1/1900起的秒数,如中所述?

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

http://www.google.com/codesearch#search/&q=adjtimex%20lang:%5Ec$&type=cs
这将返回直接读取和设置内核内部计时数据的代码。你将不得不滚动浏览许多列表

自1900年1月1日起,npt使用相当于一个struct timeval的两个32位无符号整数,一个跟踪秒,另一个跟踪秒的分数。ntp和timeval结构中跟踪的分数不同

其中一个问题是:您使用的是32位还是64位的时间和日期api?请注意,1900不能表示为32位api(这是32位Linux输出,使用TZ=UTC)

#包括
#包括
无效时间(字符*dest,时间\u t*lt)
{
strftime(dest,80,“%c”,localtime(lt));
printf(“%08x(%010u):%s\n”、*lt、*lt、dest);
}
内部主(空)
{
char tmp[80]={0x0};
时间lt[8]={1,0xffffffff,0x7fffffff,0x8000000,0},*p=lt;
而(*p)ptime(tmp,p++);
返回1;
}
输出:
00000001(0000000001):1970年1月1日星期四00:00:01
ffffffff(4294967295):1969年12月31日星期三23:59:59
7fffffff(2147483647):星期二1月19日03:14:07 2038
80000000(2147483648):1901年12月13日星期五20:45:52
记下开始和结束时间。他们与1900年没有任何关系。64位api也以不同的方式错过了1900

ntp协议按照自己的节奏前进。它从0秒开始,将在2037年的某个时候“耗尽”时间(如Y2K问题)


我会查找C代码xntp或ntp并使用它们的表示,但不希望使用Linux时间和日期api对其进行任何处理。您必须查询ntp服务器才能可靠地获取所需内容。

对不起,我在咆哮,但您真的希望我们一步一步地为您构建项目吗?您的上一个问题为您提供了转换到Unix时代的答案;两个数字的加减肯定在你的智力范围内吗?(另见:)不,我当然不希望有人为我建造任何东西!但这是一个问答网站,据我所知,没有规则禁止快速连续问两个相关问题。如果我错了,请纠正我。这本身并没有错,但首先尝试自己解决问题,然后展示你已经尝试过的、有效的、没有尝试过的以及如何解决是一种良好的礼貌。在你前进的每一步都寻求帮助,甚至在
#1
上一点努力都没有,闻起来很像“给我密码”,分成一小块一小块。我不是说这是你的情况,但是如果没有#2,很难区分大量的复制粘贴程序。好吧——请注意,我不是问如何将timespec结构转换为数字,而是问是否有一个内核函数可以为我做到这一点。内核并不真正关心表示逻辑,所以:不。从Unix时代转换成这个应该很简单,不是吗?
#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