C++ 如何将ISO 8601字符串转换为C++;?

C++ 如何将ISO 8601字符串转换为C++;?,c++,time,iso,time-t,C++,Time,Iso,Time T,有人知道如何从格式化的日期/时间字符串转换为时间字符串吗? 我使用C++,它需要在Windows和Mac上工作。 我已经编写了代码,但我确信有一个版本更“标准” 我会得到一个日期,比如2011-03-21 20:25,我必须告诉你时间是过去还是未来。你可以用它把字符串转换成struct tm,然后你可以用它把struct tm转换成time\t。例如: // Error checking omitted for expository purposes const char *timestr =

有人知道如何从格式化的日期/时间字符串转换为时间字符串吗? 我使用C++,它需要在Windows和Mac上工作。 我已经编写了代码,但我确信有一个版本更“标准”

我会得到一个日期,比如2011-03-21 20:25,我必须告诉你时间是过去还是未来。

你可以用它把字符串转换成
struct tm
,然后你可以用它把
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.

一个我认为很有趣的丑陋的破解:因为你只想确定哪个日期/时间更大,你可以将日期转换成字符串并比较字符串。;-)(好处是您不需要strtime,因为strtime在任何地方都不可用。)

#包括
#包括
int main(int argc,char*argv[])
{
const char*str=“2011-03-21 20:25”;
char nowbuf[100];
现在时间=时间(0);
struct tm*nowtm;
nowtm=本地时间(&now);
strftime(nowbuf,sizeof(nowbuf),%Y-%m-%d%H:%m”,nowtm);
if(strncmp(str,nowbuf,strlen(str))>=0)看跌期权(“未来”);else看跌期权(“过去”);
返回0;
}

如果时间戳位于本地时区,则以下方法将从ISO8601转换为UTC。此外,它并没有忽视潜在的夏时制。它是标准的C99

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

time_t from_iso8601_utc(const char* dateStr)
{
    struct tm t;
    int success = sscanf(dateStr, "%d-%d-%dT%d:%dZ", /* */
                         &t.tm_year, &t.tm_mon, &t.tm_mday, &t.tm_hour, &t.tm_min);
    if (success != 5) {
        return 0;
    }

    /* compensate expected ranges */
    t.tm_year = t.tm_year - 1900;
    t.tm_mon = t.tm_mon - 1;
    t.tm_sec = 0;
    t.tm_wday = 0;
    t.tm_yday = 0;
    t.tm_isdst = 0;

    time_t localTime = mktime(&t);
    time_t utcTime = localTime - timezone;
    return utcTime;
}
#包括
#包括
从iso8601到utc的时间(常量字符*日期字符串)
{
struct-tm-t;
int success=sscanf(dateStr,“%d-%d-%dT%d:%dZ”,/**/
&t、 年、月、日、时、分);
如果(成功!=5){
返回0;
}
/*补偿预期范围*/
t、 tm年=t.tm年-1900年;
t、 tm_mon=t.tm_mon-1;
t、 tm_sec=0;
t、 tm_wday=0;
t、 tm_yday=0;
t、 tm_isdst=0;
time\u t localTime=mktime(&t);
time\u t utcTime=本地时间-时区;
返回utcTime;
}

strtime不是标准的c语言。它在Windows上可用吗?@Null Set:Oops你说得对,忘了这一点<代码>strtime仅由POSIX定义。看到了,我本能地对这样的想法感到畏缩。。。这就是“YYYYMMDD HHMMSS”格式的要点——ascii比较实际上是有效的。当然,风险在于,如果他将来开始以不同的格式获取日期。关于跨平台
strtime
,也有类似的讨论。您可能需要ravenpoint的答案,并使用boost:
#包括“boost/date\u time/posix\u time/posix\u time.hpp”
#include <stdio.h>
#include <time.h>

time_t from_iso8601_utc(const char* dateStr)
{
    struct tm t;
    int success = sscanf(dateStr, "%d-%d-%dT%d:%dZ", /* */
                         &t.tm_year, &t.tm_mon, &t.tm_mday, &t.tm_hour, &t.tm_min);
    if (success != 5) {
        return 0;
    }

    /* compensate expected ranges */
    t.tm_year = t.tm_year - 1900;
    t.tm_mon = t.tm_mon - 1;
    t.tm_sec = 0;
    t.tm_wday = 0;
    t.tm_yday = 0;
    t.tm_isdst = 0;

    time_t localTime = mktime(&t);
    time_t utcTime = localTime - timezone;
    return utcTime;
}