Nokioteca [Nokia] Forum: [c++]problema Ttime.microsecondsfrom - Nokioteca [Nokia] Forum

Salta al contenuto

Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

[c++]problema Ttime.microsecondsfrom help

#1 L   dokkis 

  • Senior Member
  • Gruppo: Developer
  • Messaggi: 828
  • Iscritto: 22 ottobre 2006
  • Località:Italia->Roma
  • Cellulare:NoKia 6630

Inviato 29 maggio 2007 - 20:42

Ciao a tutti
ho un problemino a gestire le date, in pratica devo fare in un programma, in modo che se inserisco un'ora in un timedialog, questo mi restituisce, in microsecondi (o anche in secondi) il tempo che c'è tra l'ora corrente e l'ora settata, ho realizzato questo codice, ma mi ritorna dati sballati! :S

                        TTime setTime;	
			TTime nowTime;
			TTimeIntervalMicroSeconds mc;
			setTime.HomeTime();
			CAknTimeQueryDialog* timeDialog = CAknTimeQueryDialog::NewL(setTime,CAknQueryDialog::ENoTone);
			timeDialog->SetPromptL(_L("Insert the restart time"));
			if (timeDialog->ExecuteLD(R_TIME_QUERY))
			{
				nowTime.HomeTime();
				mc = setTime.MicroSecondsFrom(nowTime);
                                //per il debug, cancella poi queste righe di codice:
				TInt64 prova = mc.Int64();
				TBuf<32> buf(_L("VAL: "));
				buf.AppendNum(prova);
				RDebug::Print(buf);			
           	        }		


poi nell'rss:

RESOURCE DIALOG r_time_query
{
flags = EGeneralQueryFlags;
buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
items =
{
DLG_LINE
{
type = EAknCtQuery;
id = EGeneralQuery;
control = AVKON_DATA_QUERY
{
layout = ETimeLayout;
control = TIME_EDITOR
{
minTime = TIME
{
second = 0;
minute = 0;
hour = 0;
};
maxTime = TIME
{
second = 59;
minute = 59;
hour = 23;
};
flags =  EEikTimeWithoutSecondsField | EEikTimeForce24HourFormat;
};
};
}
};
}	


il print di questo codice mi ritorna:
VAL: -63348652746109000 19:34 -> 19.35
dove 19.34 era l'ora dell'emulatore e 19.35 è l'ora che avevo settato dal timedialog, i conti non tornano! tra l'altro è anche negativo! :S
ho anche provato ad invertire nowTime cn setTime:
mc = nowTime.MicroSecondsFrom(setTime);
ed ho ottenuto:
VAL: 63348652770734000 19:35 -> 19.36
non capisco perchè nn vada... ma che confronto di date fa? nn riesco proprio a capirlo! :S help me!!!

Messaggio modificato da dokkis il 29 maggio 2007 - 20:43

0

#2 L   Oper 

  • Millennium Member
  • PuntoPuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 1001
  • Iscritto: 02 dicembre 2005
  • Località:Lucania
  • Cellulare:Nokia 6600
  • Firmware:3.42.1 16-10-03

Inviato 29 maggio 2007 - 21:29

Mi spiace, ma non so aiutarti, con il c++

Vuoi implementarlo nel programma di restart vero?

Be, io sto testando quello che ho preparato oggi in python (dopo aver visto quello tuo e quello di giuppe che avevano quel problema che ho segnalato) e ho aggiunto la parte relativa all'ora (Spegnimento alle oo:mm) e sembra che stia andando, ora lo sto provando con ore più grandi.
0

#3 L   dokkis 

  • Senior Member
  • Gruppo: Developer
  • Messaggi: 828
  • Iscritto: 22 ottobre 2006
  • Località:Italia-&gt;Roma
  • Cellulare:NoKia 6630

Inviato 29 maggio 2007 - 21:35

Visualizza MessaggiOper, il 29/05/2007 - 22:29, ha scritto:

Mi spiace, ma non so aiutarti, con il c++

Vuoi implementarlo nel programma di restart vero?

Be, io sto testando quello che ho preparato oggi in python (dopo aver visto quello tuo e quello di giuppe che avevano quel problema che ho segnalato) e ho aggiunto la parte relativa all'ora (Spegnimento alle oo:mm) e sembra che stia andando, ora lo sto provando con ore più grandi.


