C 查找一个月的第一天所在的星期几的结果不正确
我有以下C代码:C 查找一个月的第一天所在的星期几的结果不正确,c,time.h,C,Time.h,我有以下C代码: #include <stdio.h> #include <time.h> struct tm tm; int startDayOfWeek; int findStartDateInMonth(int month,int year) { tm.tm_mon = month; tm.tm_year = year - 1900; tm.tm_mday = 1; tm.tm_hour = tm.tm_min = tm
#include <stdio.h>
#include <time.h>
struct tm tm;
int startDayOfWeek;
int findStartDateInMonth(int month,int year)
{
tm.tm_mon = month;
tm.tm_year = year - 1900;
tm.tm_mday = 1;
tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
tm.tm_isdst = -1;
if(mktime(&tm) != -1)
{
startDayOfWeek = tm.tm_wday;
}
return startDayOfWeek;
}
int main(void) {
char *wday[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"};
int a = findStartDateInMonth(8,2018);
if(mktime(&tm) != -1)
printf("%s\n", wday[tm.tm_wday]);
return 0;
}
#包括
#包括
struct-tm;
int startDayOfWeek;
int findStartDateInMonth(int月,int年)
{
tm.tm_mon=月份;
tm.tm_年=1900年;
tm.tmmday=1;
tm.tm_小时=tm.tm_分钟=tm.tm_秒=0;
tm.tm_isdst=-1;
如果(mktime&tm)!=-1)
{
startDayOfWeek=tm.tm_wday;
}
返回startDayOfWeek;
}
内部主(空){
char*wday[]={“星期日”、“星期一”、“星期二”、“星期三”,
“星期四”、“星期五”、“星期六”};
int a=findStartDateInMonth(82018);
如果(mktime&tm)!=-1)
printf(“%s\n”,wday[tm.tm_wday]);
返回0;
}
代码返回星期六,这是错误的,因为2018年8月1日是星期三
非常感谢您的帮助。struct tm的定义中有一个陷阱:
int tm_mday; // day of the month — [1, 31]
int tm_mon; // months since January — [0, 11]
也就是说,tm_mday
是基于1的,但是tm_mon
是基于0的。将其设置为8
意味着您看到的是9月1日,而不是8月1日(2018-09-01确实是周六)
试一试
struct tm
的定义中有一个陷阱:
int tm_mday; // day of the month — [1, 31]
int tm_mon; // months since January — [0, 11]
也就是说,tm_mday
是基于1的,但是tm_mon
是基于0的。将其设置为8
意味着您看到的是9月1日,而不是8月1日(2018-09-01确实是周六)
试一试
该tm_mon
的范围为0-11
因此,赋值时需要将1减去tm_mon
tm.tm_mon = month - 1;
这应该可以解决您的问题。即tm\u mon
的范围为0-11
因此,赋值时需要将1减去tm_mon
tm.tm_mon = month - 1;
这应该能解决你的问题