如何从 MQL4 中的文本字符串中获取时间?

How to grab a time from a string of text in MQL4?

正在尝试从 MQL4.

中的字符串文本中获取时间值

字符串

string start_time = "From 21:17 03-02-2016 GMT Till 01:17 04-02-2016 GMT";

我试过的代码

string EndDate = StrToTime( StringSubstr( start_time,
                                          StringFind( start_time,
                                                      "Till "
                                                      )
                                          + 5,
                                          ( StringFind( start_time,
                                                        "GMT",
                                                        StringFind( start_time,
                                                                    "Till "
                                                                    )
                                                        + 5
                                                        ) - 1
                                            )
                                          - StringFind( start_time,
                                                        "Till "
                                                        )
                                          - 2
                                          )
                            );
datetime exptime = EndDate;

当前输出如图

2016.02.03 01:17

它正在抓取 From 日期而不是 Till 日期。

有更简单的方法吗?或者任何人都知道如何修复它的方法?

如有任何帮助,我们将不胜感激!

好吧,让我们一步一步来:


正确抓取“From”部分:

int startPTR = StringFind( start_time, // __________ "From 21:17 03-02-2016 GMT ...
                           "From "     // __________ |From |.....
                           )           //  points at |F    ^
                           + 5;        //  points    |>>>>5|B after "From " starts ...

                                       //             0         1         2
                                       //             .123456789.123456789.123
int stopPTR  = StringFind( start_time, // __________ "From 21:17 03-02-2016 GMT ...
                           " GMT "     // ________________________________| GMT |..
                           );          // points at _______________________^

string FromTIME = StringSubstring( start_time, // __________ "From 21:17 03-02-2016 GMT ...
                                   startPTR,   // [ 5]
                                   stopPTR     // [21]
                                   - startPTR  //-[ 5]
                                   );          //_________________|21:17 03-02-2016|

stringdatetime

的正确转换

还应检查 MQL4 语法细节,因为它报告:

StringToTime()
The function converts a string containing time or date in "yyyy.mm.dd [hh:mi]" format into datetime type.

原则上同样适用于StrToTime()函数。如果你有疑问,为什么New-MQL4确实是同一个东西有两个不同的功能,别问我,问MetaQuotes, Inc.

因此 FromTIME 字符串最终将不得不稍微重新洗牌以满足标准 StringToTime() 功能需求。

datetime Exp = StrToTime(  StringConcatenate( 
                        /* YYYY            */ StringSubstring( FromTIME, 12, 4 ),
                        /* .               */ ".",
                        /* MM              */ StringSubstring( FromTIME,  9, 2 ),
                        /* .               */ ".",
                        /* DD              */ StringSubstring( FromTIME,  6, 2 ),
                        /* _               */ " ",
                        /* HH:MM           */ StringSubstring( FromTIME,  0, 5 )
                                              )
                           );