这是一个在 C 语言编程中非常常见且重要的函数调用。

(图片来源网络,侵删)
核心概念:time(NULL) 是什么?
time(NULL) 实际上是 C 标准库中 time() 函数的一种调用方式。
- 函数名:
time - 功能: 获取当前的日历时间。
- 参数: 它接受一个
time_t *类型的指针作为参数。 - 返回值: 返回一个
time_t类型的值,代表从“纪元”(Epoch,通常是 1970年1月1日00:00:00 UTC)到现在的秒数。
time(NULL) 这种写法的意思是:调用 time() 函数,并传递一个空指针 NULL 作为参数。
time() 函数的两种用法
time() 函数的参数可以有两种使用方式,这解释了为什么 time(NULL) 是一种常见的写法。
获取当前时间但不存储(time(NULL))
当你只想获取当前时间,但不需要将其存储在某个变量中时,可以传递 NULL。

(图片来源网络,侵删)
- 工作原理:函数会计算当前时间,然后将其作为返回值返回给你,因为你传入了
NULL,它不会尝试将时间写入任何内存地址。 - 典型场景:当你只需要用当前时间做一次性的判断,比如计算程序的运行时间,或者作为随机数生成的种子。
#include <stdio.h>
#include <time.h>
int main() {
// 获取当前时间戳
time_t current_time = time(NULL);
printf("当前时间戳 (从1970年至今的秒数): %ld\n", current_time);
// 另一种常见写法,直接使用返回值
printf("再次获取时间戳: %ld\n", time(NULL));
return 0;
}
获取当前时间并存储(time(&my_time))
当你不仅想获取时间,还想在后续代码中使用这个时间值时,你需要传递一个指向 time_t 类型变量的指针。
- 工作原理:函数会计算当前时间,然后同时做两件事:
- 将计算出的时间值写入你传入的指针指向的内存地址。
- 将这个时间值作为返回值返回。
- 典型场景:当你需要获取时间后,对其进行格式化(例如转换成 "YYYY-MM-DD HH:MM:SS" 的字符串)。
#include <stdio.h>
#include <time.h>
int main() {
time_t my_time; // 定义一个 time_t 变量
// 传入 my_time 的地址,将时间存储在 my_time 变量中
time_t return_value = time(&my_time);
// 验证一下
printf("通过返回值获取的时间戳: %ld\n", return_value);
printf("通过变量 my_time 获取的时间戳: %ld\n", my_time);
// 它们应该是相等的
if (return_value == my_time) {
printf("验证成功:返回值和存储的值相同,\n");
}
return 0;
}
如何使用获取到的时间?
time_t 类型本身只是一个数字(秒数),直接打印出来可能不太直观,通常我们会使用它来转换成更易读的格式。
示例:将时间戳转换为本地时间字符串
这需要用到 localtime() 和 strftime() 函数。
#include <stdio.h>
#include <time.h>
int main() {
// 1. 获取当前时间戳
time_t rawtime;
time(&rawtime); // 等同于 time_t rawtime = time(NULL);
// 2. 将 time_t 转换为 struct tm 结构体(本地时间)
// localtime() 会将 UTC 时间转换为你的系统所在时区的时间
struct tm *timeinfo = localtime(&rawtime);
// 3. 使用 strftime 将结构体格式化为字符串
char buffer[80];
// 格式: 年-月-日 时:分:秒
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", timeinfo);
printf("当前的本地时间是: %s\n", buffer);
return 0;
}
代码解析:
struct tm是一个结构体,包含了年、月、日、时、分、秒等所有时间信息。localtime(&rawtime)将rawtime(time_t类型)转换为一个指向struct tm的指针。strftime()是一个非常强大的格式化函数,它可以根据你提供的格式字符串("%Y-%m-%d %H:%M:%S")来生成时间字符串。%Y: 四位年份 (e.g., 2025)%m: 月份 (01-12)%d: 日期 (01-31)%H: 24小时制小时 (00-23)%M: 分钟 (00-59)%S: 秒 (00-60, 60是为了处理闰秒)
| 特性 | 描述 |
|---|---|
| 函数 | time() |
| 头文件 | <time.h> |
time(NULL) 含义 |
调用 time() 函数,不存储结果,只通过返回值获取。 |
time(&t) 含义 |
调用 time() 函数,既通过返回值获取,也将结果存储在变量 t 中。 |
| 返回值类型 | time_t,通常是一个长整型(long),表示从1970年1月1日至今的秒数。 |
| 核心用途 | 获取程序运行时间。 作为随机数生成器的种子( srand(time(NULL)))。记录事件发生的时间戳。 获取并格式化当前日期和时间。 |
time(NULL) 是 C 语言中获取当前时间最直接、最常用的方法之一,它返回一个表示当前时间的“时间戳”。
