zoukankan      html  css  js  c++  java
  • QDateTime 本地时间和UTC时间转换问题

     先说一下UTC,搜索360百科: 协调世界时,又称世界统一时间、世界标准时间、国际协调时间,简称UTC,是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。1979年12月3日在内瓦举行的世界无线电行政大会通过决议,确定用“世界协调时间”取代“格林威治时间”,作为无线电通信领域内的国际标准时间。应用于天文学及天体,是测绘学上的一类用语。 

         UTC时间同本地时间关系
       UTC +时间差=本地时间
        时间差根据时区定,东边为正,西边为负,如北京东八区,时间差0800,8小时。如果UTC时间是 2014-04-03 00:00:00 那么北京时间就是 2014-04-03 08:00:00。
        
       好,UTC时间介绍到此,继续关于QDateTime与UTC时间转换:
      1、将QDateTime 本地时间转换成UTC时间
      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();
     QString sUTCTime = utcTime.toString("yyyy-MM-dd hh:mm:ss");
       则sUTCTime 为yyyy-MM-dd hh:mm:ss
       QDateTime 的 toTime_t()函数,QT帮助大致意思是将当前时间转换成距1970-1-1 0:0:0的秒数。时间坐标是UTC时间。
     
    2、 QDateTime::toTime_t()
     QT 帮助告诉我们,toTime_t 是将QDateTime 表示的转换为距1970-01-01 00:00:00 的秒数,转换时间坐标是UTC时间。
     关键就是最后这句话:UTC时间坐标。这句话的意思就是,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 的秒数。
       如果根据 toTime_t() 反向理解,应该是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
  • 相关阅读:
    第二个冲刺 6.3.4.学术诚信与职业道德
    第二个冲刺 Sprint
    css之清除浮动
    style和getComputedStyle(ff)和currentStyle
    php 中间件
    Vue 和 angular
    img 分区响应图
    PHP composer
    php实现文件上传,下载的常见文件配置
    php 命名空间
  • 原文地址:https://www.cnblogs.com/liushui-sky/p/8880127.html
Copyright © 2011-2022 走看看