QT之日期工具類——DateUtils

QT之日期工具類——DateUtils

前言

借鑑了java的相關類的思想,可以實現日期相關的計算方法。

源碼

頭文件

#ifndef DATEUTILS_H
#define DATEUTILS_H

#include <QString>
#include <QDateTime>

/*!
 * \brief DateUtils 是一個用來操作時間日期的工具類
 */
class DateUtils
{
public:
    DateUtils();
    /*!
     * \brief 獲取當前時間字符串(hh:mm:ss.zzz)
     * \return 時間字符串
     */
    static QString getCurrTimeStr();
    /*!
     * \brief 獲取當前日期字符串(yyyy-MM-dd hh:mm:ss)
     * \return 日期字符串
     */
    static QString getCurrDateTimeStr();
    /*!
     * \brief 按格式返回當前日期字符串(默認:yyyy-MM-dd hh:mm:ss)
     * \param formatStr 格式字符串
     * \return 日期字符串
     */
    static QString getCurrDateTimeStr(QString formatStr = "yyyy-MM-dd hh:mm:ss");
    /*!
     * \brief 計算開始日期到現在過去的天數
     * \param dateTime 開始日期
     * \return 過去的天數
     */
    static long pastDays(QDateTime dateTime);
    /*!
     * \brief 計算開始日期到現在過去的小時數
     * \param dateTime 開始日期
     * \return 過去的小時數
     */
    static long pastHours(QDateTime dateTime);
    /*!
     * \brief 計算開始日期到現在過去的分鐘數
     * \param 開始日期
     * \return 過去的分鐘數
     */
    static long pastMinutes(QDateTime dateTime);
    /*!
     * \brief 計算兩個日期之間過去的天數
     * \param before 前面的日期
     * \param after 後面的日期
     * \return 過去的天數
     */
    static long twoDatePastDays(QDateTime before, QDateTime after);
    /*!
     * \brief 獲取兩個日期段的小時數交集(帶小數)
     * \param stime1 開始日期1
     * \param etime1 結束日期1
     * \param stime2 開始日期2
     * \param etime2 結束日期2
     * \return 小時數交集(帶小數)
     */
    static float getTwoDateRangeIntersection2Hours(QDateTime stime1, QDateTime etime1, QDateTime stime2, QDateTime etime2);

};

#endif // DATEUTILS_H

源文件

#include "dateutils.h"
#include <QDateTime>
#include <QList>

DateUtils::DateUtils()
{

}

QString DateUtils::getCurrTimeStr()
{
    return QTime::currentTime().toString("hh:mm:ss.zzz");
}

QString DateUtils::getCurrDateTimeStr()
{
    return QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
}

QString DateUtils::getCurrDateTimeStr(QString formatStr = "yyyy-MM-dd hh:mm:ss")
{
    return QDateTime::currentDateTime().toString(formatStr);
}

long DateUtils::pastDays(QDateTime dateTime)
{
    QDateTime now = QDateTime::currentDateTime();
    long t = now.toMSecsSinceEpoch() - dateTime.toMSecsSinceEpoch();
    return  t / (24 * 60 * 60 * 1000);
}

long DateUtils::pastHours(QDateTime dateTime)
{
    QDateTime now = QDateTime::currentDateTime();
    long t = now.toMSecsSinceEpoch() - dateTime.toMSecsSinceEpoch();
    return  t / (60 * 60 * 1000);
}

long DateUtils::pastMinutes(QDateTime dateTime)
{
    QDateTime now = QDateTime::currentDateTime();
    long t = now.toMSecsSinceEpoch() - dateTime.toMSecsSinceEpoch();
    return  t / (60 * 1000);
}


long DateUtils::twoDatePastDays(QDateTime before, QDateTime after)
{
    long t = after.toMSecsSinceEpoch() - before.toMSecsSinceEpoch();
    return t / (1000 * 60 * 60 * 24);
}

float DateUtils::getTwoDateRangeIntersection2Hours(QDateTime stime1, QDateTime etime1, QDateTime stime2, QDateTime etime2)
{
    float result = 0.0f;

    long btlong = qMin(stime1.toMSecsSinceEpoch(), etime1.toMSecsSinceEpoch());// 開始時間
    long otlong = qMax(stime1.toMSecsSinceEpoch(), etime1.toMSecsSinceEpoch());// 結束時間
    long stlong = qMin(stime2.toMSecsSinceEpoch(), etime2.toMSecsSinceEpoch());// 開始時間
    long edlong = qMax(stime2.toMSecsSinceEpoch(), etime2.toMSecsSinceEpoch());// 結束時間

    if(btlong <= edlong && otlong >= stlong)
    {
        QList<long> list;
        list << btlong << otlong << stlong << edlong;
        qSort(list.begin(), list.end()); //從小到大排序,取第二、第三計算
        float f = list.at(2) - list.at(1);
        return f / (1000.0f * 60 * 60);

    }

    return result;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章