QDateTime UTC和Local时间关系 toUTC()、toTime_t()、fromTime_t(uint seconds)[static]、setTime_t(uint seconds

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

  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值