strftime 没有给出 struct tm 的年份
strftime not giving year of struct tm
我有这个函数可以获取输入日期的前一天:
Date dateDayBefore(char* inputDate)
{
struct tm dayBefore = { 0 };
char** fields = split(inputDate, 3, "/");
dayBefore.tm_mday = atoi(fields[0]);
dayBefore.tm_mon = atoi(fields[1]) - 1;
dayBefore.tm_year = atoi(fields[2]) - 1900;
dayBefore.tm_mday--;
mktime(&dayBefore);
char yesterday[10];
strftime(yesterday, sizeof(yesterday), "%d/%m/%Y", &dayBefore);
Date yesterdayDate = dateCreate(yesterday);
yesterdayDate.year += 1900;
return yesterdayDate;
}
假设使用的所有其他函数都是正确的(例如 split 和 dateCreate),它们被用在其他地方,一切都符合预期。
struct dayBefore
将包含年份,但 string yesterday
不会在 strftime
之后考虑它
对于:
输入日期 = 15/06/2020
预期结果:2020 年 6 月 14 日
实际结果:14/06/1900
部分调试截图:
您正在尝试将一个 10 个字符的字符串 (14/06/2020
) 存储到一个 10 个字符的数组中,这没有为 NULL 留下 space。
替换
char yesterday[10];
与
char yesterday[11];
您处理日期的方式似乎有问题,但我现在无法解决这些问题。
你的问题包含了很多不相关的细节。您的问题可以使用以下内容进行演示:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char* fields[] = { "15", "06", "2020" };
dayBefore.tm_mday = atoi(fields[0]);
dayBefore.tm_mon = atoi(fields[1]) - 1;
dayBefore.tm_year = atoi(fields[2]) - 1900;
dayBefore.tm_mday--;
mktime(&dayBefore);
char yesterday[10];
strftime(yesterday, sizeof(yesterday), "%d/%m/%Y", &dayBefore);
printf("%s\n", yesterday);
}
我有这个函数可以获取输入日期的前一天:
Date dateDayBefore(char* inputDate)
{
struct tm dayBefore = { 0 };
char** fields = split(inputDate, 3, "/");
dayBefore.tm_mday = atoi(fields[0]);
dayBefore.tm_mon = atoi(fields[1]) - 1;
dayBefore.tm_year = atoi(fields[2]) - 1900;
dayBefore.tm_mday--;
mktime(&dayBefore);
char yesterday[10];
strftime(yesterday, sizeof(yesterday), "%d/%m/%Y", &dayBefore);
Date yesterdayDate = dateCreate(yesterday);
yesterdayDate.year += 1900;
return yesterdayDate;
}
假设使用的所有其他函数都是正确的(例如 split 和 dateCreate),它们被用在其他地方,一切都符合预期。
struct dayBefore
将包含年份,但 string yesterday
不会在 strftime
对于: 输入日期 = 15/06/2020
预期结果:2020 年 6 月 14 日
实际结果:14/06/1900
部分调试截图:
您正在尝试将一个 10 个字符的字符串 (14/06/2020
) 存储到一个 10 个字符的数组中,这没有为 NULL 留下 space。
替换
char yesterday[10];
与
char yesterday[11];
您处理日期的方式似乎有问题,但我现在无法解决这些问题。
你的问题包含了很多不相关的细节。您的问题可以使用以下内容进行演示:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char* fields[] = { "15", "06", "2020" };
dayBefore.tm_mday = atoi(fields[0]);
dayBefore.tm_mon = atoi(fields[1]) - 1;
dayBefore.tm_year = atoi(fields[2]) - 1900;
dayBefore.tm_mday--;
mktime(&dayBefore);
char yesterday[10];
strftime(yesterday, sizeof(yesterday), "%d/%m/%Y", &dayBefore);
printf("%s\n", yesterday);
}