2012-04-24 5 views
1
#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に渡すときに月の数字を実際の月に設定するのはなぜですか?

mktimeを呼び出した後、tm_monは渡された元の月の代わりに月-1を返します。

+0

しかし、私はtm_mdayを0に渡さないと、その月の合計日数は取得できません。 – user373215

答えて

6

tm_mday = 0を設定したためです。その月の "0"(tm_mon = 2は3月を意味します)は前の月の最終日(2月)にロールバックします。

はい、tm_mdayが1ベースであるのに対して、tm_monは0ベースであることが混乱しています。最終的にそれに慣れる:-)

+0

入手しました。スティーブに感謝します。 – user373215

関連する問題