- 论坛徽章:
- 0
|
/*------------------------------------------------------------------------
Function Name : get_date_time
Description : 按指定日期格式在字符串与数值时间(秒数)进行互转
1._dt非空: 将_dt保存的字符串时间转换为数值时间保存到_val中
2._dt为空, _val非0: 将_val表示的数值时间转换为字符串时间
保存在_dt中
3._dt为空, _val为0: 生成当前系统时间, _dt中保存字符串日期,
_val中保存秒数
Input : char *_fmt 日期格式, CCYYMMDDHHmmSS
char *_dt 日期字符串
time_t *_val 数值时间
Output : 无
Return :
------------------------------------------------------------------------*/
void
get_date_time( char * _fmt, char * _dt, time_t *_val )
{
int i;
int len;
time_t tt;
struct tm tm;
char tmp[ 4 + 1 ];
memset( &tm, 0x00, sizeof( tm ) );
if ( '\0' == _dt[0] ) {
/* 数值转串 */
tt = ( 0 == *_val ) ? time( NULL ) : *_val;
tm = *localtime( &tt );
len = strlen( _fmt );
sprintf( tmp, "%04d", tm.tm_year + 1900 );
for ( i = 0; i < len; i++ ) {
if ( ! strncmp( "YYYY", _fmt + i, 4 ) ) {
strncpy( _dt + i, tmp, 4 );
i = i + 3;
} else if ( ! strncmp( _fmt + i, "YY", 2 ) ) {
strncpy( _dt + i, tmp + 2, 2 );
i++;
} else if ( ! strncmp( _fmt + i, "MM", 2 ) ) {
sprintf( _dt + i, "%02d", tm.tm_mon + 1 );
i++;
} else if ( ! strncmp( _fmt + i, "DD", 2 ) ) {
sprintf( _dt + i, "%02d", tm.tm_mday );
i++;
} else if ( ! strncmp( _fmt + i, "HH", 2 ) ) {
sprintf( _dt + i, "%02d", tm.tm_hour );
i++;
} else if ( ! strncmp( _fmt + i, "mm", 2 ) ) {
sprintf( _dt + i, "%02d", tm.tm_min );
i++;
} else if ( ! strncmp( _fmt + i, "SS", 2 ) ) {
sprintf( _dt + i, "%02d", tm.tm_sec );
i++;
} else {
_dt[ i ] = _fmt[ i ];
}
} /* end of for */
_dt = '\0';
if ( _val != NULL ) {
* _val = tt;
}
} else {
/* */
len = strlen( _fmt );
for ( i = 0; i < len; i++ ) {
memset( tmp, 0x00, sizeof( tmp ) );
strncpy( tmp, _dt + i, 2 );
if ( ! strncmp( "YYYY", _fmt + i, 4 ) ) {
strncpy( tmp, _dt + i, 4 );
tm.tm_year = atoi( tmp ) - 1900;
i = i + 3;
} else if ( ! strncmp( _fmt + i, "YY", 2 ) ) {
tm.tm_year = atoi( tmp );
i++;
} else if ( ! strncmp( _fmt + i, "MM", 2 ) ) {
tm.tm_mon = atoi( tmp ) - 1;
i++;
} else if ( ! strncmp( _fmt + i, "DD", 2 ) ) {
tm.tm_mday = ( 0 == tm.tm_mday ) ? 1 : atoi( tmp );
tm.tm_mday = atoi( tmp );
i++;
} else if ( ! strncmp( _fmt + i, "HH", 2 ) ) {
tm.tm_hour = atoi( tmp );
i++;
} else if ( ! strncmp( _fmt + i, "mm", 2 ) ) {
tm.tm_min = atoi( tmp );
i++;
} else if ( ! strncmp( _fmt + i, "SS", 2 ) ) {
tm.tm_sec = atoi( tmp );
i++;
} else {
/* do nothing */
}
} /* end of for */
tt = mktime( &tm );
*_val = tt;
}
return;
}
看到论坛里还有有些人对标准C里的日期时间处理不是很熟悉,故为大家提供以上函数,希望对大家有所帮助。
利用上面这个函数,可以很方便的封装出计算日期/时间间隔的函数。 |
|