C语言 将时间转换成指定格式的字符串


需要用到得库文件

#include<stdio.h>

#include<string.h>

#include<time.h>

#include<stdlib.h>


为了方便理解,定义bool类型

typedef short bool;

#define true 1

#define false 0


获得系统当前时间

struct tm* fun_tm_now( void )

{

time_t t_now;

time(&t_now);

return localtime(&t_now);

}


将时间转换成指定格式的字符串

/******************************************************************************
 * 函 数 名 :fun_tm_format
 * 功    能 :按指定格式将时间转换成字符串
 * 参    数 :format    格式字符串
 *              格式码        描述
 *            ---------------------                     
 *              0           不足两位的项前面补零,放字符串最前面有效
 *               (space)    不足两位的项前面补空格,放字符串最前面有效
 *              YYYY        年
 *              MM          月
 *              DD          日
 *              hh          时
 *              mm          分
 *              ss          秒
 *              dd          星期
 *
 *            time      要转换的时间的地址
 *****************************************************************************/
char* fun_tm_format( char *format, struct tm *time )
{
    char *format_temp = format;
    bool b_fill = false;  /* 不足两位的左边是否填充 */
    char str_fill[] = { ' ', '0' };
    int i_index = 0;
    int i_timeNum = 0;
    char str_timeNum[ 4 + 1 ];
    char *str_time = ( char * )malloc( strlen( format ) );  /* 返回 */
    memset( str_time, 0x00, strlen( format ) );


    /*--判断是否填充--*/
    for( i_index = 0; i_index < sizeof( str_fill ); i_index ++ )
    {
        if( format[0] == str_fill[i_index] )
        {
            b_fill = true;
            i_index = 1; /* 为后面的格式化时间字符串初始化索引 */
            break;
        }
    }


    if( false == b_fill )
    {
        i_index = 0;
    }
    for( ; i_index < ( int )strlen( format ); )
    {
        format_temp = &format[i_index];
        switch( format[i_index] )
        {
            case 'Y':
                {
                    if( i_index == strstr( format_temp, "YYYY" ) - format )
                    {
                        i_timeNum = time->tm_year + 1900;
                        i_index += strlen( "YYYY" );
                    }
                    else
                    {
                        goto lab_default;
                    }
                    break;
                }
            case 'M':
                {
                    if( i_index == strstr( format_temp, "MM" ) - format )
                    {
                        i_timeNum = time->tm_mon + 1;
                        i_index += strlen( "MM" );
                    }
                    else
                    {
                        goto lab_default;
                    }
                    break;
                }
            case 'D':
                {
                    if( i_index == strstr( format_temp, "DD" ) - format )
                    {
                        i_timeNum = time->tm_mday;
                        i_index += strlen( "DD" );
                    }
                    else
                    {
                        goto lab_default;
                    }
                    break;
                }
            case 'h':
                {
                    if( i_index == strstr( format_temp, "hh" ) - format )
                    {
                        i_timeNum = time->tm_hour;
                        i_index += strlen( "hh" );
                    }
                    else
                    {
                        goto lab_default;
                    }
                    break;
                }
            case 'm':
                {
                    if( i_index == strstr( format_temp, "mm" ) - format )
                    {
                        i_timeNum = time->tm_min;
                        i_index += strlen( "mm" );
                    }
                    else
                    {
                        goto lab_default;
                    }
                    break;
                }
            case 's':
                {
                    if( i_index == strstr( format_temp, "ss" ) - format )
                        {
                            i_timeNum = time->tm_sec;
                            i_index += strlen( "ss" );
                        }
                        else
                        {
                            goto lab_default;
                        }
                    break;
                }
            case 'd':
                {
                    if( i_index == strstr( format_temp, "dd" ) - format )
                    {
                        i_timeNum = time->tm_wday;
                        i_index += strlen( "dd" );
                    }
                    else
                    {
                        goto lab_default;
                    }
                    break;
                }
            lab_default:
            default :
                {
                    i_timeNum = -1; /* -1按原样输出 */
                    i_index ++;
                    break;
                }
        }/*--switch end--*/


        /*--向str_time添加数据--*/
        if( -1 == i_timeNum )
        {
            str_time[ strlen( str_time ) ] = format[ i_index - 1 ];
        }
        else
        {
            /*--年和星期除外,填充--*/
            if(    true == b_fill
                && 'Y' != *format_temp
                && 'd' != *format_temp
              )
            {
                if( 0 == i_timeNum / 10 ) /* 1位数 */
                {
                    str_time[ strlen( str_time ) ] = format[0];
                }
            }


            strcat( str_time, itoa( i_timeNum, str_timeNum, 10 ) );
        }
    }/*--for end--*/
    return str_time;
}


测试

void main( void )

{

char *time = fun_tm_format( "0Date: YYYY-MM-DD\nTime: hh:mm:ss\nweek day:dd\n", fun_tm_now() ); 

printf( time );

free( time );

}


输出

Date: 2012-08-23

Time: 14:46:03

week day:4

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值