C++ C++;日期时间分析

C++ C++;日期时间分析,c++,datetime,C++,Datetime,我使用strptime将datetime字符串解析为tm结构。 但我面临一个问题: 我有以下格式的日期: Thu Dec 13 23:44:45 MSK 2012 我使用%a%b%d%T”格式字符串解析到12月13日23:44:45。 但我不明白怎么分析这一年。我不能只使用“%a%b%d%t MSK%Y”,因为我需要独立于语言环境的解析器 我可以跳过MSKword吗?或者其他解决问题的方法?我没有找到答案,所以我写了自己的日期时间解析器: time_t timeParse(const char

我使用
strptime
将datetime字符串解析为
tm
结构。 但我面临一个问题:

我有以下格式的日期:

Thu Dec 13 23:44:45 MSK 2012
我使用
%a%b%d%T”
格式字符串解析
到12月13日23:44:45
。 但我不明白怎么分析这一年。我不能只使用
“%a%b%d%t MSK%Y”
,因为我需要独立于语言环境的解析器


我可以跳过
MSK
word吗?或者其他解决问题的方法?

我没有找到答案,所以我写了自己的日期时间解析器:

time_t timeParse(const char *string, struct tm *datetime)
{
    char dn[4], mn[4], ln[4];
    int d, h, m, s, y;
    sscanf(string, "%s %s %d %d:%d:%d %s %d", dn, mn, &d, &h, &m, &s, ln, &y);
    datetime->tm_sec = s;
    datetime->tm_min = m;
    datetime->tm_hour = h;
    datetime->tm_mday = d;
    if (!strcmp(mn, "Jan")) datetime->tm_mon = 0;
    if (!strcmp(mn, "Feb")) datetime->tm_mon = 1;
    if (!strcmp(mn, "Mar")) datetime->tm_mon = 2;
    if (!strcmp(mn, "Apr")) datetime->tm_mon = 3;
    if (!strcmp(mn, "May")) datetime->tm_mon = 4;
    if (!strcmp(mn, "Jun")) datetime->tm_mon = 5;
    if (!strcmp(mn, "Jul")) datetime->tm_mon = 6;
    if (!strcmp(mn, "Aug")) datetime->tm_mon = 7;
    if (!strcmp(mn, "Sep")) datetime->tm_mon = 8;
    if (!strcmp(mn, "Oct")) datetime->tm_mon = 9;
    if (!strcmp(mn, "Nov")) datetime->tm_mon = 10;
    if (!strcmp(mn, "Dec")) datetime->tm_mon = 11;
    datetime->tm_year = y - 1900;
    return mktime(datetime);
}
我手动填写必要的
tm结构
字段,而
mktime
填写其余字段:
tm\u wday
tm\u yday
tm\u isdst

你应该这样称呼它:

time_t t = timeParse("Thu Dec 13 23:44:45 MSK 2012", &datetime);

@似乎%Z只在@Just\u Mad中起作用,它看起来是正确的,但它不起作用:(您应该检查
sscanf
的返回值,并在
sscanf
格式字符串中指定字符数组的宽度。如果不这样做,该函数就是一个等待发生的微妙内存损坏错误(或者,更糟糕的是,一个安全漏洞正在等待被利用)。偏执狂编码器还会将字符数组预初始化为
{0}
,在出现意外代码执行流的情况下,将字符串保持为null结尾总是最安全的。为什么必须传递结构“datetime”对于这个函数?你填充了函数中的所有结构字段,为什么不能在函数中创建和销毁它?@我需要时间和结构tm表示时间。