需要用到得库文件
#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