📅  最后修改于: 2023-12-03 15:00:11.539000             🧑  作者: Mango
在 C 语言中,time.h
库包含了与时间相关的函数和结构体,其中 localtime()
是用于将时间戳转换为本地时间并保存在 struct tm
结构体中的函数。
struct tm *localtime(const time_t *timep);
其中:
timep
参数为指向 time_t
类型的时间戳的指针,表示需要转换为本地时间的时间戳。struct tm
指针,表示保存了本地时间信息的结构体指针。#include <stdio.h>
#include <time.h>
int main()
{
time_t now = time(NULL); // 获取当前时间戳
struct tm *info = localtime(&now); // 将时间戳转换为本地时间信息
printf("当前时间:%d 年 %d 月 %d 日 %02d:%02d:%02d\n",
info->tm_year + 1900, info->tm_mon + 1, info->tm_mday,
info->tm_hour, info->tm_min, info->tm_sec);
return 0;
}
输出:
当前时间:2022 年 05 月 26 日 13:00:27
tm
包含的元素struct tm
结构体表示的是本地时间信息,其中包含了以下元素:
tm_sec
- 秒(0 ~ 60)tm_min
- 分钟(0 ~ 59)tm_hour
- 小时(0 ~ 23)tm_mday
- 日(1 ~ 31)tm_mon
- 月(0 ~ 11)tm_year
- 年(从 1900 开始计算)tm_wday
- 星期几(0 ~ 6,0 表示星期日)tm_yday
- 当前年中的第几天(0 ~ 365)tm_isdst
- 是否为夏令时(1 表示是,0 表示否,-1 表示为不确定) localtime()
函数在多线程环境下并不是线程安全的,因为它返回的结构体指针指向的是静态分配的内存空间,在多线程环境下容易出现竞争条件。localtime()
,则可以使用 localtime_r()
函数,它是 localtime()
的线程安全版本,使用方式与 localtime()
相同,但需要把保存了本地时间信息的结构体指针作为函数的第二个参数传入。参考资料:
time.h
:https://en.cppreference.com/w/c/chronostruct tm
:https://en.cppreference.com/w/c/chrono/tm