MQL4ドキュメンテーションはdatetime
、型が、合意されたタイム スケール データ ( である ) からの秒数として内部的に表されると宣言しました1970-01-01 00:00
。
これは
、コード
が読むことができると述べた(そして構文コンプライアンスを少し磨く)
oneYear = 60 * 60 * 24 * 365; // yes, astronomers would kill me
// for not solving those seconds,
// that sum up until a leap year
// consumes 'em on Feb-29th day :o)
もう少し
快適な方法で
操作するための別のオプションです。
datetime
datetime
string TimeToString( datetime aDatetimeVALUE,
int aModeOfDISPLAY = TIME_DATE|TIME_MINUTES
)
1970 年 1 月 1 日からの経過時間を秒単位で含む値をstring
of"yyyy.mm.dd hh:mi"
形式に変換します。
ここで、この中間形式の適切な位置に +1 を単純に追加できます (すべての派生値と影響値を に存在するものとして処理する必要はありませんstruct MqlDateTime
。ここで、 +1 か月移動すると再計算するのが私のお気に入りの値ではありません。 .day_of_week
day_of_year
aCurrentYEAR = int( StringSubstr( aDatetimeSTRING, 0, 4 ) );
aCurrentMONTH = int( StringSubstr( aDatetimeSTRING, 5, 2 ) );
aCurrentDAY = int( StringSubstr( aDatetimeSTRING, 8, 2 ) );
aNextYEAR = aCurrentYEAR + 1;
aNextMONTH = aCurrentMONTH + 1;
ついに
StringFormat( "%04d.%02d.%02d 00:00", aYearNUMBER, aMonthNUMBER, aDayNUMBER )
別の MQL4 標準関数を呼び出すために再構築を行います。
datetime StringToTime( string aDatetimeSTRING )
この関数は、時刻または日付を含む文字列を"yyyy.mm.dd [hh:mi]"
形式に変換しますdatetime
。
別のアプローチでは、完全に分解datetime
された aritmetics を
int aYE = TimeYear( aDatetimeVALUE );
int aMO = TimeMonth( aDatetimeVALUE );
int aDA = TimeDay( aDatetimeVALUE );
int aHO = TimeHour( aDatetimeVALUE );
int aMI = TimeMinute( aDatetimeVALUE );
int aDoW = TimeDayOfWeek( aDatetimeVALUE );
int aDoY = TimeDayOfYear( aDatetimeVALUE );
datetime aSameTimeNextYEAR = StructToTime( (MqlDateTime) { aYE + 1,
aMO,
aDA,
aHO,
aMI,
aDoW,
aDoY
}
);