QT中将数据库中保存的以秒为单位的时间
转换成日期格式QDateTime显示示例及代码
问题:数据库用UINT整数保存时间秒,需要显示为正常的日期时间格式。
解决方法: QDateTime类提供了uint toTime_t() const函数 这个函数返回当前自1970-01-01 00:00:00经过了多少秒,返回值为一个UINT类型。
函数fromTime_t(uint seconds)函数则可以将距1970-01-01 00:00:00 的秒数转换为QDateTime,,seconds 表示的是距 1970-01-01 00:00:00 的秒数。
示例如下:
QDateTime timeT = QDateTime::currentDateTime(); //获取当前时间
uint secondsT = timeT.toTime_t();
qDebug() << "秒数="+QString::number(secondsT);
//uint secondsIn =1582591473;
qDebug() << "秒数转换为日期="+QDateTime::fromTime_t(secondsT).toString("yyyy-MM-dd hh:mm:ss");
测试输出结果如下:
注意:上面时间都是以1970-01-01 00:00:00为基准,这个其实是UTC时间,又称世界统一时间、世界标准时间、国际协调时间,简称UTC,是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。1979年12月3日在内瓦举行的世界无线电行政大会通过决议,确定用“世界协调时间”取代“格林威治时间”,作为无线电通信领域内的国际标准时间,应用于天文学及天体,是测绘学上的一类用语。
UTC时间同本地时间关系:
UTC +时间差=本地时间
时间差根据时区定,东边为正,西边为负,如北京东八区,时间差0800,8小时。如果UTC时间是 2020-02-25 00:00:00 那么北京时间就是 20202-02-25 08:00:00。
示例如下:
QDateTime dateTime = QDateTime::fromString("1970-01-01 08:00:00","yyyy-MM-dd hh:mm:ss");
dateTime.setTimeSpec(Qt::LocalTime);
uint secondsLocal= dateTime.toTime_t(); //secondsLocal =0;
qDebug() << "local秒数="+QString::number(secondsLocal);
dateTime.setTimeSpec(Qt::UTC);
uint secondsUTC = dateTime.toTime_t(); //secondsUTC = 28800;8小时
qDebug() << "UTC秒数="+QString::number(secondsUTC);
测试输出结果如下:
由于fromTime_t()是静态函数,返回QDateTime,缺省直接转换成Qt::LocalTime,即以下操作,不管如何,返回时间值都不变。示例如下:
//反向转换
QDateTime dateTime0 = QDateTime::fromTime_t(0);
dateTime0.setTimeSpec(Qt::LocalTime);
qDebug() <<"local日期:"+dateTime0.toString("yyyy-MM-dd hh:mm:ss");
dateTime0.setTimeSpec(Qt::UTC);
qDebug() <<"UTC日期:"+dateTime0.toString("yyyy-MM-dd hh:mm:ss");
测试输出结果如下:
注:实战示例,解疑答惑。
--不间端地思考,实时地批判你的工作!