si il prb del crash l'ho capito.. era stata una mia svista.. cmq sia volevo farlo lo stesso cn il timer xkè risulta più comodo.. cmq.. dopo la versione di giuppe, poi la mia del restarter, se fossi in te eviterei di farne 1 terza versione.. non per niente ma poi penso che gli user di nk nn ci capiscano + nulla cn tutte queste versioni diverse di restarter xD
poi fai come meglio credi B)
cmq x il timer io avevo intenzione di fare in quel modo, altrimenti devo impostare il programma in un altro modo, controllando secondo per secondo che ore sono e vedere se l'orario attuale coincide cn qll impostato

Messaggio modificato da dokkis il 29 maggio 2007 - 21:36

0

#4 L   Oper 

  • Millennium Member
  • PuntoPuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 1001
  • Iscritto: 02 dicembre 2005
  • Località:Lucania
  • Cellulare:Nokia 6600
  • Firmware:3.42.1 16-10-03

Inviato 29 maggio 2007 - 21:39

Visualizza Messaggidokkis, il 29/05/2007 - 22:35, ha scritto:

si il prb del crash l'ho capito.. era stata una mia svista.. cmq sia volevo farlo lo stesso cn il timer xkè risulta più comodo.. cmq.. dopo la versione di giuppe, poi la mia del restarter, se fossi in te eviterei di farne 1 terza versione.. non per niente ma poi penso che gli user di nk nn ci capiscano + nulla cn tutte queste versioni diverse di restarter xD
poi fai come meglio credi B)
cmq x il timer io avevo intenzione di fare in quel modo, altrimenti devo impostare il programma in un altro modo, controllando secondo per secondo che ore sono e vedere se l'orario attuale coincide cn qll impostato


Sarà un altro dei programmi che servono SOLO al mio 6600 (ormai sono un casino).

Comunque se giuppe non lo continua su python, non vedo niente di male ad aggiungere anche questa versione (alcuni 'hanno chiesto espressamente l'ora di restart).

Per quanto riguarda quello in c++ (fatto da te), sicuramente non competerà con uno di questi 2 in python.
0

#5 L   dokkis 

  • Senior Member
  • Gruppo: Developer
  • Messaggi: 828
  • Iscritto: 22 ottobre 2006
  • Località:Italia-&gt;Roma
  • Cellulare:NoKia 6630

Inviato 29 maggio 2007 - 21:42

Visualizza MessaggiOper, il 29/05/2007 - 22:39, ha scritto:

Sarà un altro dei programmi che servono SOLO al mio 6600 (ormai sono un casino).

Comunque se giuppe non lo continua su python, non vedo niente di male ad aggiungere anche questa versione (alcuni 'hanno chiesto espressamente l'ora di restart).

Per quanto riguarda quello in c++ (fatto da te), sicuramente non competerà con uno di questi 2 in python.

ho solo espresso il mio parere poi ovviamente fai come vuoi B)
cmq il fatto non era per la competizione tra il mio e il tuo prg.. cmq vbbè xD
per il prb del timer, intanto aspetto il.socio, e vediamo se riesce a trovare lui l'errore, altrimenti provo a postare su un forum symbian c++ straniero, dato che qua l'unico che programma in c++ è il.socio B)
oppure cambio proprio metodo..

Messaggio modificato da dokkis il 29 maggio 2007 - 21:43

0

#6 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7122
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 29 maggio 2007 - 22:54

Ciao dok, a me il codice sembra corretto, pero' dal comportamento che descrivi sembra invece che uno o entrambi dei valori nowTime e setTime siano sballati... Ed il risultato della differenza quindi risulta inaffidabile... Prova a stampare entrambi i valori nowTime e setTime...

Messaggio modificato da Il.Socio il 29 maggio 2007 - 23:08

Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#7 L   dokkis 

  • Senior Member
  • Gruppo: Developer
  • Messaggi: 828
  • Iscritto: 22 ottobre 2006
  • Località:Italia-&gt;Roma
  • Cellulare:NoKia 6630

Inviato 30 maggio 2007 - 17:29

Visualizza MessaggiIl.Socio, il 29/05/2007 - 23:54, ha scritto:

Ciao dok, a me il codice sembra corretto, pero' dal comportamento che descrivi sembra invece che uno o entrambi dei valori nowTime e setTime siano sballati... Ed il risultato della differenza quindi risulta inaffidabile... Prova a stampare entrambi i valori nowTime e setTime...

trovato il problema:

ho stampato le variabili usando questo "metodo":

