ESP8266 ISO 8601 string to tm struct

У меня есть веб-сервис, который возвращает временные метки в формате ISO 8601, например, "2021-06-25T12:00:00". Я пытаюсь превратить строку метки времени в структуру типа tm из библиотеки ESP8266 <time.h><time.h>, чтобы выполнить вычисления времени с помощью функции difftime ().

Я имел в виду функции времени Redhat https://sourceware.org/newlib/libc.html#time, поскольку он, по-видимому, совместим с библиотекой ESP, хотя все, что я могу найти, - это функции, преобразующие структуры tm в строки временных меток. Существуют ли какие-либо функции для преобразования строковой временной метки в структуру tm, а затем обратно в эпоху? Или как лучше всего подойти к такому преобразованию на платформе ESP8266?

, 👍1

Обсуждение

Это ответ на ваш вопрос? Как проанализировать 20180810T143000Z по времени\_t, @Juraj

Спасибо! Этот метод тоже работает, хотя я нахожу ответ ниже более полезным., @Boyfinn

извините, да, есть другой формат. strptime не может анализировать метку времени без разделителей., @Juraj


1 ответ


Лучший ответ:

3

Попробуйте strptime из time.h.

void setup()
{
    
  struct tm tm = {0};
  char buf[100];
  
  // Преобразовать в tm struct
  strptime("2001-11-12 18:31:01", "%Y-%m-%d %H:%M:%S", &tm);
  
  // Может конвертировать в любой другой формат
  strftime(buf, sizeof(buf), "%d %b %Y %H:%M", &tm);
  Serial.printf("%s", buf);
}

void loop()
{
    yield();
}
,

Спасибо. Описанный выше метод работает. Вместо этого я просто отформатировал свою строку как"%Y-%m-%dT%H:%M:%S""., @Boyfinn