C++ C++;strptime未填写年份

C++ C++;strptime未填写年份,c++,strptime,C++,Strptime,我正在尝试使用strtime将字符串解析为struct tm。看起来很简单,但它没有正确填写年份(是的,我知道1900年的偏移量)-通话后,年份设置为0。其他领域看起来不错。见下文: struct tm tm; memset(&tm, 0, sizeof(struct tm)); strptime("Fri Jan 17 09:44:33 UTC 2014", "%a %b %d %H:%M:%S %Z %Y", &tm); 在strtime调用之后,tm结构如下所示-注意,t

我正在尝试使用strtime将字符串解析为struct tm。看起来很简单,但它没有正确填写年份(是的,我知道1900年的偏移量)-通话后,年份设置为0。其他领域看起来不错。见下文:

struct tm tm;
memset(&tm, 0, sizeof(struct tm));
strptime("Fri Jan 17 09:44:33 UTC 2014", "%a %b %d %H:%M:%S %Z %Y", &tm);
在strtime调用之后,tm结构如下所示-注意,tm_year=0,我希望它是114:

{tm_sec = 33, tm_min = 44, tm_hour = 9, tm_mday = 17, tm_mon = 0, tm_year = 0,
 tm_wday = 5, tm_yday = 0, tm_isdst = 0, tm_gmtoff = 0, tm_zone = 0x0}
我确信我遗漏了一些简单的东西-有人能指出给我看吗?

在我的系统(Mac OS X)上,
man strtime
有关于%Z的注释:

%Z格式说明符只接受 本地时区或值 “格林尼治标准时间”。这一限制是由于时区缩写的过度加载导致的歧义。 其中一个例子是东部标准时间和澳大利亚东部夏季时间


事实上,如果我将您的“UTC”更改为“GMT”,代码会突然生效。请注意,无论出于何种原因,Python在这里都更智能,并且也支持“UTC”。

我猜它会尝试匹配%ZIt中的整个字符串,虽然不是在C++中工作:
>datetime.datetime.strtime(“Fri Jan 17 09:44:33 UTC 2014”,%a%b%d%H:%M:%S%Z%Y”)datetime.datetime(2014,1,17,9,44,33)
就是这样。如果删除%Z并使用以下格式字符串,则正确获取年份:“%a%b%d%H:%M:%S UTC%Y”。因为我知道所有时间都是UTC,所以我可以不受影响,尽管这并不优雅。我可能会尝试sscanf方法…我一直认为这种约会时间格式非常愚蠢。天哪,谁会选择这种可怕的格式?谢谢你的快速回复。正如我在上面所评论的,现在我知道了这个问题,我可以解决这个问题了!