Qt-时间转换、时间加减、获取当前时间并格式化输出及将积秒转换成时间 - 疯狂delphi

时间:2024-03-10 22:12:33

Qt-时间转换、时间加减、获取当前时间并格式化输出及将积秒转换成时间

相关资料

https://blog.****.net/xb_ma/article/details/10946901 说明
https://blog.****.net/m0_37837218/article/details/103805050   实例3
https://blog.****.net/yangyang031213/article/details/80716215 实例2

https://blog.****.net/u012199908/article/details/50731543

https://blog.****.net/weixin_42353082/article/details/103212922

https://blog.****.net/ydyuse/article/details/105873709    实例4  QT时间差计算的两种方法

 

QDateTime

QDateTime dateTime; 
QString dateTime_str = dateTime.currentDateTime().toString("yyyy-MM-dd hh:mm:ss");

// 从字符串转换为毫秒(需完整的年月日时分秒) 
datetime.fromString("2011-09-10 12:07:50:541", "yyyy-MM-dd hh:mm:ss:zzz").toMSecsSinceEpoch();

// 从字符串转换为秒(需完整的年月日时分秒) 
datetime.fromString("2011-09-10 12:07:50:541", "yyyy-MM-dd hh:mm:ss:zzz").toTime_t();

// 从毫秒转换到年月日时分秒 
datetime.fromMSecsSinceEpoch(1315193829218).toString("yyyy-MM-dd hh:mm:ss:zzz");

// 从秒转换到年月日时分秒(若有zzz,则为000) 
datetime.fromTime_t(1315193829).toString("yyyy-MM-dd hh:mm:ss[:zzz]");

使用 QDateTime::toMSecsSinceEpoch 计算时间差; 
使用 QDateTime::fromMSecsSinceEpoch 构造一个对象; 
使用 QDateTime::toUTC 转换为 utc 时间,这样就成为一个1970.01.01 00:00:00 开始的时间 
toString 输出

QDateTime::toMSecsSinceEpoch() const;// 将QDateTime转换成毫秒
QDateTime::toSecsSinceEpoch() const;// 将QDateTime转换成秒
QDateTime::fromMSecsSinceEpoch(qint64 msecs);// 将毫秒值转换成QDateTime
QDateTime::fromSecsSinceEpoch(qint64 msecs);// 将秒转换成QDateTime

起始时刻从 “1970-01-01 T00:00:00” 开始算起
//基础单位为秒
qint64 currentTime1 = QDateTime::currentSecsSinceEpoch();
//基础单位为豪秒
qint64 currentTime2 = QDateTime::currentMSecsSinceEpoch();

或通过下述方法获取时间大数
QDateTime date = QDateTime::currentDateTime();
//基础单位为秒
date.toSecsSinceEpoch();
//基础单位为豪秒
date.toMSecsSinceEpoch();

年月日转换时间戳
//获取2002年5月20日0点的时间戳
QDate date(2002, 5, 20);
QDateTime dateTime(date);
qDebug() << dateTime.toSecsSinceEpoch();

时间戳转换年月日
QDateTime dd;
//秒级
dd.setSecsSinceEpoch(1576066090);
//毫秒级
dd.setMSecsSinceEpoch(1576066090917);
qDebug() << dd.toString("yyyy-MM-dd hh:mm:ss")
//秒级别的
QDateTime dd = QDateTime::fromSecsSinceEpoch(1576066090);
qDebug() << dd.toString("yyyy-MM-dd hh:mm:ss");
//豪秒级别的
QDateTime dd = QDateTime::fromMSecsSinceEpoch(1576066090917);
qDebug() << dd.toString("yyyy-MM-dd hh:mm:ss");

获取系统时间

#include <QDateTime>
#include <QDebug> 
... 
QDateTime sysDateTime; 
qDebug() <<sysDateTime.currentDateTime().toString("yyyy年MM月dd日 hh:mm:ss");

- 延时(4.7之前的版本不能使用)

#include <QApplication>
#include <QDateTime>
#include <QDebug>
... 
qint64 startTime = QDateTime::currentMSecsSinceEpoch(); 
qDebug() << startTime;

while (1) 

    if (QDateTime::currentMSecsSinceEpoch() - startTime > interval)  // interval为需要延时的时间(ms) 
    { 
        break; 
    }

    QApplication::processEvents();  // 处理其他事件,避免程序出现假死 
}

qDebug() << QDateTime::currentMSecsSinceEpoch();

实例1:计算2个操作的时间差

#include <QTime>
#include <QDebug>
...
QTime startTime = QTime::currentTime(); 
QTime endTime = QTime::currentTime(); 
qDebug() << startTime.msecsTo(endTime);    // 结果为ms

实例2:计算2个操作的时间差

#include <QDateTime>
#include <QTimer>
#include <QDebug>
...
QDateTime m_time;
QTimer *m_timer;
...
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);

m_time = QDateTime::currentDateTime();
m_timer = new QTimer(this);
connect(m_timer, &QTimer::timeout, this, &MainWindow::on_func);
m_timer->start(1000);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_func()
{
// spen "00:00:01"
// spen "00:00:01"
// spen "00:00:03"
// spen "00:00:03"
// spen "00:00:05"
// spen "00:00:06"
// spen "00:00:07"
qDebug() << "spen" <<
QDateTime::fromMSecsSinceEpoch(QDateTime::currentDateTime().toMSecsSinceEpoch() - m_time.toMSecsSinceEpoch()).toUTC().toString("hh:mm:ss");
}

 

实例3:QdateTime减法 

QDataTime time1 = QDateTime(QDate(1970,1,1));

QDateTime time2 = QDateTime(QDate(2020,1,1));

//time1到time2的秒数

qint64 diffs = time1.secsTo(time2);

//time1到time2的天数

qint64 diffs = time1.daysTo(time2);

chartdirection图表库插件的Chart::chartTime函数 应该是从0到如今时间的秒数,所以要和QT获取的时间相减的话,要先减去1970,1,1 08:00:00的秒数

实例4:QT时间差计算的两种方法

QDateTime startTime= QDateTime::currentDateTime();
Sleep(5000);
QDateTime endTime= QDateTime::currentDateTime();
qint64 intervalTime = startTime.secsTo(endTime); //求时间差
qint64 intervalTimeMS = startTime.msecsTo(endTime);


qDebug() << intervalTime; //时间相差秒数
qDebug() << intervalTimeMS; //时间相差毫秒数

//第二种方法
qint64 intervalTime2 = endTime.toTime_t() - startTime.toTime_t();
QString interval2 = tr("%1").arg(intervalTime2);
qDebug() << interval2; //时间相差秒数

//将秒数转化为时分秒格式
int H = m_dTotalTime / (60*60);
int M = (m_dTotalTime- (H * 60 * 60)) / 60;
int S = (m_dTotalTime - (H * 60 * 60)) - M * 60;
QString hour = QString::number(H);
if (hour.length() == 1) hour = "0" + hour;
QString min = QString::number(M);
if (min.length() == 1) min = "0" + min;
QString sec = QString::number(S);
if (sec.length() == 1) sec = "0" + sec;
QString qTime = hour + ":" + min + ":" + sec;

ui.m_pRemainTimeLbl->setText(qTime);

PS:

格式化输出当前时刻
qDebug()<<"currentTime--"<<QTime::currentTime().toString(Qt::ISODate)
<<QDateTime::currentDateTime().toString(Qt::ISODate)
<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");

输出为:
currentTime--
"16:03:27"
"2016-02-24T16:03:27"
"2016-02-24 16:03:27:607"

2  获得1970-01-01至今的秒数并将这个描述转成日期

int i=QDateTime::currentDateTime().toTime_t();
qDebug()<<"i--"<<i;
qDebug()<<QDateTime::fromTime_t(i).toString("yyyy-MM-dd hh:mm:ss.zzz");
输出为:
i-- 1458134574
"2016-03-16 21:22:54.000"
3 获得当前的时间转成字符串形式,并且将这个时间的字符串转成当时日期
QString s=QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz");
QDateTime dateTime=QDateTime::fromString(s,"yyyy-MM-dd hh:mm:ss.zzz");
qDebug()<<"time--"<<s;
qDebug()<<dateTime.toString("yyyy-MM-dd hh:mm:ss.zzz");

qDebug()<<dateTime.toString("yyyy-MM-dd hh:mm:ss ddd");
输出为:
time-- "2016-03-16 21:26:00.635"
"2016-03-16 21:26:00.635"

"2016-03-16 21:26:00 周五"

3 QDateTime加一定秒数

 

QDateTime提供了这些函数来提供向数据中增加年月日时分秒的操作。

QDateTime dateTime=QDateTime::currentDateTime();
QDateTime dateTime2=dateTime.addSecs(7000000000);
qDebug()<<dateTime.toString(Qt::ISODate)
<<dateTime2.toString(Qt::ISODate);

输出为:
Starting F:\exercise\build-untitled20-desktop4_8_5-Debug\debug\untitled20.exe...
"2016-03-21T22:12:44" "1965-11-02T21:42:52"