当前位置:C++技术网 > 资讯 > 时间处理函数:5 localtime函数(time_t转换tm)转换成本地时间

时间处理函数:5 localtime函数(time_t转换tm)转换成本地时间

更新时间:2019-03-26 11:08:00浏览次数:1+次

    与gmtime唯一的区别就是转换后的结果是本地时间而不是UTC时间。其他的基本一致。localtime并不是获取本地时间的函数,而是转换成本地时间的函数。
    函数原型声明在头文件time.h中,声明如下:

struct tm *localtime( const time_t *timer );
     函数的返回值和参数的解释以及相关问题,参考gmtime函数的解释《时间处理函数:4 gmtime函数(time_t转成tm)日期时间格式转换使用说明》。

    这里额外介绍一下与localtime密切相关的东西。
    localtime将time_t获取的UTC时间转换成本地时区所在的本地时间,并存储于tm结构体中。此结构体为函数静态分配的缓冲区,gmtime, mktime, localtime, asctime 和 ctime 公有这个缓冲区。返回的是指向这个缓冲区的指针,使用缓冲区完毕后,请将结果存入自己分配的缓冲区中,以免被其他的函数破坏了。这个在多线程程序中很容易出现问题。
    如果用户使用 localtime 前设置了全局的环境变量TZ (Time Zone,时区),localtime 函数会自动矫正时区。如果TZ设置了,其他的三个环境变量(_timezone, _daylight, 和 _tzname)也会同时被设置。TZ是微软的扩展,而不是ANSI标准的定义。

localtime函数代码使用示例:

#include <stdio.h>
#include <string.h>
#include <time.h>

void main( void )
{
    struct tm *newtime;
    char am_pm[] = "AM";
    time_t long_time;
    time( &long_time );   // - 获取long型时间
    newtime = localtime( &long_time ); // - 转换成本地时间
    if( newtime->tm_hour > 12 ) // - 设置下午标志
        strcpy( am_pm, "下午" );
    if( newtime->tm_hour > 12 ) // - 从24小时制转成12小时制
        newtime->tm_hour -= 12;
    if( newtime->tm_hour == 0 ) // - 设置12点
        newtime->tm_hour = 12;
    printf( "%.19s %s\n", asctime( newtime ), am_pm );
}