I have a web service that returns timestamps in ISO 8601 format, e.g., "2021年06月25日T12:00:00"
I'm trying to turn the timestamp string into a tm type struct from the ESP8266 library <time.h>
, to perform time calculations using the difftime()
function.
I've been referring to the Redhat time functions https://sourceware.org/newlib/libc.html#time, as it seem to be compatible with the ESP library, though all i can find are functions converting tm structs to timestamp strings. Are there any functions to convert a string timestamp into a tm struct and then back into epoch? Or what would be the best way to approach this kind of conversion on the ESP8266 platform?
-
Does this answer your question? How to parse 20180810T143000Z to time_tJuraj– Juraj ♦2021年04月29日 05:26:31 +00:00Commented Apr 29, 2021 at 5:26
-
Thank you! This method works too, though i find the answer below to be more useful.Boyfinn– Boyfinn2021年04月29日 06:53:16 +00:00Commented Apr 29, 2021 at 6:53
-
sorry yes, there is a different format. strptime can't parse a timestamp without delimiters.Juraj– Juraj ♦2021年04月29日 07:08:16 +00:00Commented Apr 29, 2021 at 7:08
1 Answer 1
Try strptime
from the time.h
.
void setup()
{
struct tm tm = {0};
char buf[100];
// Convert to tm struct
strptime("2001年11月12日 18:31:01", "%Y-%m-%d %H:%M:%S", &tm);
// Can convert to any other format
strftime(buf, sizeof(buf), "%d %b %Y %H:%M", &tm);
Serial.printf("%s", buf);
}
void loop()
{
yield();
}
-
Thank you. The method above works. I just formatted my string as
"%Y-%m-%dT%H:%M:%S"
,instead.Boyfinn– Boyfinn2021年04月29日 06:51:32 +00:00Commented Apr 29, 2021 at 6:51