如何使用MQL4查找当月的天数?

时间:2017-03-17 02:27:55

标签: mql4

是否有内置函数或一些优雅的方法来使用MQL4获取当月的天数?

或者,有没有办法检测当月的最后一个星期一?

2 个答案:

答案 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
              );
}