String converteren naar datetime
Results 1 to 9 of 9

Thread: String converteren naar datetime

  1. #1
    Ik doe hier iets verkeerd en krijg onjuiste uitvoer.

    Op een gegeven moment van mijn EA sla ik een datetime op in een stringvariabele als zoiets als dit:

    puntA = 1303867800

    Nu moet ik dat op een later moment terug converteren naar een datetime, zodat ik het kan gebruiken om een ??????rechthoekig object op de kaart te maken, dus ik gebruik:

    pointS = StrToTime(punten)

    Nadat je dit hebt gedaan, wordt de variabele:

    puntA = 1303948800

    Wat, zoals je kunt zien, verschilt van het origineel hierboven - ik doe waarschijnlijk iets doms verkeerd als iemand kan helpen mijn originele DateTime-variabele in een string te krijgen en dan TERUG naar DateTime, zeer op prijs gesteld.

    Dankje

  2. #2
    thx hopen voor de uitleg - waardeer het. het enige is dat ik de IntToStr niet kan vinden in de documentatie?

  3. #3
    ik moet wat meer verduidelijken. wat je hebt gedaan, zou je niet kunnen doen in een goede programmeeromgeving, en je bent vastgelopen omdat mql bepaalde situaties royaal afhandelt in plaats van strikt de typeconventies af te dwingen. wat je effectief lijkt te hebben gedaan, is dit: neem een ??????int, writetosomefile(integer) [op dit punt zet mql het gehele getal automatisch om in een tekenreeksrepresentatie van dit getal voor je, maar dat zou eigenlijk niet moeten... dit is waar je zijn tripped-up]... readfromfile(string), StringDateSentenceToDatTime(string) edit: bovenstaande zou eigenlijk moeten zijn - neem een ??????int-waarde en lees deze direct in een stringvariabele [mql converteert dit automatisch voor je, maar zou niet moeten, en dit is waar je bent betrapt], schrijf string naar bestand, lees string uit bestand, converteer datum-geformatteerde string naar datetime. als mql half serieus was, zou het kotsen als je de datetime integer-waarde in een stringvariabele zou proberen te lezen en in plaats daarvan zou je moeten dwingen deze conversie zelf handmatig uit te voeren, zodat je echt precies weet welke waarde wat is, in plaats van je te laten jezelf ophangen. om het in actie te zien is om zoiets als dit te zien: converteer datetime 123456789 naar string 123456789 schrijf naar bestand: string 123456789 lees uit bestand: string 123456789 converteer string 123456789 die bedoeld is om te worden geformatteerd met datum- en tijdgegevens naar de waarde van de datumtijd 987654167 maar , wat je DENKT is dit: converteer datetime 123456789 naar string geformatteerd als datum- en tijdgegevens jjjj.mm.dd uu:mm schrijf naar bestand jjjj.mm.dd uu:mm lees uit bestand jjjj.mm.dd uu:mm converteer string yyyy.mm.dd uu:mm naar datetime-waarde 123456789 wat u WILT gebeuren is dit: converteer datetime 123456789 naar string 123456789 schrijf naar bestand 123456789 lees uit bestand 123456789 converteer string 123456789 naar int (wat hetzelfde is als datetime) 123456789 of, als dit niet werkt, kun je dit doen, wat meer lijkt op wat je van plan was te doen: converteer datetime 123456789 naar datum geformatteerde string yyyy.mm.dd uu:mm (met behulp van TimeToStr) schrijf string yyyy.mm.dd uu: mm naar bestand lees string jjjj.mm.dd uu:mm uit bestand con vert date formatted string jjjj.mm.dd uu:mm tot datetime 123456789 kan waarschijnlijk niet veel duidelijker zijn dan dat.

  4. #4
    Ja natuurlijk. datetime is eigenlijk een geheel getal. u schrijft een geheel getal naar een bestand in tekenreeksformaat, b.v. 123456789, dan lees je dit nummer uit het bestand en duw je het naar de strtotime-functie als die reeks getallen in plaats van het pseudo-zinsformaat dat strtotime verwacht. timetostr en strtotime converteren heen en weer tussen datetime-nummers en pseudo-date-zinnen. hun hele doel is om een ??????datetime-waarde in een door mensen leesbaar formaat weer te geven, of een door mensen leesbare geformatteerde string met datum- en tijdwaarden te nemen en deze om te zetten in een voor de computer bruikbare datetime (integer) waarde. ofwel neem het datetime-nummer, converteer het naar de datumstring pseudo-zin met timetostr, schrijf dit naar bestand... lees dan later deze pseudo-zin terug en converteer het terug naar een datetime met timetostr. of, de meer logische manier, neem het datetime-nummer, IntToStr en schrijf de string naar het bestand... lees later de string uit het bestand en converteer dan terug naar int met StrToInt. vermijd volledig de zinloze timetostrstrtotime-functies die nuttiger zijn om in voor mensen leesbare formaten te spugen en geen positief nut hebben voor de computer.

  5. #5
    ok ik begrijp je punt - maar dit is het volledige verhaal - ik heb een eerste EA die deze TimeDate opslaat in een bestand - daarom slaat het natuurlijk op als een string: Code ingevoegd pointA = ObjectGet(object1,OBJPROP_TIME1) Daarom wanneer de 2e EA dit krijgt gegevens uit het bestand zien eruit als 1303867800 Zeg je nu dat ik de functie TimeToStr moet gebruiken als ik pointA in een bestand opsla? Zal dat het correct opslaan, zodat het correct is wanneer het terugkomt?

  6. #6
    je doet zeker iets fout. StrToTime zou een tekenreeks moeten ontvangen in het formaat yyy.mm.dd uu:mm, maar in uw voorbeeld is de pointA-tekenreeks gelijk aan een getal. ik denk dat je dit waarschijnlijk helemaal verkeerd doet en het jezelf moeilijk maakt, maar kijk toch eens naar de code die werkt onder Ingevoegde codereeks puntA; pointA = TijdToStr(Tijd#91;0#93; Print(pointA = pointA na conversie naar tijd: StrToTime(pointA)); voorbeelduitvoer geeft: 2011.04.28 18:30:04 nbTestingOthersIndi EURUSD,M1: pointA = 2011.04.28 10:30 na conversie naar tijd: 1303986600

  7. #7
    niet genoeg code om te debuggen. het lijkt erop dat je string ergens onderweg wordt bijgewerkt met een nieuwe waarde, aangezien de waarde wanneer je hem terugstuurt via strtotime een groter getal heeft met een recentere tijdswaarde.

  8. #8
    het ziet er wel zo uit, maar het is nogal vreemd - ik gebruik de volgende regel om te debuggen en binnen de regel is het onjuist: Code ingevoegd Print(pointA = pointA after convert to time: StrToTime(pointA)); Uitvoer is: Code EURAUD,M15 ingevoegd: pointA = 1303867800 na conversie naar tijd: 1303948800

  9. #9
    oh ff!!! sorry kerel, ik loop soms een beetje achteruit omdat ik code in een paar verschillende talen schrijf. ik ben mogelijk in de war met wat je doet met welke variabelen. het kan in deze situaties enorm helpen om meer betekenisvolle namen te geven aan uw variabelen zoals PointAString of sPointA ... verdubbelt als tempdouble of dtemp enz enz. zonder de variabeledeclaraties te zien die u hebt gebruikt om de variabelen te defini�ren en hun typen die ik gebruik raden wat je precies hebt gedaan. om je vraag te beantwoorden als ik in het helpbestand kijk, zie ik dat er eigenlijk geen intostr-functie is, en je kunt eenvoudig een stringvariabele een geheel getal toewijzen en mql converteert het automatisch voor je. in een goede programmeeromgeving zou voor dit soort dingen een dedied-functie moeten worden aangeroepen die specifiek een geheel getal naar een tekenreeks converteert, en op deze manier kun je niet in de war raken met wat variabele X bevat en welke variabele Y bevat als de compilers vallen- over als u verschillende gegevenstypen probeert te mixen en matchen. kortom: ik raak in de war. je komt erachter, houd er rekening mee of je een stringversie van een getal leest of schrijft, of een datumopgemaakte stringversie van een datetime-nummer

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
This website uses cookies
We use cookies to store session information to facilitate remembering your login information, to allow you to save website preferences, to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners.