UTC +时间差=本地时间
UTC是世界标准时间,时间差根据时区定,东边为正,西边为负,如北京东八区,时间差8小时。若UTC时间是 2021-04-19 00:00:00 那么北京时间就是 2021-04-19 08:00:00
首先了解void QDateTime::setTimeSpec(Qt::TimeSpec spec)
设置时间格式为UTC或者Local
QString strTime = "2021-04-19 18:07:38";
QString fromat = "yyyy-MM-dd hh:mm:ss";
QDateTime time = QDateTime::fromString(strTime, fromat);//如果,strTime设置为utc时间,转换为本地时间,加上8小时
time.setTimeSpec(Qt::UTC);
QDateTime localTime = time.toLocalTime();//如果,strTime设置为本地时间,转换为utc时间,减去8小时
time.setTimeSpec(Qt::LocalTime);
QDateTime utcTime = time.toUTC();qDebug()<<"time: "<<time.toString(fromat); //2021-04-19 18:07:38
qDebug()<<"localTime: "<<localTime.toString(fromat);//2021-04-19 02:07:38
qDebug()<<"utcTime: "<<utcTime.toString(fromat);//2021-04-19 10:07:38
用QDateTime获得本地时间
QDateTime::currentDateTimeUtc().toTime_t()
获得的时间是0时区的时间,也就是说比北京时间早8个小时。
下面可以获得电脑当前的时区正确时间值。
date_time=QDateTime::fromTime_t( QDateTime::currentDateTimeUtc().toTime_t() );
date_time.setTimeSpec(Qt::UTC);
//QString str = date_time.toString("yyyy/MM/dd hh:mm"); //qDebug()<<"------------------- "<< str;
quint32 nowtime = date_time.toTime_t()
1、toUTC()函数
QDateTime 提供toUTC()函数可将QDateTime 代表的时间转换成UTC时间。
还以北京时间为例,如果当前时间1970-01-01 08:00:00, 则转换成UTC时间应该是 1970-01-01 00:00:00
QDateTime testTime = QDateTime::fromString("1970-01-01 08:00:00","yyyy-MM-dd hh:mm:ss");QDateTime utcTime = testTime::toUTC();
2、 QDateTime::toTime_t()
toTime_t(),转换的是QDateTime时间对应的UTC时间距1970-01-01 00:00:00 的秒数。
一般情况下,QDateTime,表示的是本地时间Qt::LocalTime,特殊情况下会设置成Qt::UTC,表示时间直接表示的就是UTC时间。对应于LocalTime,toTime_t()转换时,首先会将QDateTime的时间转换成UTC时间(toUTC),然后计算秒数。对于Qt::UTC,则直接计算QDateTime距 1970-01-01 00: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;dateTime.setTimeSpec(Qt::UTC);uint secondsUTC = dateTime.toTime_t(); //secondsUTC = 28800;8小时
3、QDateTime::fromTime_t(uint seconds)[static]
将距1970-01-01 00:00:00 秒数转换为QDateTime,时间坐标是UTC。也就是说,seconds 表示的是UTC时间距 1970-01-01 00:00:00 的秒数。
fromTime_t 函数在执行时,首先根据秒数计算出UtC时间,然后根据时间的QTimeSpec,判断,如果是Qt::LocalTime,则加时间差,计算出本地时间(如:北京时间加8小时),如果是Qt::UTC,则不变。
但由于fromTime_t()是静态函数,返回QDateTime,缺省直接转换成Qt::LocalTime,即以下操作,不管如何,返回时间值都不变
例:
QDateTime dateTime = QDateTime::fromTime_t(0);
如果dateTime为Qt::LocalTime,则 dateTime,表示的是1970-01-01 08:00:00
如果datetime 设为Qt::UTC, dateTime.SetTimeSpec(Qt:UTC); dateTime代表的时间还是 1970-01-01 08:00:00
4、QDateTime::setTime_t(uint seconds)
不同于 fromTime_t,可区分出LocalTime 和 UTC。例:
QDateTime time ;time.setTime_t(0);QString strLocal =time.toString("yyyy-MM-dd hh:mm:ss");//strLocal ="1970-01-01 08:00:00"QDateTime timeUTC;timeUTC.setTimeSpec(Qt::UTC);timeUTC.setTime_t(0);QString strUTC = timeUTC.toString("yyyy-MM-dd hh:mm:ss"); //strUTC = "1970-01-01 00:00:00"
转自:https://blog.csdn.net/clp_csdnid/article/details/79050639