传入一个时间,返回和当前的时间差

本文介绍了一种从特定格式的时间字符串中解析并计算出与当前时间差异的方法,该方法能够根据时间差的大小自动选择合适的单位(分钟、小时、天或月)进行表示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

调用方式:
TBuf<128> bSour;
TBuf<128> bDesc;
bSour.Append(_L("2011-05-22T21:50:15+08:00"));
ConvData(bSour, bDesc);
iEikonEnv->InfoWinL(bDesc, KNullDesC);




//传入一个时间,然后计算出时间差,用分钟表示,大于60分钟就用小时表示,大于24小时,就用天表示,大于24天,就用月表示
//aSource :传入格式:2011-05-18T20:54:15+08:00
//aDesc :传出数据,如果为空,表示传入的时间大于当前时间
void CWorldView::ConvData(const TDesC & aSource, TDes & aDesc)
    {
    //如果小于18位,也就是传过来的时间字符串有误
    if (18 > aSource.Length())
        return;

    TInt nYear;
    TInt nMonth;
    TInt nDay;

    TLex iLex;
    //年
    iLex = aSource.Mid(0, 4);
    iLex.Val(nYear);
    //月
    iLex = aSource.Mid(5, 2);
    iLex.Val(nMonth);
    //日
    iLex = aSource.Mid(8, 2);
    iLex.Val(nDay);

    TInt nHour = 0;
    TInt nMinute = 0;

    //计算小时
    iLex = aSource.Mid(11, 2);
    iLex.Val(nHour);

    //计算分钟
    iLex = aSource.Mid(14, 2);
    iLex.Val(nMinute);

    TDateTime time;
    time.SetYear(nYear);
    time.SetMonth(TMonth(EJanuary + nMonth - 1));
    time.SetDay(nDay - 1);
    time.SetHour(nHour);
    time.SetMinute(nMinute);

    TTime tCur;
    tCur.HomeTime();

    TTime tFirst;
    tFirst = time;

    //计算月数
    TInt nValue = tCur.MonthsFrom(tFirst).Int();

    //时间错误
    if (0 > nValue)
        {
        return;
        }

    //月份大于大当前月份
    if (0 < nValue)
        {
        aDesc.AppendNum(nValue);
        aDesc.Append(_L(" month"));
        return;
        }

    //计算天数
    nValue = tCur.DaysFrom(tFirst).Int();

    //天数大于当前天数
    if (0 > nValue)
        {
        return;
        }

    //够一天
    if (0 < nValue)
        {
        aDesc.AppendNum(nValue);
        aDesc.Append(_L(" day"));
        return;
        }

    //小时
    TTimeIntervalHours hours;
    tCur.HoursFrom(tFirst, hours);
    nValue = hours.Int();

    //时间错误
    if (0 > nValue)
        {
        return;
        }

    //够一个小时
    if (0 < nValue)
        {
        aDesc.AppendNum(nValue);
        aDesc.Append(_L(" hours"));
        return;
        }

    //分钟
    TTimeIntervalMinutes minutes;
    tCur.MinutesFrom(tFirst, minutes);
    nValue = minutes.Int();

    //分钟错误
    if (0 > nValue)
        {
        return;
        }

    aDesc.AppendNum(nValue);
    aDesc.Append(_L(" minutes"));
    return;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值