前言
如果,想要深入的学习Linux系统调用函数time(),以及标准C库函数ctime(),localtime()的话,还是需要自己去阅读Linux系统中的帮助文档的。
具体输入命令:
即可查阅到完整的资料信息。
time 函数
函数原型为:
#include <time.h> // 使用此函数需导入此头文件
time_t time(time_t *t);
-
这个函数接收一个指向time_t类型变量的指针作为参数,如果这个指针不是NULL,那么系统会把当前时间(自从1970年1月1日00:00:00到当前系统时间的秒数)写入这个变量中。不论参数是否为NULL,函数都会返回当前的时间。
-
time_t是一个适用于时间的数据类型,通常它是一个代表自1970年1月1日00:00:00 UTC以来的秒数的
长整数
。不同的系统可能会有不同的time_t实现,但在大多数系统中,它是一个长整数。 -
time()函数返回的时间是以秒为单位的,它不包含微秒级别的精确时间。如果你需要更精确的时间,你可能需要使用其他的系统调用,如gettimeofday()。
以下是一个使用time()函数的例子:
#include <time.h>
#include <stdio.h>
int main() {
time_t current_time;
current_time = time(NULL);
printf("The current time is %ld\n", current_time);
return 0;
}
这个程序会输出当前的系统时间,以从1970年1月1日00:00:00 UTC开始的秒数表示。
ctime函数
该函数的完整原型如下:
#include <time.h> //使用此函数需导入此头文件
char *ctime(const time_t *timer);
-
ctime函数接受一个指向time_t类型变量的指针,该变量通常表示自协调世界时(UTC)1970年1月1日00:00:00以来的秒数。
-
函数返回一个指向以空字符结尾的静态字符串的指针。该字符串表示了本地时间,并采用固定格式,如:“Wed Apr 26 16:03:53 2023\n”。
注意:ctime函数返回的指针指向一个静态字符数组
,因此每次调用ctime时,之前返回的字符串内容会被覆盖。如果需要保留多个时间字符串,应使用其他函数如asctime_r或strftime。
以下是一个使用ctime函数的示例:
#include <time.h>
#include <stdio.h>
int main() {
time_t current_time;
char* readable_time;
// 获取当前时间
time(¤t_time);
// 将时间转换为可读的字符串
readable_time = ctime(¤t_time);
printf("当前时间: %s", readable_time);
return 0;
}
-
上述示例代码中,我们首先包含了time.h头文件。
-
然后,在main函数中,我们创建了一个time_t类型的变量current_time以及一个指向字符的指针readable_time。
-
我们使用time函数获取当前时间,将其保存到current_time变量中,然后使用ctime函数将current_time转换为可读的字符串,最后通过printf函数将字符串打印到控制台。
localtime 函数
函数原型如下:
#include <time.h> //使用此函数需导入此头文件
struct tm *localtime(const time_t *timer);
这个函数接收一个指向time_t类型的指针作为参数,然后返回一个指向struct tm类型的指针。这个指针指向的结构包含了转换后的当地时间。
struct tm结构的定义如下:
struct tm {
int tm_sec; /* Seconds (0-60) */
int tm_min; /* Minutes (0-59) */
int tm_hour; /* Hours (0-23) */
int tm_mday; /* Day of the month (1-31) */
int tm_mon; /* Month (0-11) */
int tm_year; /* Year - 1900 */
int tm_wday; /* Day of the week (0-6, Sunday = 0) */
int tm_yday; /* Day in the year (0-365, 1 Jan = 0) */
int tm_isdst; /* Daylight saving time */
};
注意
,这个函数返回的指针指向的是一个静态分配的结构,这意味着这个结构可能会被随后的函数调用覆盖,所以你可能需要复制这个结构以便稍后使用。
下面是一个使用localtime()的例子:
#include <time.h>
#include <stdio.h>
int main() {
time_t current_time;
struct tm *local_time;
/* 获取当前时间 */
current_time = time(NULL);
/* 将时间转换为当地时间 */
local_time = localtime(¤t_time);
/* 输出当地时间 */
printf("The current local time is %d:%d:%d\n",
local_time->tm_hour,
local_time->tm_min,
local_time->tm_sec);
return 0;
}
这个程序首先获取当前的UNIX时间戳,然后将它转换为当地时间,并打印出这个时间。
总结
-
time():这是一个Linux系统调用,用于获取当前的系统时间。它返回自1970年1月1日00:00:00 UTC(也称为UNIX纪元)开始到当前系统时间的秒数。当你向time()函数传递一个非NULL的time_t类型的指针时,这个函数会将当前的UNIX时间戳写入到这个指针指向的变量中。
-
ctime():这是一个标准C库函数,用于将time_t类型的时间转换为可读的字符串格式。它接收一个指向time_t类型的指针作为参数,然后返回一个表示当地时间的字符串。
-
localtime():这也是一个标准C库函数,它将time_t类型的时间转换为一个包含当地时间的struct tm结构。这个函数接收一个指向time_t类型的指针作为参数,然后返回一个指向struct tm类型的指针。
这些函数一起可以让你获取系统时间,将UNIX时间戳转换为可读的字符串或当地时间的结构,以便在你的程序中使用。
最后的最后,如果你觉得我的这篇文章写的不错的话,请给我一个赞与收藏,关注我,我会继续给大家带来更多更优质的干货内容
。