C++Qt 获取互联网时间

简介: C++Qt 获取互联网时间

一、原理

C++Qt 向baidu发送请求,获取互联网时间,然后转本地时间

二、遇到的问题

在Qt中将获取到的时间日期转QDateTime时,转化失败,不知道什么原因,只能自己手写一个字符串拆分

QDateTime dt = QDateTime::fromString("Thu, 18 May 2023 05:38:45 GMT", "ddd, dd MMM yyyy hh:mm:ss 'GMT'");

不知道为什么转化失败???有人知道吗

之前自己手写一个字符串拆分,现在找到了解决方法,感谢@mideum

已解决

字符串包含英文日期和月份转QDateTime

代码

#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply>
#include <QDateTime>
#include <QDebug>
#include <QTimeZone>
#include <QDate>
#include <QTime>
void QtNetDate::getNetDateTime()
{
  QNetworkAccessManager *manager = new QNetworkAccessManager();
  QNetworkReply *reply = manager->get(QNetworkRequest(QUrl("http://www.baidu.com")));
  QObject::connect(reply, &QNetworkReply::finished, [=]() {
  if (reply->error() != QNetworkReply::NoError) {
    qDebug() << "Error:" << reply->errorString();
    return;
  }
  QString dateStr = reply->rawHeader("Date");
  QDateTime m_dt = getDateTime(dateStr);
  qDebug() << m_dt.toString("yyyy-MM-dd hh:mm:ss");
  reply->deleteLater();
  manager->deleteLater();
  });
}
//字符串拆分
QDateTime QtNetDate::getDateTime(QString str_datetime)
{
  //"Thu, 18 May 2023 05:38:45 GMT" 
  int year = str_datetime.mid(12, 4).toInt();
  QString str_month = str_datetime.mid(8, 3);
  QVector<QString> months = { "Jan","Feb","Mar","Apr" ,"May" ,"Jun" ,"Jul" ,"Aug" ,"Sep" ,"Oct" ,"Nov" ,"Dec" };
  int month;
  if (months.contains(str_month))
  month = months.indexOf(str_month) + 1;
  int day = str_datetime.mid(5, 2).toInt();
  int hour = str_datetime.mid(17, 2).toInt();
  int minute = str_datetime.mid(20, 2).toInt();
  int second = str_datetime.mid(23, 2).toInt();
  QDateTime dt(QDate(year, month, day), QTime(hour, minute, second), Qt::UTC);
  QTimeZone localZone = QTimeZone::systemTimeZone();
  dt = dt.toTimeZone(localZone);
  return dt;
}


推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:

零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)

https://xxetb.xet.tech/s/VsFMs

相关文章
|
6月前
|
开发框架 Linux C语言
C、C++、boost、Qt在嵌入式系统开发中的使用
C、C++、boost、Qt在嵌入式系统开发中的使用
206 1
|
6月前
|
设计模式 缓存 编译器
【C++ 元对象系统03】深入探索Qt反射:从原理到实践
【C++ 元对象系统03】深入探索Qt反射:从原理到实践
272 4
|
6月前
|
安全 网络协议 数据安全/隐私保护
掌握Qt和C++:构建你的第一个P2P应用程序
掌握Qt和C++:构建你的第一个P2P应用程序
244 3
|
6月前
|
存储 算法 API
【Qt 基本类】QDateTime类在C++中的应用与深度解析
【Qt 基本类】QDateTime类在C++中的应用与深度解析
214 0
|
6月前
|
存储 网络协议 C语言
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
429 0
|
6月前
|
存储 传感器 安全
【串口通信】使用C++和Qt设计和实现串口协议解析器(二)
【串口通信】使用C++和Qt设计和实现串口协议解析器
524 0
|
6月前
|
存储 开发框架 算法
【串口通信】使用C++和Qt设计和实现串口协议解析器(一)
【串口通信】使用C++和Qt设计和实现串口协议解析器
1432 0
|
4月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
176 1
Qt(C++)开发一款图片防盗用水印制作小工具
WK
|
4天前
|
开发框架 开发工具 C++
C++跨平台框架Qt
Qt是一个功能强大的C++跨平台应用程序开发框架,支持Windows、macOS、Linux、Android和iOS等操作系统。它提供了250多个C++类,涵盖GUI设计、数据库操作、网络编程等功能。Qt的核心特点是跨平台性、丰富的类库、信号与槽机制,以及良好的文档和社区支持。Qt Creator是其官方IDE,提供了一整套开发工具,方便创建、编译、调试和运行应用程序。Qt适用于桌面、嵌入式和移动应用开发。
WK
20 5
|
3月前
|
存储 C++
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】