Conversione di stringhe in datetime

 

Publi

Conversione di stringhe in datetime

 

Publi

Risultati da 1 a 9 di 9

Discussione: Conversione di stringhe in datetime

  1. #1
    Sto facendo qualcosa di sbagliato qui e ottenendo un output errato.

    Ad un certo punto del mio EA sto salvando un datetime in una variabile stringa come qualcosa del genere:

    punto A = 1303867800

    Ora in un secondo momento devo riconvertirlo in un datetime in modo da poterlo utilizzare per creare un oggetto rettangolo sul grafico, quindi sto usando:

    puntiS = StrToTime(puntiS)

    Fatto ciò la variabile diventa:

    punto A = 1303948800

    Che come puoi vedere è diverso dall'originale sopra - probabilmente sto facendo qualcosa di stupido se qualcuno può aiutare a ottenere la mia variabile DateTime originale su una stringa e poi TORNA a DateTime, molto apprezzato.

    grazie

  2. #2
    grazie mille per la spiegazione - apprezzalo. l'unica cosa è che non riesco a trovare IntToStr nella documentazione?

  3. #3
    dovrei chiarire un po' di più. quello che hai fatto non saresti in grado di fare in un ambiente di programmazione adeguato e sei rimasto bloccato a causa del fatto che mql ha affrontato determinate situazioni liberamente invece di applicare rigorosamente le convenzioni di tipo. quello che sembra che tu abbia effettivamente fatto è questo: prendi un int, writetosomefile(integer) [a questo punto mql converte automaticamente l'intero in una rappresentazione di stringa di questo numero per te, ma in realtà non dovrebbe... qui è dove tu sono inciampati]... readfromfile (string), StringDateSentenceToDatTime (string) modifica: sopra dovrebbe effettivamente essere - prendi un valore int e leggilo direttamente in una variabile stringa [mql lo converte automaticamente ma non dovrebbe, e è qui che sei stato catturato], scrivi una stringa su un file, leggi una stringa da un file, converti la stringa formattata in data in datetime questo sta sputando un valore spazzatura perché non lo stai passando la roba corretta per cominciare. se mql fosse semiserio, vomiterebbe quando provi a leggere il valore intero datetime in una variabile stringa e invece dovrebbe costringerti a eseguire manualmente questa conversione in modo da sapere esattamente quale valore è cosa in ogni momento invece di lasciarti impiccati. guardarlo in azione è vedere qualcosa del genere: convert datetime 123456789 in string 123456789 write to file: string 123456789 read from file: string 123456789 convert string 123456789 che dovrebbe essere formattato con dati di data e ora in garbage datetime value 987654167 ma , quello che PENSI stia succedendo è questo: converti datetime 123456789 in una stringa formattata come dati di data e ora yyyy.mm.dd hh:mm scrivi nel file yyyy.mm.dd hh:mm leggi dal file yyyy.mm.dd hh:mm converti string yyyy.mm.dd hh:mm in datetime value 123456789 quello che vuoi che accada è questo: converti datetime 123456789 in string 123456789 write to file 123456789 read from file 123456789 convert string 123456789 to int (che è lo stesso di datetime) 123456789 oppure, se questo non funziona, puoi farlo che è più simile a quello che intendevi fare: convertire datetime 123456789 in una stringa formattata per data yyyy.mm.dd hh:mm (usando TimeToStr) write string yyyy.mm.dd hh: mm nel file leggi la stringa aaaa.mm.dd hh:mm dal file con vert date formatted string yyyy.mm.dd hh:mm to datetime 123456789 probabilmente non può essere molto più chiaro di così.

  4. #4
    sì, certamente. datetime è fondamentalmente un numero intero. stai scrivendo un valore intero in un file in formato stringa, ad es. 123456789, quindi stai leggendo dal file questo numero e quindi lo stai spingendo nella funzione strtotime come quella stringa di numeri invece del formato pseudo-frase che strtotime si aspetta. timetostr e strtotime convertono avanti e indietro tra numeri datetime e frasi pseudo-data. il loro intero scopo è essere in grado di visualizzare un valore datetime in un formato leggibile dall'uomo o prendere una stringa formattata leggibile dall'uomo contenente valori di data e ora e convertirla in un valore datetime (intero) utilizzabile dal computer. prendi il numero datetime, convertilo nella pseudo-frase della stringa di data con timetostr, scrivilo su file... quindi rileggi questa pseudo-frase e riconverti in una datetime con timetostr. oppure, nel modo più logico, prendi il numero datetime, IntToStr e scrivi la stringa su file... in seguito leggi la stringa dal file, quindi riconverti in int con StrToInt. evita completamente le inutili funzioni timetostr/strtotime che sono più utili per sputare in formati leggibili dall'uomo e non hanno utilità positiva per il computer.

  5. #5
    ok, vedo il tuo punto - ma questa è la storia completa - ho un primo EA che salva questo TimeDate in un file - quindi ovviamente lo salva come una stringa: Codice inserito pointA = ObjectGet(object1,OBJPROP_TIME1) Quindi quando il 2nd EA ottiene questo i dati del file sembrano 1303867800 Stai dicendo che quando salvo pointA su file dovrei usare la funzione TimeToStr? Lo salverà correttamente in modo che quando tornerà sia corretto?

  6. #6
    stai sicuramente sbagliando qualcosa. StrToTime dovrebbe ricevere una stringa nel formato yyy.mm.dd hh:mm, ma nel tuo esempio la stringa pointA è uguale a un numero. penso che probabilmente stai sbagliando tutto e rendendo le cose difficili per te stesso, ma comunque dai un'occhiata al codice che funziona sotto la stringa del codice inserito puntoA; puntoA = TimeToStr(Time#91;0#93; Print(pointA = pointA after convert in time: StrToTime(pointA)); l'output di esempio fornisce: 2011.04.28 18:30:04 nbTestingOthersIndi EURUSD,M1: pointA = 2011.04.28 10:30 dopo la conversione in tempo: 1303986600

  7. #7
    codice insufficiente per eseguire il debug. sembra che la tua stringa venga aggiornata da qualche parte lungo il percorso con un nuovo valore poiché il valore quando lo invii indietro tramite strtotime ha un numero maggiore che indica un valore temporale più recente.

  8. #8
    sembra così ma è piuttosto strano - sto usando la seguente riga per eseguire il debug e all'interno della riga non è corretto: Codice inserito Print(pointA = pointA after convert to time: StrToTime(pointA)); L'output è: Codice inserito EURAUD,M15: pointA = 1303867800 dopo la conversione in tempo: 1303948800

  9. #9
    oh ff!!! scusa amico, a volte mi arrendo un po 'indietro poiché scrivo codice in alcune lingue diverse. forse mi sto confondendo con quello che stai facendo con quali variabili. può essere di grande aiuto in queste situazioni dare nomi più significativi alle tue variabili come PointAString o sPointA... funge anche da tempdouble o dtemp ecc ecc. senza vedere le dichiarazioni di variabile che hai usato per definire le variabili e i loro tipi che sto prendendo supposizioni su cosa hai fatto esattamente. per rispondere alla tua domanda guardando nel file della guida vedo che in realtà non esiste una funzione intostr e puoi semplicemente assegnare a una variabile stringa un numero intero e mql lo converte automaticamente per te. in un ambiente di programmazione adeguato, cose come questa richiederebbero la chiamata di una funzione dedicata che converte specificamente un intero in una stringa, e in questo modo non puoi confonderti con quale variabile X contiene e quale variabile Y contiene mentre i compilatori cadono- finita se provi a combinare e abbinare diversi tipi di dati. in sintesi: mi sto confondendo. lo capirai, tieni solo a mente se stai leggendo o scrivendo una versione stringa di un numero o una versione stringa formattata per data di un numero datetime

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
Il sito di forexmad utilizza cookie
Il sito di forexmad utilizza cookie, alcuni dei quali già installati. Per avere maggiori informazioni sui nostri cookie ti preghiamo di cliccare qui. Ti preghiamo di cliccare sul bottone a destra per accettare i nostri cookie. Se continui a navigare sul sito di forexmad assumeremo che sei d'accordo ad utilizzarli.