先说一下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

QDateTime 本地时间和UTC时间转换问题的更多相关文章

  1. PHP中关于时间(戳)、时区、本地时间、UTC时间等的梳理

    PHP中关于时间(戳).时区.本地时间.UTC时间等的梳理 在PHP开发中,我们经常会在时间问题上被搞糊涂,比如我们希望显示一个北京时间,但是当我们使用date函数进行输出时,却发现少了8个小时.几乎 ...

  2. Sql Server 的本地时间和UTC时间

    一,本地时间和UTC时间 本地时间 世界的每个地区都有自己的本地时间,整个地球分为二十四时区,每个时区都有自己的本地时间. UTC时间 在国际无线电通信中,为统一而普遍使用一个标准时间,称为通用协调时 ...

  3. 时间:UTC时间、GMT时间、本地时间、Unix时间戳

    转自:http://blog.csdn.net/u012102306/article/details/51538574 1.UTC时间 与 GMT时间 我们可以认为格林威治时间就是时间协调时间(GMT ...

  4. 关于时间:UTC时间、GMT时间、本地时间、Unix时间戳

    1.UTC时间 与 GMT时间我们可以认为格林威治时间就是时间协调时间(GMT=UTC),格林威治时间和UTC时间均用秒数来计算的. 2.UTC时间 与 本地时UTC + 时区差 = 本地时间时区差东 ...

  5. iOS 本地时间、UTC时间、时间戳等操作、获取当前年月日

    //获得当前时间并且转为字符串 - (NSString *)dateTransformToTimeString { NSDate *currentDate = [NSDate date];//获得当前 ...

  6. 时区,GMT时间,UTC时间,UNIX时间戳

    秒 秒是一个时间基本单位.一天24小时,一小时60分,一分钟60秒,这来自于秒的定义--1秒的时间间隔为平均太阳日[1]的1⁄86400.到了20世纪中叶,人们发现地球自转的时间并不是恒定的,于是在1 ...

  7. 修改系统时间为UTC时间

    1 拷贝时区文件 cp /usr/share/zoneinfo/Etc/GMT /etc/localtime 2 修改/etc/profile 在最后添加 TZ="Etc/GMT" ...

  8. PHP中关于时间、时区、本地时间、UTC时间、GMT时间、时间戳等知识的梳理

    在PHP开发中,我们经常会在时间问题上被搞糊涂,比如我们希望显示一个北京时间,但是当我们使用date函数进行输出时,却发现少了8个小时.几乎所有的php猿类都必须对php中几个重要的时间转换等方法进行 ...

  9. SQL Server 本地时间和UTC时间的相互转换的代码

    DECLARE @LocalDate DATETIME, @UTCDate DATETIME, @LocalDate2 DATETIME   SET @LocalDate = GETDATE() SE ...

随机推荐

  1. HTTP、 TCP、 IP、 Socket、 XMPP

    网络自下而上分为: 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 HTTP:应用层协议,主要解决如何包装数据 XMPP:应用层协议 TCP:传输层协议,主要解决数据如何在网络中传输 IP ...

  2. Shiro系列(1) - 权限管理的介绍与原理

    1. 什么是权限管理 一般来说,只要有用户参与,那么该系统都会需要权限管理,权限管理实现了对用户访问系统  指定功能的限制,按照管理员定义的安全规则或权限策略,限制用户只能访问自己被授权的那些资源路径 ...

  3. Atitit 获取剪贴板内容

    Atitit 获取剪贴板内容 1.1. Java当然有这个功能,但是体积大,先使用script语言实现吧..1 1.2. node.js 好像没这个api  ...1 1.3. Ahk也没有..Aut ...

  4. Why-are-GPUs-well-suited-to-deep-learning

    https://www.quora.com/Why-are-GPUs-well-suited-to-deep-learning http://timdettmers.com/2015/03/09/de ...

  5. jsonrpc使用

    jsonrpc使用 1.什么是rpc RPC(Remote Procedure Call)远程过程调用,简单说就是通过网络请求服务,不需要了解底层网络技术的协议. 常用语分布式应用程序. 2.rpc数 ...

  6. python(41):copy拷贝(深拷贝deepcopy与浅拷贝copy)

    Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1.copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2.copy.deepco ...

  7. shell格式化字符串

    假如你有以下代码: TEMP_SQL="SELECT count(uid) from ${TABLE_PREFIX}_%s;" SUM= for((i=${MIN};i<${ ...

  8. 【word2vec】Distributed Representation——词向量

    Distributed Representation 这种表示,它最早是 Hinton 于 1986 年提出的,可以克服 one-hot representation 的缺点. 其基本想法是: 通过训 ...

  9. Python3将两个有序数组合并为一个有序数组

    [本文出自天外归云的博客园] 第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性.(不好) 第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到 ...

  10. 这到底是什么bug?---已结贴

    问题描述:全局变量,会被莫名其妙更改!打印为50,后面做比较的时候这个值为0了. 第一,我肯定没有犯低级错误,没有其他的更改,搜索全部代码,没有发现这个变量因为我程序问题导致不符合预期,同时找了两位同 ...