10 月 31 日跳过,为什么?

问题描述 投票:0回答:1

我不经常编程,我可能会跳过一些重要的事情,但是...... 我希望以下代码能够在 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

c gcc timestamp time.h
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.