TBuf<32> nT(_L("nowTime: "));
				nT.AppendNum(nowTime.DateTime().Day());
				nT.Append(_L("/"));
				nT.AppendNum(nowTime.DateTime().Month());
				nT.Append(_L("/"));
				nT.AppendNum(nowTime.DateTime().Year());
				nT.Append(_L(" -- "));
				nT.AppendNum(nowTime.DateTime().Hour());
				nT.Append(_L(":"));
				nT.AppendNum(nowTime.DateTime().Minute());
				nT.Append(_L(":"));
				nT.AppendNum(nowTime.DateTime().Second());

				TBuf<32> sT(_L("setTime: "));
				sT.AppendNum(setTime.DateTime().Day());
				sT.Append(_L("/"));
				sT.AppendNum(setTime.DateTime().Month());
				sT.Append(_L("/"));
				sT.AppendNum(setTime.DateTime().Year());
				sT.Append(_L(" -- "));
				sT.AppendNum(setTime.DateTime().Hour());
				sT.Append(_L(":"));
				sT.AppendNum(setTime.DateTime().Minute());
				sT.Append(_L(":"));
				sT.AppendNum(setTime.DateTime().Second());
		
				RDebug::Print(nT);
				RDebug::Print(sT);

ps: c'è un metodo + veloce per stampare direttamente setTime e nowTime? dato che il print vuole un TDesC come parametro?


nowTime: 29/4/2007 -- 16:13:16
setTime: 0/0/0 -- 16:15:0

l'ora la setta giusta, è la data che è sballata..
ho provato a settare giorno mese ed anno a settime cosi:

nowTime.HomeTime();					
setTime.DateTime().SetDay(nowTime.DateTime().Day());
setTime.DateTime().SetMonth(nowTime.DateTime().Month());
setTime.DateTime().SetYear(nowTime.DateTime().Year());


ma xkè rimane invariato?!? B) mi da sempre 0/0/0... sto impazzendo! xD

Messaggio modificato da dokkis il 30 maggio 2007 - 17:30

0

#8 L   Oper 

  • Millennium Member
  • PuntoPuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 1001
  • Iscritto: 02 dicembre 2005
  • Località:Lucania
  • Cellulare:Nokia 6600
  • Firmware:3.42.1 16-10-03

Inviato 30 maggio 2007 - 17:39

Se te lo dico mi fai un versamento sulla mia PP?

Scherzo B)

Allora forse ho capito dove sta il problema:

tu inserisci l'ora in un campo a video,
la variabile che usi parte dall'anno 0 perche se setti 00:00:00 lui il c++ imposta la variabile a 0,
se imposti 00:00:01 imposta la var a 1 e cosi via (per 00:01:00 imposta 60).

Ora quando vai a leggere e la ritrasformi lui prende il valore 60 (ultimo esempio) e ti da 00:01:00 dell'anno 0/0/0.

Praticamente per avere l'ora 12:30:25 del 30/05/2007 devi trovare il corrispondente numero (ad esempio 312313123131231254543535) che quando poi prendi l'ora ti da quella giusta.

Forse si tratta dei tipi di variabile date e ora che forse usi.

Guarda la spiegazione l'ho scritta di getto, ma penso che avrai capito dove sta l'inghippo.
Di c++ sinceramente ci capisco -2
0

#9 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7122
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 30 maggio 2007 - 18:07

AAAAAaahhhhh... ecco! Questo xche' il controllo legge solo l'ora mentre imposta la data a 0... Una soluzione e' quella di cambiare il controllo per fargli prendere in pasto anche la data...

Per trasformare setTime e nowTime puoi usare il metodo FormatL() che ti consente di tirare fuori data/ora in un formato appropriato...
Es:
TBuf<20> ora;
setTime.FormatL(ora, _L("%H:%T:%S"));
RDebug::Print(ora);


Il tuo tentativo di modifica non da alcun risultato xche' il DateTime() ti restituisce una copia dei valori correnti... e tu stai modificando la copia..

Prova a fare cosi piuttosto...
TDateTime nowDate = nowTime.DateTime();
setTime += TTimeIntervalYear( nowDate.Year() );
setTime += TTimeIntervalMonth( nowDate.Month() );
setTime += TTimeIntervalDays( nowDate.Day() );

Messaggio modificato da Il.Socio il 30 maggio 2007 - 18:12

Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#10 L   dokkis 

  • Senior Member
  • Gruppo: Developer
  • Messaggi: 828
  • Iscritto: 22 ottobre 2006
  • Località:Italia-&gt;Roma
  • Cellulare:NoKia 6630

