gpt4 book ai didi

c - strptime 不适用于时区格式说明符

转载 作者:行者123 更新时间:2023-11-30 15:09:07 27 4
gpt4 key购买 nike

我是 c 语言新手,正在尝试 strptime 函数,该函数将字符串时间转换为结构 tm。转换后我没有得到正确的时间。一切都很好,但年份显示错误(默认年份 1900)。

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

int main()
{
struct tm tm;
char *pszTemp = "Mon Apr 25 09:53:00 IST 2016";
char szTempBuffer[256];

memset(&tm, 0, sizeof(struct tm));
memset(szTempBuffer, 0, sizeof(szTempBuffer));
strptime(pszTemp, "%a %b %d %H:%M:%S %Z %Y", &tm);
strftime(szTempBuffer, sizeof(szTempBuffer), "%Y-%m-%d %H:%M:%S", &tm);

printf("Last Boot Time after parsed = %s\n", szTempBuffer);

return 0;
}

Output : 1900-04-25 09:53:00

最佳答案

正如您在 time.h 源文件中看到的,您必须在包含 time.h 之前声明 __USE_XOPEN_GNU_SOURCE

#define __USE_XOPEN
#define _GNU_SOURCE

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

int main()
{
struct tm tm;
char *pszTemp = "Mon Apr 25 09:53:00 IST 2016";
char szTempBuffer[256];

memset(&tm, 0, sizeof(struct tm));
memset(szTempBuffer, 0, sizeof(szTempBuffer));
strptime(pszTemp, "%a %b %d %H:%M:%S %Z %Y", &tm);
strftime(szTempBuffer, sizeof(szTempBuffer), "%Y-%m-%d %H:%M:%S", &tm);

printf("Last Boot Time after parsed = %s\n", szTempBuffer);

return 0;
}

您还可以简单地将定义添加到 gcc 命令中:

gcc -Wall test.c -o test -D__USE_XOPEN -D_GNU_SOURCE

编辑

This historical SO post给出有关这些定义的所有信息。

关于c - strptime 不适用于时区格式说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36865419/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com