是否有内置函数或一些优雅的方法来使用MQL4获取当月的天数?
或者,有没有办法检测当月的最后一个星期一?
答案 0 :(得分:2)
这是我用的:
bool isLeapYear(const int _year){
if(_year%4 == 0){
if(_year%400 == 0)return true;
if(_year%100 > 0)return true;
}
return false;
}
int getDaysInMonth(MqlDateTime &mql){
if(mql.mon==2)
return 28+isLeapYear(mql.year);
return 31-((mql.mon-1)%7)%2;
}
//your function to get number of days:
MqlDateTime mql;
TimeToStruct(TimeCurrent(),mql);
int days = getDaysInMonth(mql); //result that you are looking for
答案 1 :(得分:1)
A1:不,没有内置功能。</ p>
A2:是的,有几种优雅的方法可以解决这个问题。一个可能是这样的:
int HowManyDaysInMONTH = { EMPTY,// stump
31, // Jan
28, // Feb + int LeapYear( const int aDate ){...}
31, // Mar
30, // Aug
31, // May
30, // Jun
31, // Jul
31, // Aug
30, // Sep
31, // Oct
30, // Nov
31 // Dec
};
//-------------------------------------------------------------+
int LeapYear( const int aDateToTEST ){
return ( 366 == TimeDayOfYear( StringToTime( StringFormat( "%4d.12.31", TimeYear( aDateToTEST ) ) ) ) ? 1
: 0
)
}
//-------------------------------------------------------------+
PrintFormat( "This month has %d days",
HowManyDaysInMONTH[TimeMonth( aDateTODAY )]
);
A3:或者,可以实现这样的组合。
bool IsLastMondayOfMONTH( const int aDateTODAY ){
return ( TimeDayOfWeek( aDateTODAY ) != 1 ? False
: TimeMonth( aDateTODAY ) == TimeMONTH ( aDateTODAY + 7 ) ? False
: True
);
}