#include <time.h>
#include <iostream>
int main()
{
struct tm dayofmonth = {0};
int iYear = 2012;
int iMonth = 2; // February
dayofmonth.tm_year = iYear - 1900;
dayofmonth.tm_mon = iMonth;
dayofmonth.tm_mday = 0;
dayofmonth.tm_isdst = 0;
mktime(&dayofmonth);
std::cout << "Number of days for the month " << dayofmonth.tm_mon << " is " << dayofmonth.tm_mday << std::endl;
}
需要编写一个简单的例程,以查找给定月份的天数。但是,对于mktime,我为什么要传递实际的月号而不是月号-1。
更令人困惑的是,在调用mktime之后,tm_mon返回月份-1而不是传递的原始月份。
答案 0 :(得分:6)
因为您设置了tm_mday = 0
。本月的“第0个”(tm_mon = 2
表示3月)回滚到上个月(2月)的最后一天。
是的,令人困惑的是tm_mday
是基于1的,而tm_mon
是基于0的。你最终习惯了: - )