当前位置: 首页 > news >正文

70 QDateTime时间戳转换有误

1 前言

        在开发工具中需要用时间戳转换成格式化时间来显示,但引用QT中自带的时间类QDateTime转换时,发现转换时间有误问题,转换的结果时分秒是正确的,但月份确实错误的。因此在未深入研究qt实现情况下,需要得到正确的格式化时间,需要另寻它法。

        本blog对该现象仅进行记录和给出“治标不治本的”解决方法。

2 现象

        首先给QT环境下出常用的时间戳转换格式化时间的方法。

QDateTime QDstarttime = QDateTime::fromTime_t(startTime); //时间戳非毫秒级
QString strStartTime = QDstarttime.toString("yyyy-mm-dd hh:mm:ss");
QDateTime QDstoptime = QDateTime::fromTime_t(stopTime); //时间戳非毫秒级
QString strStopTime = QDstoptime.toString("yyyy-mm-dd hh:mm:ss");

        基于上述代码的转换,对于两个时间戳分别是:1663223732 和 2114352000。转换结果如下图示,时、分、秒是正确的,但是月份是错误的。

        对于时间戳的正确与否,特定通过在线转换工具来检验,如下图示,可知时间戳是没问题的。 

        1663223732

        2114352000:

         因此根据上述情况,很有理由怀疑qt时间转换函数有问题,但由于没有时间看qt源码,所以想要在qt环境得到正确的格式化时间,得需要用其它代码替换。

3 解决方法(之一)

        本次的解决方案是,通过使用通用的时间函数,来避开使用QT的函数,从而实现正确的转换。

    
    time_t stime_t = startTime;
    struct tm *pstm = localtime(&stime_t);

    char tsBuf[128] = {0};
    sprintf(tsBuf, "%04d-%02d-%02d %02d:%02d:%02d",
                pstm->tm_year+1900, pstm->tm_mon+1,
                pstm->tm_mday, (pstm->tm_hour)%24, //时区问题
                pstm->tm_min,pstm->tm_sec);

    QString strStartTime(tsBuf);
    
    time_t etime_t = stopTime;
    struct tm *petm = localtime(&etime_t);

    char teBuf[128] = {0};
    sprintf(teBuf, "%04d-%02d-%02d %02d:%02d:%02d",
                petm->tm_year+1900, pstm->tm_mon+1,
                petm->tm_mday, (petm->tm_hour)%24, //时区问题
                petm->tm_min,petm->tm_sec);

    QString strStopTime(teBuf);
    

         用上述代码替换后,便可到正确的格式化时间。

over!

相关文章:

  • 中科大给师生们发了一封钓鱼邮件 结果3000多人上当了
  • ROS之rviz文件的加载和保存
  • ESP8266-Arduino编程实例-VCNL4040趋近传感器
  • 机器学习模型1——线性回归和逻辑回归
  • 基于WEB在线音乐工厂的设计与实现
  • 基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS
  • 快速学习MyBatis|实战项目详解
  • 戴尔笔记本重装系统硬盘加密怎么解除
  • 美团MTCTF 2022 smtp pwn解
  • 【linux操作系统】xshell原理及Linux权限深度理解(入门必备)
  • 机器学习概述、特征工程、机器学习算法基础
  • Minio安装
  • 大数据技术之Hive+Flume+Zookeeper+Kafka详解
  • leetcode/含并行连结的网络,GoogLeNet
  • 乡村调研笔记----乡村振兴,实现城乡融合发展新局面
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • [nginx文档翻译系列] 控制nginx
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Fastjson的基本使用方法大全
  • go语言学习初探(一)
  • JavaScript-Array类型
  • JS题目及答案整理
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Vue.js源码(2):初探List Rendering
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 检测对象或数组
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 聊聊redis的数据结构的应用
  • 浏览器缓存机制分析
  • 前端学习笔记之观察者模式
  • 使用权重正则化较少模型过拟合
  • 走向全栈之MongoDB的使用
  • 阿里云API、SDK和CLI应用实践方案
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • $forceUpdate()函数
  • (6)STL算法之转换
  • (9)目标检测_SSD的原理
  • (solr系列:一)使用tomcat部署solr服务
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (ZT)薛涌:谈贫说富
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (转)Sublime Text3配置Lua运行环境
  • *** 2003
  • ****Linux下Mysql的安装和配置
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .NET 8.0 发布到 IIS
  • .net core Swagger 过滤部分Api
  • .NET Core引入性能分析引导优化
  • .Net Core与存储过程(一)