QT技巧系列(2)QT中数据库保存的以秒为单位的时间秒转换成日期格式示例及代码

         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");

测试输出结果如下:

 

 

注:实战示例,解疑答惑。

           --不间端地思考,实时地批判你的工作!

发布了19 篇原创文章 · 获赞 6 · 访问量 1139

猜你喜欢

转载自blog.csdn.net/ydyuse/article/details/104490350
今日推荐