函数StrToTime导致错误4051

 

你好。

build >600中的编辑器不喜欢StrToTime这个函数。

调用它导致错误4051。怎么了?

代码在这里。

//+------------------------------------------------------------------+
//| test.mq4 |
//+------------------------------------------------------------------+

#property version "1.00"

//--- input parameters
input string TimeClose_="21:45";
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
datetime xxxxx = StrToTime("21:45"); // makes no difference with TimeClose_ from the input
Print("error: "+GetLastError());
}
//+------------------------------------------------------------------+

每次打钩 的结果

这里有什么问题。用编辑器509编译当然不会产生错误。

 
kla-mue:

你好。

build >600中的编辑器不喜欢StrToTime这个函数。

调用它导致错误4051。怎么了?

代码在这里。

<deleted>(删除

请使用SRC按钮 发布你的代码
 

好了,现在我知道了......下次......。

你有办法解决我的问题吗?

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//+------------------------------------------------------------------+

#property version   "1.00"

//--- input parameters
input string   TimeClose_="21:45";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   datetime xxxxx = StrToTime("21:45");
   Print("error: "+GetLastError());
  }
//+------------------------------------------------------------------+
 
kla-mue: 好了,现在我知道了......下一次......。
  1. 下次再编辑 你的原帖。
  2.    datetime xxxxx = StrToTime("21:45");
       Print("error: "+GetLastError());
    测试 EURUSD,H1: 错误。4051
    不要调用GetLastError(),除非你 一个错误。xxxx==0吗?你为什么不把它和GLE一起打印出来?
  3. 也许你应该试试新的StringToTime
 
kla-mue:

好了,现在我知道了......下次......。

你有办法解决我的问题吗?

它可能已经被修复 ..https://www.mql5.com/en/forum/149475,但无论如何请向服务台 报告。

 
WHRoeder:
  1. 下次再编辑 你的原帖。
  2. 测试 EURUSD,H1: 错误。4051
    除非你 一个错误,否则不要调用GetLastError()xxxx==0吗?你为什么不把它和GLE一起打印出来?
  3. 也许你应该试试新的StringToTime



@2: 如果我不问GLE,我应该如何发现是否有错误?

这段代码是为了找出,为什么我的EA会出现错误信息。没有其他目的。


@3:StringToTime导致同样的错误:(


有其他的可能性吗?

 
kla-mue:@2:如果我不问GLE,我应该如何发现是否有错误?

GLE不会告诉你是否有错误。它是在你有错误的时候告诉你错误是什么。

GLE返回最后的错误代码。这个代码与什么代码有关?未知。可能是与内部终端处理有关的东西,或者是你以前调用的一个函数的调用。

Don't call GetLastError() unless you have an error
如果OrderSend 返回负票,Time[i]返回零,或者StringToTime 返回零,等等,你就会出现错误。
 

字符串转时间

函数 将包含时间或日期的 "yyyy.mm.dd [hh:mi]"格式的字符串转换为数据时间类型。

datetime StringToTime(
string value // date string
)。

参数

[in] 以 "yyyy.mm.dd hh:mi "格式的字符串。

datetime xxxxx = StringToTime(D'21:45');
 
qjol:
D'21:45'

这不是一个字符串,这已经是 一个日期时间(你编译代码那天的21:45)。
阅读文档StrToTime()

  datetime var1; var1=StrToTime("2003.8.12 17:35"); var1=StrToTime("17:35"); // 返回给定时间的当前日期 var1=StrToTime("2003.8.12"); // 返回午夜时间的日期 "00:00"
 
但你必须使用 "yyyy.mm.dd hh:mm "格式,否则你会得到错误4051。
 

非常好!现在它的运行没有任何错误 =)

这一定是完整的日期格式!

非常感谢!