QT与嵌入式——获取网络实时时间

目录

1、使用QT通过网络API接口获取网络实时时间

1.1、首先在网上找一个获取实时时间的API接口

[1.2、 根据第一步获取的链接来发送请求](#1.2、 根据第一步获取的链接来发送请求)

1.3、通过connect链接信号与槽

注意的点:

2、为什么需要网络实时时间

3、获取本机的实时时间

4、顺带提一句


1、使用QT通过网络API接口获取网络实时时间

cpp 复制代码
QString urlStr = "http://api.k780.com/?app=life.time&appkey=74655&sign=f0fc1a4e2b7459957de0ddf866ace591&format=json";
        QUrl url(urlStr);
        // 创建请求
        QNetworkRequest request(url);
        // 发送 GET 请求
        QNetworkReply *reply = networkManager->get(request);
        // 连接信号槽来处理响应
        connect(reply, &QNetworkReply::finished, [=]() {
            // 检查请求是否成功
            if (reply->error() != QNetworkReply::NoError) {
                qDebug() << "Request failed: " << reply->errorString();
            }
            // 获取返回的 JSON 数据
            QByteArray responseData = reply->readAll();

            // 解析 JSON 数据
            QJsonDocument jsonDoc = QJsonDocument::fromJson(responseData);

            if (!jsonDoc.isObject()) {
                qDebug() << "Failed to parse JSON";
            }
            qDebug() << jsonDoc;

            QJsonObject jsonObject = jsonDoc.object();
            if (jsonObject.contains("datetime_1")) {
                time = jsonObject["datetime_1"].toString();
                qDebug() << "Real-time time: " << time;
            } else {
                qDebug() << "Time not found in response";
            }
            reply->deleteLater();  // 释放 reply 对象
        });

打印的结果

1.1、首先在网上找一个获取实时时间的API接口

列如:

北京时间校准接口api - 数据接口 - NowAPI

时间操作取当前北京时间免费API - 提供免费接口调用平台

根据第一个为例

第一步:网站给的API示例

第二步:API链接的参数

第三步:API的格式

复制代码
最终得到一个链接
cpp 复制代码
https://sapi.k780.com/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json

打开链接就可以看见返回了一个json数据包,包含了时间的数据,标准时间到现在的秒数,毫秒数,实时时间,中文编码的实时时间,周数等等...

1.2、 根据第一步获取的链接来发送请求

cpp 复制代码
QString urlStr = "http://api.k780.com/?app=life.time&appkey=74655&sign=f0fc1a4e2b7459957de0ddf866ace591&format=json";
        QUrl url(urlStr);
        // 创建请求
        QNetworkRequest request(url);
        // 发送 GET 请求
        QNetworkReply *reply = networkManager->get(request);

还是根据网站给的

我们采用get请求

1.3、通过connect链接信号与槽

cpp 复制代码
 connect(reply, &QNetworkReply::finished, [=]() {
            // 检查请求是否成功
            if (reply->error() != QNetworkReply::NoError) {
                qDebug() << "Request failed: " << reply->errorString();
            }
            // 获取返回的 JSON 数据
            QByteArray responseData = reply->readAll();

            // 解析 JSON 数据
            QJsonDocument jsonDoc = QJsonDocument::fromJson(responseData);

            if (!jsonDoc.isObject()) {
                qDebug() << "Failed to parse JSON";
            }
            qDebug() << jsonDoc;

            QJsonObject jsonObject = jsonDoc.object();
            if (jsonObject.contains("datetime_1")) {
                time = jsonObject["datetime_1"].toString();
                qDebug() << "Real-time time: " << time;
            } else {
                qDebug() << "Time not found in response";
            }
            reply->deleteLater();  // 释放 reply 对象
        });

解释一下代码:我们直接读取API接口返回的数据

返回的数据是json数据包,格式就是直接打开网页看见的样子,所以如果我要得到datetime_1;这个数据,需要自己提取,改信号与槽就是在获取与处理得到的json数据包;

注意的点:

如果获取成功返回的"success"的值为1;时间的数据在"result"里面,所以我们需要先提取"result"的值再提取"datetime_1"的值

如果获取不成功(网络不好或者访问次数到限制了------免费的一小时只能访问200次)

"success"的值为0;

2、为什么需要网络实时时间

我们知道,QT自带有获取本机实时时间的函数,所以如果直接调用不是更简单吗?

但是我们是QT与嵌入式;如果开发板没有自带RTC,那么我们用QT的获取本机实时时间获取到的应该是系统装载好的时候的时间,往后的时间开发板是不会记录的,所以本文介绍的方法,适用于没有RTC的开发板

但是也顺便介绍一下,获取本机实时时间的方式

3、获取本机的实时时间

cpp 复制代码
NOWTime = QDateTime::currentDateTime();
    // 将时间格式化为字符串
    QString sendTime = NOWTime.toString("yyyy-MM-dd HH:mm:ss");

简单粗暴

第一句获取当前时间的时间戳

第二句将时间戳以"yyyy-MM-dd HH:mm:ss"的格式存入sendTime这个qstring

4、顺带提一句

往上还有很多TCP,NTP的方式,个人感觉对我一个小白来说,介绍都不是很友好,如果是像我一样的小白,还是用别人做好的API接口方便

相关推荐
YYYing.10 小时前
【设计模式系列 (五) 】原型模式
开发语言·后端·设计模式·原型模式·c/c++
重生之小比特10 小时前
【C++进阶】哈希表实现
开发语言·c++·哈希
m0_3807438710 小时前
VisualStudio中OpenCV的创建与配置使用小结
开发语言·c++
凉茶钱10 小时前
【C++】动态内存管理完整解析:从内存划分到 new delete 底层原理
c语言·开发语言·c++·内存管理·动态内存
小七在进步10 小时前
类和对象(五)
java·开发语言·算法
Rebecca_aLi10 小时前
码匠教育:零基础学 Python,标识符到循环全套基础语法解析
开发语言·python·正则表达式
IvanCodes11 小时前
Python 正则表达式(十四):文本匹配、查找与替换
开发语言·python·正则表达式
夜雪一千11 小时前
Python URL编码踩坑:单层编码、双重编码实战解析
开发语言·python
孙启超11 小时前
【AI开发之Rust】第 21 课:双端集成与出包 —— Android(.so→AAR)与 iOS(xcframework)
开发语言·后端·rust
Brilliantwxx11 小时前
【STM32】 __weak 弱引用、中断标志位、异常处理与 HAL_Delay 优先级
开发语言·stm32·单片机·嵌入式硬件