使用Qt对一个设备掉线的时间列表进行排序

离线时间提醒方式为:离线xx秒,离线xx分钟,离线xx小时,离线xx天;

#include <QDebug>
#include <QList>
#include <QStringList>

const int SEC_TIME = 1;
const int MINUTE_SEC_TIME = 60;
const int HOUR_SEC_TIME = 3600;
const int DAY_SEC_TIME = 86400;

long int findNumFromStr(QString timeStr, int basicSec);

int main()
{
    QStringList offLineList;
    offLineList<<"离线11分钟"<<"离线3分钟"<<"离线51分钟"<<"离线7小时"<<"离线15小时"<<"离线12小时"
               <<"离线21天"<<"离线2天"<<"离线29天"<<"离线16小时"<<"离线50天"<<"离线30秒";

    QList<long int> secondTime = {0};
    foreach (QString timeStr, offLineList) {
        // 从QString中截取纯数字转换为秒,存入QList
        if (timeStr.contains("秒")) {
            secondTime.append(findNumFromStr(timeStr, SEC_TIME));
        } else if(timeStr.contains("分钟")) {
            secondTime.append(findNumFromStr(timeStr, MINUTE_SEC_TIME));
        } else if(timeStr.contains(("小时"))) {
            secondTime.append(findNumFromStr(timeStr, HOUR_SEC_TIME));
        } else if(timeStr.contains("天")) {
            secondTime.append(findNumFromStr(timeStr, DAY_SEC_TIME));
        }
    }

    // 对QList中的内容进行排序,并转换为特定后缀的日期输出
    std::sort(secondTime.begin(),secondTime.end());
    QStringList offLineOrder;
    QList<long int>::iterator it;
    for (it = secondTime.begin();it != secondTime.end();it++) {
        if ((*it) > 0 && (*it) < MINUTE_SEC_TIME) {
            offLineOrder.append("离线" + QString::number(*it) + "秒");
        } else if ((*it) >= MINUTE_SEC_TIME && (*it) < HOUR_SEC_TIME) {
            offLineOrder.append("离线" + QString::number(*it / MINUTE_SEC_TIME) + "分钟");
        } else if ((*it) >= HOUR_SEC_TIME && (*it) < DAY_SEC_TIME) {
            offLineOrder.append("离线" + QString::number (*it / HOUR_SEC_TIME) + "小时");
        } else if ((*it)>= DAY_SEC_TIME) {
            offLineOrder.append("离线" + QString::number(*it / DAY_SEC_TIME) + "天");
        }
    }

    foreach (QString timeOrder, offLineOrder) {
        qDebug()<<timeOrder;
    }

    return 0;
}

long int findNumFromStr(QString timeStr, int basicSec)
{
    QString timeFromNum;
    for (int i = 0;i < timeStr.length(); i++) {
        if(timeStr[i] >= '0' && timeStr[i] <= '9') {
            timeFromNum.append(timeStr[i]);
        }
    }
    long int timeToSec = timeFromNum.toInt() * basicSec;
    return timeToSec;
}

排序后结果为:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值