Linux的时间函数

2023年7月19日,周三下午

我今天基于GitHub搭建了自己的博客网站,欢迎大家来我的个人博客网站阅读我的博客

巨龙之路的GitHub个人博客 (julongzhilu.github.io)


目录

  • time
  • 函数原型
  • 使用方法
  • ctime
  • 函数原型
  • 使用方法
  • 疑惑
  • gmtime、 localtime
  • 函数原型
  • 什么是分解时间
  •  使用方法
  • mktime
  • 函数原型
  • 使用方法
  • asctime
  • 函数原型
  • 使用方法


time

函数原型

获取自 1970 年 1月 1 日早晨零点到现在的秒数,也叫做

#include
time_t time(time_t *timep);
使用方法

如果time函数的参数timep为NULL,那么time函数会返回自 1970 年 1月 1 日早晨零点到现在的秒数;

#include
#include
int main(){
    time_t tm;
    tm=time(NULL);
    printf("%d",tm);
}

如果time函数的参数不为NULL,那么time函数会把自 1970 年 1月 1 日早晨零点到现在的秒数赋值给timep指向的time_t类型变量

#include
#include
int main(){
    time_t tm;
    time(&tm);
    printf("%d",tm);
}

建议使用time(NULL),因为这样可以减少出错的可能性,并且使用起来更简单


ctime

函数原型

将time_t转换成可打印格式,所谓可打印格式类似于“Wed Jul 19 01:59:16 2023”

#include
char *ctime(const time_t *timep);
使用方法

把一个指向 time_t 的指针作为 timep 参数传入函数 ctime(),将返回一个长达 26 字节的字符串,内含标准格式的日期和时间

#include 
#include 
​
int main() {
    time_t current_time;
    time(¤t_time);
    
    char* time_str = ctime(¤t_time);
    printf("Current time: %s", time_str);
    
    return 0;
}
疑惑

为什么ctime函数要用一个指针作为参数,这样不是很麻烦吗?

这是因为ctime函数需要修改一个静态缓冲区中的内容,并返回指向该缓冲区的指针。这个缓冲区包含了一个字符串表示的时间。通过将时间的指针传递给ctime函数,函数可以直接在缓冲区中进行修改,然后返回指向缓冲区的指针,以便用户可以使用这个字符串。

也就是说,通过用指针作为参数,ctime函数就不需要拷贝一份time_t,再根据这副本来修改静态缓冲区的内容,而是可以直接通过指针找到time_t来修改静态缓冲区的内容。这样可以节省内存空间和提高运行效率。

需要注意的是,ctime函数在每次调用时都会使用同一个静态缓冲区,因此如果多次调用ctime函数,后续的调用会覆盖前面调用的结果。如果需要保存多个时间字符串,可以使用localtimegmtime函数进行转换,并使用不同的缓冲区来存储结果。


gmtime、 localtime

函数原型
函数 gmtime()localtime()可将一 time_t 值转换为一个所谓的分解时间(broken-down
time)。分解时间被置于一个经由静态分配的结构中,其地址则作为函数结果返回。
#include

struct tm *gmtime(const time_t *timep);

struct tm *localtime(const time_t *timep);
什么是分解时间

所谓分解时间,其实就是把time_t分解成年、月、日、时、分,秒等

Linux的时间函数_第1张图片

 使用方法
#include

int main(){
    time_t ti;
    struct tm *gm_tm;
    struct tm *local_tm;

    //把从1970年1月1日00:00到现在的秒数赋值给ti
    ti=time(NULL);

    //用gmtime函数把ti分解成年、月、日、时、分、秒等,并把分解的结果
    //存放在一个静态分配的结构tm中,返回tm的地址给gm_tm
    gm_tm=gmtime(&ti);

    //用localtime函数把ti分解成年、月、日、时、分、秒等并把分解的结果
    //存放在一个静态分配的结构tm中,返回tm的地址给local_tm
    local_tm=localtime(&ti);

    printf("gm_tm:%d-%d-%d %d:%d:%d\n",gm_tm->tm_year+1900,gm_tm->tm_mon+1,gm_tm->tm_mday,gm_tm->tm_hour,gm_tm->tm_min,gm_tm->tm_sec);
    printf("local_tm:%d-%d-%d %d:%d:%d\n",local_tm->tm_year+1900,local_tm->tm_mon+1,local_tm->tm_mday,local_tm->tm_hour,local_tm->tm_min,local_tm->tm_sec);
}


mktime

函数原型

mktime函数将一个分解时间转换成time_t值

#include

time_t mktime(struct tm *timeptr);
使用方法
#include
#include

int main(){

    //获取当前时间的time_t值
    time_t current_time;
    current_time=time(NULL);
    printf("1:current_time:%d\n",current_time);

    //把当前时间的time_t值转换成分解时间
    struct tm *current_tm;
    current_tm=gmtime(¤t_time);

    //把分解时间再转换成time_t
    current_time=mktime(current_tm);
    printf("2:current_time:%d\n",current_time);
}


asctime

函数原型

asctime函数把分解时间转换成可打印格式,所谓可打印格式类似于“Wed Jul 19 01:59:16 2023”

#include

char *asctime(const struct *timeptr);
使用方法
#include
#include

int main(){
    time_t current_time;
    current_time=time(NULL);

    //获取分解时间
    struct tm *current_tm;
    current_tm=gmtime(¤t_time);

    //把分解时间转换成可打印格式
    char* printFormat;
    printFormat=asctime(current_tm);
    printf("%s",printFormat);
}

你可能感兴趣的:(Linux,linux,算法)