📜  C中的time.h localtime()函数与示例(1)

📅  最后修改于: 2023-12-03 15:00:11.539000             🧑  作者: Mango

C 中的 time.h localtime() 函数

在 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() 相同,但需要把保存了本地时间信息的结构体指针作为函数的第二个参数传入。

参考资料:

  • C 语言标准库 - time.h:https://en.cppreference.com/w/c/chrono
  • C 语言标准库 - struct tm:https://en.cppreference.com/w/c/chrono/tm