免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3862 | 回复: 2
打印 上一主题 下一主题

[函数] 我写的一个日期时间转换函数,供大家指正! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-17 19:52 |只看该作者 |倒序浏览
/*------------------------------------------------------------------------
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里的日期时间处理不是很熟悉,故为大家提供以上函数,希望对大家有所帮助。

利用上面这个函数,可以很方便的封装出计算日期/时间间隔的函数。

论坛徽章:
0
2 [报告]
发表于 2005-08-17 20:23 |只看该作者

我写的一个日期时间转换函数,供大家指正!

没什么必要吧,原来的那些函数已经足够了

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-08-18 08:53 |只看该作者

我写的一个日期时间转换函数,供大家指正!

大家也要鼓励一下哈。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP