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;
}