本篇文章始于2023年7月19日下午

time

函数原型

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

1
2
#include<time.h>
time_t time(time_t *timep);
使用方法

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

1
2
3
4
5
6
7
#include<time.h>
#include<stdio.h>
int main(){
time_t tm;
tm=time(NULL);
printf("%d",tm);
}

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

1
2
3
4
5
6
7
#include<time.h>
#include<stdio.h>
int main(){
time_t tm;
time(&tm);
printf("%d",tm);
}

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

ctime

函数原型

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

1
2
#include<time.h>
char *ctime(const time_t *timep);
使用方法

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

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <time.h>

int main() {
time_t current_time;
time(&current_time);

char* time_str = ctime(&current_time);
printf("Current time: %s", time_str);

return 0;
}
疑惑

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

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

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

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