当前位置:C++技术网 > 资讯 > 时间处理函数:1 asctime函数使用及C语言显示日期时间代码详解

时间处理函数:1 asctime函数使用及C语言显示日期时间代码详解

更新时间:2015-06-26 18:44:58浏览次数:1+次

    在讲解之前,给出代码运行效果图:

asctime函数使用及C语言显示日期时间代码
    asctime函数用于将日期时间结构体转换成时间字符串,便于输出显示。
    函数原型如下:

char *asctime( const struct tm *timeptr );
    返回值:返回一个指向时间字符串的指针。不会出错。
    唯一的参数:就是一个常量的tm日期时间结构体指针。使用常量,是防止函数内部修改了传入的结构体的值,因为传入的日期时间结构体不能被修改。这种用法很常用。对于我们只需要读的参数,尽量使用常量指针传入,或者传值。

使用环境说明
    参数timeptr 传入的tm结构体变量,通常使用gmtime 或者 localtime得到。获取的是tm日期时间结构体的指针。如果要快捷的输出时间,则使用asctime函数。如果要自定义输出各种格式,可以自己格式化输出,因为gmtime 或者 localtime返回的指针可以直接获取tm结构体中的各个成员的值。结构体的说明,请参考《时间日期结构体tm详细解释》。了解了结构体中的各个成员后,也就是年月日时分秒等,可以自己使用格式化字符串将日期时间格式化成我们想要的各种格式,如【2015年2月14日 11:34:00 星期六】。而这个通过函数asctime是做不到的,这里就特别提醒下。
    asctime函数转换tm日期时间结构体为字符串是根据【本地时区设置格式】来转换的。使用的是24小时制。所有的部分,如年月日三个部分,都采用等宽。如Wed Jan 02 02:03:55 1980\n\0 。使用两位表示时钟和分钟等。换行符和空字符在最后,表示字符串的换行和结束。asctime使用静态分配的单缓冲来返回时间字符串,所以,之后调用此函数,则会破坏之前返回的时间字符串缓冲区。因为这个函数只用一个缓冲区,每次调用都是操作同一块缓冲区。所以,获取到时间字符串后,请保存到自己的缓冲区中,以免后续获取后覆盖了之前的时间,导致程序出错,所以要特别注意哦。
下面是程序代码:

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

void main( void )
{
    struct tm *tmtime;
    time_t aclock;
    time( &aclock );// - 获取系统时间的秒数格式time_t
    tmtime = localtime( &aclock );// - 将秒数时间格式转换本地时间日期时间结构体格式tm
    printf("【asctime得到的格式】当前日期时间: %s", asctime(tmtime));
    printf("【自定义格式】当前日期时间: %d年%d月%d日 %d:%d:%d\n", 
        tmtime->tm_year+1900,tmtime->tm_mon+1,tmtime->tm_mday,
        tmtime->tm_hour,tmtime->tm_min,tmtime->tm_sec);
}

代码说明:
1.首先要获取系统时间的秒数格式,即time函数完成的功能。
2.然后将秒数格式解析成tm日期时间结构体形式,而不是自己去计算得出秒数对应的结构体。此结构体可以直接用于自定义格式化日期时间,正如最后一个自定义格式输出的时间那样使用。
3.使用localtime转成本地时间,使用gmtime转成UTC时间。
4.使用asctime函数则可以直接输出时间字符串。不过这个是按照国外的时间表示形式,中国人不适用。就使用第二种自定义格式来处理。可以转成任意格式。
5.自定义转换格式时需要注意,年份要加上1900,因为起点时间是1900,结构体中只记录相对于1900经历过的年数。而月份则起始值为0,因此需要加1。
6.tm结构体中,yday成员表示一年中的第几天,mday表示一个月的第几天,wday表示一个星期的第几天。