Как преобразовать строку ISO 8601 в time_t в С++?
Кто-нибудь знает, как перейти от ISO-8601 - форматированная строка даты/времени к time_t
?
Я использую С++, и он должен работать на Windows и Mac.
Я написал код, но я уверен, что есть версия, более стандартная.
Я получаю дату как 2011-03-21 20:25
, и я должен сказать, прошло ли время в прошлом или в будущем.
Ответы
Ответ 1
Один уродливый взлом, который я думал, будет забавным: поскольку вы только хотите определить, какая дата/время больше, вы можете преобразовать дату в строку и сравнить строки.;-) (Поверхность - вам не нужна strptime, которая недоступна везде.)
#include <string.h>
#include <time.h>
int main(int argc, char *argv[])
{
const char *str = "2011-03-21 20:25";
char nowbuf[100];
time_t now = time(0);
struct tm *nowtm;
nowtm = localtime(&now);
strftime(nowbuf, sizeof(nowbuf), "%Y-%m-%d %H:%M", nowtm);
if (strncmp(str, nowbuf, strlen(str)) >= 0) puts("future"); else puts("past");
return 0;
}
Ответ 2
Вы можете использовать strptime
для преобразования из строки в struct tm
, а затем вы можете использовать mktime
для преобразования из struct tm
в time_t
. Например:
// Error checking omitted for expository purposes
const char *timestr = "2011-03-21 20:25";
struct tm t;
strptime(timestr, "%Y-%m-%d %H:%M", &t);
time_t t2 = mktime(&t);
// Now compare t2 with time(NULL) etc.