📜  C++中的localtime()函数(1)

📅  最后修改于: 2023-12-03 14:59:50.461000             🧑  作者: Mango

C++中的localtime()函数

localtime()函数是C语言、C++语言的标准库函数,其作用是将格林威治时间(GMT)转换成本地时间(local time)并以结构体tm的形式返回转换后的时间。在程序开发中,我们常常需要将时间戳转化为可读性强的本地时间格式,此时localtime()函数就非常有用。

语法
struct tm *localtime(const time_t *timep);
  • timep:指向要被转换的时间戳的指针,类型time_t。

  • 返回值:指向tm结构体的指针。

使用方法

使用localtime()函数需要引入头文件

#include <iostream>
#include <ctime>

int main()
{
    time_t rawtime;
    struct tm * timeinfo;
    char buffer[80];

    time (&rawtime);             // 获取当前时间戳
    timeinfo = localtime(&rawtime); // 将当前时间戳转化为本地时间信息结构体
    strftime(buffer,80,"%Y-%m-%d %H:%M:%S",timeinfo); // 将本地时间信息结构体转化为字符串格式
    std::cout << buffer << std::endl;

    return 0;
}

运行上述程序,输出结果为:

2021-08-26 08:16:36

程序中,通过time()函数获取当前的时间戳,然后用localtime()函数将时间戳转化为本地时间信息结构体,最后将本地时间信息结构体转化为人们可读的字符串格式(例如:“2021-08-26 08:16:36”)。

结构体tm的成员变量

结构体tm是从时间类型time_t中提取并分解出的时间信息,其包含的成员变量如下:

|成员变量|类型|取值范围|描述| |:--:|:--:|:--:|:--:| |tm_sec|int|0~59|表示秒数| |tm_min|int|0~59|表示分钟数| |tm_hour|int|0~23|表示小时数| |tm_mday|int|1~31|表示一个月中的第几天| |tm_mon|int|0~11|表示月份,0表示1月,1表示2月,以此类推| |tm_year|int|1900年至今的年数|-1900表示1900年,0表示1901年,1表示1902年,以此类推| |tm_wday|int|0~6|表示一周中的第几天,0表示周日,1表示周一,以此类推| |tm_yday|int|0~365|表示一年中的第几天,0表示1月1日,以此类推| |tm_isdst|int|0或1|-1表示无法确定是否为夏令时;0表示不是夏令时;1表示夏令时|

注意事项
  • localtime()函数在多线程环境下有可能会产生竞争问题,线程安全的函数应该使用localtime_r()函数。
  • localtime()函数返回的结构体指针是指向静态分配的内存空间的指针,如果要修改结构体成员变量的值,需要使用strcpy()函数或者memcpy()函数拷贝出结构体副本,并修改副本中的成员变量值。