1:UTC时间
举例:Fri,08, Nov 2002 09:42:22 +0800
全球分为24个时区
北京为东八区(CST)表示为+0800
linux命令行输入date命令最后面跟了一个CST就这意思
纽约为西五区表示为-0500
北京就比纽约快了13个小时

2:linux系统获取时间
RTC:实时时钟,电脑一个部件,记录了实时时间现在是几点就是几点。
jiffies:内核中的一个全局变量,内核每过一个节拍时间,这个jiffies+1。节拍时间就是内核调度时间用hz表示1khz=1ms
系统开机,内核从RTC读取实时时间,jiffies初始化=这个实时时间(比如2021 4-3 12:00:00)- (1970 1-1 0:0:0 +000)
然后系统运行每过一个节拍时间,这个jiffies就加1

三:linux获取系统时间的API及库函数

1:time函数
具体参考 man 2 time
作用:返回值为现在的实时时间距离(1970 1-1 0:0:0)过去多少秒,对就是多少秒,用long int存储,感觉这个返回值挺大,其实long int更大足够保存这个返回值了

2:ctime函数
很省事,把刚才那个获得的秒返回值具体化到年月日,星期,时分秒。并且返回字符串。
形参传进去那个秒变量的地址,return用一个字符串接收,emm下面我写的源码很憨憨
char str[50]; str = ctime(&sectime);//sectime为time获得的返回值 str是常量不能作为左值
两种思路:定义一个指针指向str用指针接收返回值;strcpy;

3:localtime函数
上面的ctime函数只输出一种固定格式不能DIY创作。
这个函数返回结构体,结构体中包含如下成员:年,月,日,时,分,秒,day of the week,day of the year,还有一个不认识。
上述成员都是int型,还有以下注意点:year返回值要+1900,月份(0-11)要+1。详情参考man 3 localtime
解释一下man 1为命令行的命令2为系统调用函数,3为c库函数,c库函数更上层一点吧,移植更容易吧,就比如fread这个c库函数就封装了linux系统调用函数read,(可能其他平台比如windows的系统调用函数也包含进去)

四:题外话,输出型参数
time函数原型:
time_t time(time_t *tloc);

一般我们写函数都是往里面传一个数,得到结果返回。
这里我们先定义time_t变量sectime。通过time函数给他赋值
可以
sectime = time(NULL);
也可以:
time(&sectime);

再比如stat函数查看文件属性
int stat (path,struct stat *buf)

我定义一个结构体struct stat kongke
这个kongke变量是一个空壳,通过stat函数给它写入各种成员具体的值,就是把函数执行的结果输出到这个参数中去就叫输出型参数

一般情况下man手册里面带const的指针常量(const char *应该叫常量指针)的是普通的输入性参数,不带const的指针变量是输出型参数。

再引出话题常量指针和指针常量区别
其实别这样比较,应该用指针变量和指针常量来比较更容易理解
指针是一个变量,我可以乱七八糟的指
比如
int *p; int a; int b; 我这个p指针今天可以指向a,明天可以指向b,后天还能指向c,为所欲为
但是指针常量int*const p;就不能乱指了一旦说明p=&a就只能指向a了。你a=1,=2,=100,我都不管,我就只管指向a。