将字符串转换为日期时间
Results 1 to 9 of 9

Thread: 将字符串转换为日期时间

  1. #1
    我在这里做错了什么并得到不正确的输出。

    在我的 EA 的某一时刻,我将日期时间保存到字符串变量中,如下所示:

    点A = 1303867800

    现在稍后我需要将其转换回日期时间,以便我可以使用它在图表上创建一个矩形对象,因此我使用:

    pointS = StrToTime(pointS)

    执行此操作后,变量变为:

    点A = 1303948800

    如您所见,这与上面的原始版本不同-如果有人可以帮助将我的原始 DateTime 变量转换为字符串然后返回到 DateTime,我可能会做一些愚蠢的错误,非常感谢。

    谢谢

  2. #2
    非常感谢您的解释-感谢。唯一的问题是我在文档中找不到 IntToStr 吗?

  3. #3
    我应该进一步澄清一下。您所做的事情在适当的编程环境中将无法完成,并且由于 mql 自由地处理某些情况而不是严格执行类型约定,您陷入困境。您似乎有效地完成了以下操作:取一个 int,writetosomefile(integer) [此时 mql 会自动将整数转换为该数字的字符串表示形式,但实际上它不应该......这就是您已经被绊倒]... readfromfile(string), StringDateSentenceToDatTime(string) 编辑:上面实际上应该是 - 取一个 int 值并将其直接读入一个字符串变量 [mql 会自动为您转换但不应该,并且这就是你被抓住的地方],将字符串写入文件,从文件中读取字符串,将日期格式的字符串转换为日期时间这是吐出一个垃圾值,因为你没有传递正确的东西开始。如果 mql 是半严肃的,当您尝试将日期时间整数值读入字符串变量时它会呕吐,而是应该强制您自己手动进行此转换,以便您实际上始终准确地知道什么值是什么,而不是让您上吊。观看它的实际操作是看到类似这样的内容:将日期时间 123456789 转换为字符串 123456789 写入文件:字符串 123456789 从文件读取:字符串 123456789 转换字符串 123456789,这意味着使用日期和时间数据格式化为垃圾日期时间值 987654167 但是,您认为正在发生的是:将日期时间 123456789 转换为格式化为日期和时间数据的字符串 yyyy.mm.dd hh:mm 写入文件 yyyy.mm.dd hh:mm 从文件 yyyy.mm.dd hh:mm 读取将字符串 yyyy.mm.dd hh:mm 转换为日期时间值 123456789 您想要发生的是:将日期时间 123456789 转换为字符串 123456789 写入文件 123456789 从文件 123456789 读取转换字符串 123456789 为 int(与日期时间相同)123456789或者,如果这不起作用,您可以执行此操作,这更像您打算执行的操作:将 datetime 123456789 转换为日期格式化字符串 yyyy.mm.dd hh:mm(使用 TimeToStr)写入字符串 yyyy.mm.dd hh: mm to file 从文件 con 中读取字符串 yyyy.mm.dd hh:mm vert date formatted string yyyy.mm.dd hh:mm to datetime 123456789 可能再清楚不过了。

  4. #4
    嗯,当然咯。 datetime 基本上是一个整数。您正在以字符串格式将整数值写入文件,例如123456789,那么您正在从文件中读取此数字,然后将其作为该数字字符串而不是 strtotime 期望的伪句格式推送到 strtotime 函数。 timetostr 和 strtotime 在日期时间数字和伪日期语句之间来回转换。它们的全部目的是能够以人类可读的格式显示日期时间值,或者采用包含日期和时间值的人类可读格式化字符串并将其转换为计算机可用的日期时间(整数)值。要么取日期时间数字,使用 timetostr 将其转换为日期字符串伪句,然后将其写入文件...然后再读回此伪句并使用 timetostr 转换回日期时间。或者,更合乎逻辑的方式,取日期时间数 IntToStr 并将字符串写入文件...稍后从文件中读取字符串,然后使用 StrToInt 转换回 int。完全避免无意义的 timetostr/strtotime 函数,这些函数对于吐出人类可读的格式更有用,并且对计算机没有积极的用处。

  5. #5
    好的,我明白你的意思了 - 但这是完整的故事 - 我有第一个 EA 将这个 TimeDate 保存到一个文件中 - 因此很明显它保存为一个字符串: 插入代码 pointA = ObjectGet(object1,OBJPROP_TIME1) 因此当第二个 EA 得到这个文件中的数据看起来像 1303867800 你是说当我将 pointA 保存到文件时我应该使用 TimeToStr 函数吗?这会正确保存它,以便当它回来时正确吗?

  6. #6
    你肯定做错了什么。 StrToTime 应该接收格式为 yyy.mm.dd hh:mm 的字符串,但在您的示例中,pointA 字符串仅等于某个数字。我认为你可能把这一切都弄错了,让自己的事情变得困难,但仍然看看在插入代码字符串 pointA 下工作的代码; pointA = TimeToStr(Time#91;0#93; Print(pointA = pointA 转换为时间后: StrToTime(pointA));示例输出给出:2011.04.28 18:30:04 nbTestingOthersIndi EURUSD,M1: pointA = 2011.04.28 10:30 转换为时间后:1303986600

  7. #7
    没有足够的代码来调试。看起来您的字符串正在使用新值更新,因为当您通过 strtotime 将其发送回时的值具有更大的数字,表示更新的时间值。

  8. #8
    它看起来确实如此,但它很奇怪 - 我使用以下行进行调试,并且在行内它不正确:插入代码打印(pointA = pointA after convert to time: StrToTime(pointA));输出为:插入代码 EURAUD,M15:pointA = 1303867800 转换为时间后:1303948800

  9. #9
    喔喔喔!!!抱歉,伙计,我有时会有点倒退,因为我用几种不同的语言编写代码。我可能对你在做什么变量感到困惑。在这些情况下,它可以极大地帮助为您的变量赋予更有意义的名称,例如 PointAString 或 sPointA ... 兼作 tempdouble 或 dtemp 等,而不会看到您用来定义变量及其类型的变量声明我正在采取猜测你到底做了什么。要回答您在帮助文件中查看的问题,我发现实际上没有 instr 函数,您可以简单地为字符串变量分配一个整数,然后 mql 会自动为您转换它。在一个适当的编程环境中,像这样的东西需要调用一个专门将整数转换为字符串的函数,这样你就不会混淆 X 持有的变量和编译器下降时 Y 持有的变量 -如果您尝试混合和匹配不同的数据类型,则结束。总结:我很困惑。你会弄明白的,只要记住你是在读或写数字的字符串版本,还是日期时间数字的日期格式字符串版本

发布权限

  • 您不可发布新主题
  • 您不可回复
  • 您不可发布附件
  • 您不可编辑您的帖子
  •  
  • BB代码是打开的
  • 表情符号是打开的
  • [IMG]代码是打开的
  • [视频]代码是打开的
  • HTML代码是关闭的
histoforex网站使用cookie 文字跟踪
histoforex网站使用cookie 文字跟踪,某些设定已经固定。您可以点击此处阅读我们的Cookie使用说明。 请点击右键接受我们的cookies。如果您选择继续使用histoforex网站,我们将认为您接受我们的cookies。