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

时间:2016-02-04 02:22:03

标签: string 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 日期。

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

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

正确抓取" From" -part:

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()
该功能将包含string格式的时间或日期的 "yyyy.mm.dd [hh:mi]" 转换为 datetime 类型。

原则上同样适用于 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 )
                                              )
                           );