我不经常编程,我可能会跳过一些重要的事情,但是...... 我希望以下代码能够在 10 月 30 日和 11 月 1 日之间写入 10 月 31 日。
我的输出跳过了 31 号。
这是一个错误吗?我想念这些功能吗? 我想我做错了什么,因为我没有发现关于这样一个现有错误的评论。
有人可以帮忙吗? 谢谢!
(使用Ubuntu 24.04.1)
PS:在按下“发送”之前,我发现了我的新手我的股份。发布以帮助像我这样的其他新手。 我原以为 1 月会被索引为第 1 个月,但实际上是第 0 个月。
#包括
int main(int argc, char **argv) {
struct tm * NewDate;
struct tm myDate;
myDate.tm_mday = 30;
myDate.tm_mon = 10;
myDate.tm_year = 2024; // Date == April 6, 2014
myDate.tm_hour = 23;
myDate.tm_min = 59;
myDate.tm_sec = 59;
time_t TimeStamp;
while ( myDate.tm_min > 50 || myDate.tm_min < 5 )
{
printf( " %d/%d/%d_%02d:%02d \n", myDate.tm_mday, myDate.tm_mon, myDate.tm_year, myDate.tm_hour, myDate.tm_min );
TimeStamp = mktime ( &myDate );
TimeStamp +=100;
NewDate = localtime ( &TimeStamp );
myDate = *NewDate;
}
return 0;
}
Result:
:~/Essai$ gcc bug.c
xx@xx:~/Essai$ ./a.out
30/10/2024_23:59
1/11/2024_00:01
1/11/2024_00:03
1/11/2024_00:04
期待: 30/10/2024_23:59 31/10/2024_00:01 31/10/2024_00:03 31/10/2024_00:04
tm_mon
的范围是0-11而不是1-12。第 10 个月是 11 月,只有 30 天,因此输出是正确的。
使用
strftime()
你可以看到这是正确的:
char buffer[255];
if (strftime(buffer, sizeof buffer, "%A %c", &myDate))
printf("%s\n", buffer);
struct tm