前言

如果,想要深入的学习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(&current_time);

    // 将时间转换为可读的字符串
    readable_time = ctime(&current_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(&current_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时间戳转换为可读的字符串或当地时间的结构,以便在你的程序中使用。

  • 最后的最后,如果你觉得我的这篇文章写的不错的话,请给我一个赞与收藏,关注我,我会继续给大家带来更多更优质的干货内容
05-16 16:54