Spanish [SOLUCIONADO] Consulta DateTime.Now

cas6678

Active Member
Licensed User
Hola, a ver si me podeis ayudar con esto, si pongo...

B4X:
ahora=DateTime.Now
crono=ahora-ahora

B4X:
Labelhora.Text=  ahora
Labelcrono.Text=  crono
...me devuelve
la hora actual en milisegundos desde 01/01/70
y 0

Sin embargo, si pongo...

B4X:
Labelcrono.Text= DateTime.Time(ahora)
Labelcrono.Text= DateTime.Time(crono)
...me devuelve
la hora actual en formato hh:mm:ss
y 01:00:00

Yo esperaba recibir 00:00:00

No entiendo porque el 0 se asimila a la hora "1"

Realmente no hago crono=ahora-ahora (no tendria mucho sentido) si no crono=ahora-datox para poner a 0 un cronometro pero para el caso el ejemplo es el mismo.

Alguna idea? hago algo mal? Gracias.
 

bgsoft

Well-Known Member
Licensed User
Hola

Estuve fuera y de nuevo me subo aqui.

Creo que lo que quieres hacer es un cronometro, como tu dices, la hora te la da en milisegundos desde 1970, si lo que quieres es ver como aumenta ese cronometro, tendrias que hacer algo asi:

B4X:
InicioCrono = DateTime.Now ' ponerlo cuando reinicies el cronómetro


TiempoTranscurrido = DateTime.Now- InicioCrono ' dale el formato que quieras a TiempoTranscurrido
Saludos
 

cas6678

Active Member
Licensed User
Hola Jesus,

Si, es un cronometro pero no tengo problemas con hacerlo sino con el formato de salida. Por ejemplo si hago lo que tu me dices y muestro:

B4X:
label.Text=TiempoTransacurrido
....me muestra un contador en milisegundos desde 0, ok.

pero si muestro
B4X:
label.Text=DateTime.Time(Tiempotranscurrido)
...me muestra un contador en formato horario desde 01:00:00, mal (aunque la variable TiempoTranscurrido empiece desde 0)

Yo lo que busco es que el 0 sea 00:00:00 como no podria ser de otra manera ;) De hecho estoy haciendo de momento una pequeña trampa que es quitarle los 3600000 milisegundos que tiene una hora:

B4X:
label.Text=DateTime.Time(Tiempotranscurrido-3600000)
Pero bueno, me gustaria saber donde esta el problema.


Gracias por tu colaboracion.
 

bgsoft

Well-Known Member
Licensed User
Hola

No es un problema de la fecha, si no de formato, puedes hacer esto:

B4X:
label.Text =NumberFormat(DateTime.GetHour(Tiempotranscurrido),2,0) & ":" &  NumberFormat(DateTime.GetMinute(Tiempotranscurrido),2,0) & ":" & NumberFormat(DateTime.GetSecond(Tiempotranscurrido),2,0)
Saludos
 

bgsoft

Well-Known Member
Licensed User
Hola

Ya que la pregunta quedó resuelta, podrias poner en la cabecera [SOLUCIONADO], asi hacemos mas agil el foro, gracias.

Saludos
 

cas6678

Active Member
Licensed User
No te creas, jejj.

Si que hay solucion practica al tema pero sigo sin entender por que cuando el valor de una variable (que yo uso para el tiempo) es 0, la presentacion que hace DateTime.time es 01:00:00 y no 00:00:00. Vale que es una cuestion de formato y que tu solucion es operativa, (tambien lo era la mia al restarle 3600000 milisegundos) pero sigo sin encontrar que es lo no alcanzo a ver aun.

Lo dejo un par de dias y luego corrijo el titulo, gracias.
 

bgsoft

Well-Known Member
Licensed User
Hola cas6678

Tu buscabas una solucion a tu problema y se resolvió, otra cosa es que ahora busques el por que de las cosas "raras" :D .
El DateTime.Time funciona como es, y en el intervienen mas factores que el que le pases un valor que vale 0 y quieras que te devuelva 0, ya que los milisegundos que tienes que pasarle es desde el 01-01-1970, asi que si quieres que funcione como tu quieres, antes pon la zona horaria a 0, y entonces DateTime.Time te devolverá 00:00:00

B4X:
Tiempotranscurrido = 0
DateTime.SetTimeZone(0)

Log(DateTime.Time(Tiempotranscurrido)) ' te devolverá 00:00:00

Espero que con esto se hayan resuelto tus dudas, si no, me lo dices y yo te las amplio :D (es broma)

Saludos
 
Top