首页 > 解决方案 > 如何在 Arduino-ESP8266 上从 C/C++ 中的字符串解析 time_t?

问题描述

我正在用 Arduino 编程的 ESP8266 Huzzah 微控制器上编写嵌入式程序,我用它来制作气象站。我正在从服务器获取一些 json 天气数据,我可以在其中解析出请求中的 Date 标头以了解当前时间(因为微控制器没有内部时钟),它采用这种格式

Mon, 31 Aug 2020 18:11:26 GMT

我希望控制器在每天 06:00 更新其预测(闪烁 LED 下雨),并获得下一个 12-24 小时的预测。天气预报 JSON 数据给出的预测格式为

2020-06-10T13:00:00Z

我如何将这些解析为time_t以便我可以比较它们并计算何时更新我的​​预测?我查看了time.h标准 C 库,但找不到解析器。

标签: c++carduinoesp8266arduino-esp8266

解决方案


如果你有strptime(),那么考虑这个:

#include <stdio.h>
#include <time.h>

int main() {
        struct tm tm = {0};
        const char *ts1 = "Mon, 31 Aug 2020 18:11:26 GMT";
        strptime(ts1, "%A, %d %B %Y %H:%M:%S GMT", &tm);
        printf("%s = %ld\n", ts1, timegm(&tm));
        const char *ts2 = "2020-06-10T13:00:00Z";
        strptime(ts2, "%Y-%m-%dT%H%M%SZ", &tm);
        printf("%s = %ld\n", ts2, timegm(&tm));
}

推荐阅读