C ++ strptime一年没有填写

时间:2014-01-17 13:31:48

标签: c++ strptime

我正在尝试使用strptime将字符串解析为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);

在strptime调用之后,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}

我确定我错过了一些简单的事情 - 有人能指出我吗?

1 个答案:

答案 0 :(得分:2)

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

  

%Z格式说明符只接受时区的缩写   当地时区或价值        “格林威治标准时间”。这种限制是由于时区缩写的过度加载导致的模糊性。        其中一个例子是东部标准时间和澳大利亚东部夏令时的EST。

事实上,如果我将“UTC”更改为“GMT”,代码会突然发挥作用。请注意,无论出于何种原因,Python在这里都更加智能,并且还支持“UTC”。