Arduino: как перевести эпоху в миллисекунды в эпоху - PullRequest
0 голосов
/ 19 января 2020

В настоящее время я загружаю JSON из внешнего источника через HTTP. Работаем без проблем. После этого я разбираю его с Arduino Json.

String payload = https.getString();
const size_t capacity = JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(9) + 210;
DynamicJsonDocument jsonDoc(capacity);
deserializeJson(jsonDoc, payload);

Содержится в JSON большое число:

[{"date":1579459067000,"dateString":"2020-01-19T18:37:47Z"}]

Так как мне нужна метка unixtime без миллис? Я пробовал с длинными и двойными, но это просто слишком большой. Как я могу преобразовать это большое число 1579459067000 в 1579459067, или мне лучше разобрать dateString?

В конце концов, мне нужно, чтобы оно было длинным.

Заранее спасибо!

1 Ответ

0 голосов
/ 23 января 2020

Чтобы работать с 64-битным целым числом с Arduino Json, вы должны использовать

#define ARDUINOJSON_USE_LONG_LONG 1 // we need to store long long
#include <ArduinoJson.h>

Я нашел информацию здесь , и я проверил ее на Arduino Json версии 6 на Uno и на esp8266. Это работает.

#define ARDUINOJSON_USE_LONG_LONG 1 // we need to store long long
#include <ArduinoJson.h>

const char* json = "{\"date\":1579459067000,\"dateString\":\"2020-01-19T18:37:47Z\"}";

void setup() {
  Serial.begin(115200);

  StaticJsonDocument<200> doc;

  deserializeJson(doc, json);

  uint64_t t = doc["date"];

  Serial.println((unsigned long) (t / 1000));

}

void loop() {

}
...