Inviato 30 maggio 2007 - 18:12

Visualizza MessaggiIl.Socio, il 30/05/2007 - 19:07, ha scritto:

Il tuo tentativo non ha alcun risultato xche' il DateTime() ti restituisce una copia dei valori correnti... e tu stai modificando la copia..

Prova a fare cosi piuttosto...
TDateTime nowDate = nowTime.DateTime();
setTime += TTimeIntervalYear( nowTime.Year() );
setTime += TTimeIntervalMonth( nowTime.Month() );
setTime += TTimeIntervalDays( nowTime.Day() );


l'avevo immaginato xD
cmq piccoli errori nel codice (scritto di fretta immagino xD) corretti:
TDateTime nowDate = nowTime.DateTime();
				setTime += TTimeIntervalYears( nowDate.Year() );
				setTime += TTimeIntervalMonths( nowDate.Month() );
				setTime += TTimeIntervalDays( nowDate.Day() );

sembra funzionare:

nowTime: 29/4/2007 -- 17:9:45
setTime: 29/4/2007 -- 17:11:0
VAL: 74875000
val è in microsecondi, approssimato in secondi: 74,8 => 75 secondi, che è la differenza tra le 2 date, poi per il timer, devo fare che se setTime è < di nowTime (come orario) allora setta il giorno di setTime ad 1 giorno successivo... cosi si riavvia il giorno dopo e nn va in errore.. no? :blink:

ps: grazie socio.. cmq nn c'è 1 altro metodo + comodo ad es x stampare settime e nowtime?

Messaggio modificato da dokkis il 30 maggio 2007 - 18:14

0

#11 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7122
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 30 maggio 2007 - 18:19

Si, direi che tutto fila :blink:
Per stampare settime e nowtime, quello e' il metodo piu' sbrigativo perche' la classe TTime non fornisce di suo una rappresentazione sottoforma di stringa... Quindi per ottenere la stringa bisogna necessariamente passare attraverso la chiamata al metodo FormatL()
Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#12 L   giuppe92 

  • Millennium Member
  • Gruppo: Developer
  • Messaggi: 1058
  • Iscritto: 20 febbraio 2007
  • Località:Spilimbergo (PN)
  • Cellulare:N70
  • Firmware:5.0638.3.0.1

Inviato 31 maggio 2007 - 12:50

Quindi caro dokkis riuscirai a fare una versione dove si può scegliere anche l'ora?
Se si a questo punto mi sembra inutile che Oper crei una versione in python dato che come ha detto lui sarebbe molto inferiore a quella scritta in c++!
0

#13 L   Tony 91 

  • Advanced Member
  • PuntoPuntoPuntoPunto
  • Gruppo: Da convalidare
  • Messaggi: 156
  • Iscritto: 17 febbraio 2007
  • Cellulare:Nokia 6120

Inviato 31 maggio 2007 - 13:56

Visualizza Messaggigiuppe92, il 31/05/2007 - 13:50, ha scritto:

Quindi caro dokkis riuscirai a fare una versione dove si può scegliere anche l'ora?
Se si a questo punto mi sembra inutile che Oper crei una versione in python dato che come ha detto lui sarebbe molto inferiore a quella scritta in c++!

Quoto !!! B)
0

#14 L   Oper 

  • Millennium Member
  • PuntoPuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 1001
  • Iscritto: 02 dicembre 2005
  • Località:Lucania
  • Cellulare:Nokia 6600
  • Firmware:3.42.1 16-10-03

Inviato 31 maggio 2007 - 14:53

Visualizza Messaggigiuppe92, il 31/05/2007 - 13:50, ha scritto:

Quindi caro dokkis riuscirai a fare una versione dove si può scegliere anche l'ora?
Se si a questo punto mi sembra inutile che Oper crei una versione in python dato che come ha detto lui sarebbe molto inferiore a quella scritta in c++!


Guarda che io l'ho già creata da quando ho trovato l'errore nei vs 2 programmi. B)
0

#15 L   Giovilomby 

  • Millennium Member
  • PuntoPuntoPuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 2526
  • Iscritto: 15 dicembre 2005
  • Località:Spilimbergo (PN)
  • Cellulare:6680

Inviato 31 maggio 2007 - 17:35

ottimo!
magari potreste fare un'unica versione con la tua miglioria....che ne dite??
0

Condividi questa discussione:


Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione