Qt-时间转换、时间加减、获取当前时间并格式化输出及将积秒转换成时间
相关资料
https://blog.csdn.net/xb_ma/article/details/10946901 说明
https://blog.csdn.net/m0_37837218/article/details/103805050 实例3
https://blog.csdn.net/yangyang031213/article/details/80716215 实例2
https://blog.csdn.net/u012199908/article/details/50731543
https://blog.csdn.net/weixin_42353082/article/details/103212922
https://blog.csdn.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"
欢迎关注我,一起进步!扫描下方二维码即可加我
posted on 2019-02-27 15:12 疯狂delphi 阅读(16517) 评论(0) 编辑 收藏 举报