Ver la Versión Completa : [ SOLUCIONADO ] Ayuda con cálculo de diferencia horaria
SmartPhoneLover
15/11/16, 10:29:07
Lo que estoy intentado es saber la diferencia en el formato (H:M:S) del tiempo transcurrido desde un x de INICIO, hasta otro x de FIN.
Esta es la tarea en cuestión:
A1: Establecer variable [ Nombre:%start A:%TIMES Calcular:Apagado Añadir:Apagado ]
A2: Esperar [ MS:0 Segundos:x Minutos:x Horas:x Días:0 ]
A3: Establecer variable [ Nombre:%end A:%TIMES Calcular:Apagado Añadir:Apagado ]
A4: Establecer variable [ Nombre:%calc A:%end-%start Calcular:Encendido Añadir:Apagado ]
A5: Establecer variable [ Nombre:%hhh A:floor(%calc/3600) Calcular:Encendido Añadir:Apagado ]
A6: Establecer variable [ Nombre:%mmm A:floor((%calc % 3600)/60) Calcular:Encendido Añadir:Apagado ]
A7: Establecer variable [ Nombre:%sss A:%calc % 60 Calcular:Encendido Añadir:Apagado ]
A8: Establecer variable [ Nombre:%hhh A:0%hhh Calcular:Apagado Añadir:Apagado ] Si (if) [ %hhh < 10 & %hhh > 0 ]
A9: Establecer variable [ Nombre:%hhh A:00 Calcular:Apagado Añadir:Apagado ] Si (if) [ %hhh = 0 ]
A10: Establecer variable [ Nombre:%mmm A:0%min Calcular:Apagado Añadir:Apagado ] Si (if) [ %mmm < 10 & %mmm > 0 ]
A11: Establecer variable [ Nombre:%mmm A:00 Calcular:Apagado Añadir:Apagado ] Si (if) [ %mmm = 0 ]
A12: Establecer variable [ Nombre:%sss A:0%sss Calcular:Apagado Añadir:Apagado ] Si (if) [ %sss < 10 & %sss > 0 ]
A13: Establecer variable [ Nombre:%sss A:00 Calcular:Apagado Añadir:Apagado ] Si (if) [ %sss = 0 ]
A14: Flash [ Texto:%hhh:%mmm:%sss Largo:Encendido ] Lo raro que me esta pasando es que si el tiempo transcurrido no supera el minuto (59 segundos), el resultado en la tarea Flash es correcto (00:00:59). Pero cuando éste supera el minuto, en adelante, los segundos se calculan sin problema pero los minutos no. Siempre me figura "0%mmm".
Nota: x = tiempo de espera simulado entre tiempo INICIO Y FIN.
WillyWeb
15/11/16, 12:33:20
No me queda muy claro el planteamiento. ¿Qué formato tienen %start y %end?.
Si %start y %end son horas en formato H:M:S la resta que haces en A4 (%end-%start) puede dar como resultado cualquier cosa. Ten en cuenta que en ese caso estarías restando dos cadenas de caracteres convertidas a números sin contemplaciones.
Si esos valores de entrada tienen formato H:M:S lo mejor para "simplificar" el asunto es convertir ambos valores a segundos, hacer la resta, y luego convertir los segundos de diferencia al formato que quieras/necesites.
Para la conversión H:M:S a SEG tienes una acción de Tasker que lo hace directamente, aunque me suena que no tiene en cuenta los segundos, en cuyo caso los tendrás que sumar tú después.
Esto me ha recordado de nuevo que tengo pendiente publicar una tarea para convertir segundos a cualquier otra cosa. :rolleyes:
leromaro
15/11/16, 12:33:22
Hola , ya se ha tratado, fijate si te sirve algo de esto
http://www.htcmania.com/showthread.php?t=739807
http://www.htcmania.com/showthread.php?t=571609
http://www.htcmania.com/showthread.php?t=637972
Saludos
SmartPhoneLover
15/11/16, 12:43:15
No me queda muy claro el planteamiento. ¿Qué formato tienen %start y %end?.
Si %start y %end son horas en formato H:M:S la resta que haces en A4 (%end-%start) puede dar como resultado cualquier cosa. Ten en cuenta que en ese caso estarías restando dos cadenas de caracteres convertidas a números sin contemplaciones.
Si esos valores de entrada tienen formato H:M:S lo mejor para "simplificar" el asunto es convertir ambos valores a segundos, hacer la resta, y luego convertir los segundos de diferencia al formato que quieras/necesites.
Para la conversión H:M:S a SEG tienes una acción de Tasker que lo hace directamente, aunque me suena que no tiene en cuenta los segundos, en cuyo caso los tendrás que sumar tú después.
Esto me ha recordado de nuevo que tengo pendiente publicar una tarea para convertir segundos a cualquier otra cosa. :rolleyes:
- Las variables '%start' y '%end' estan, al menos eso creo, en formato SEGUNDOS. Por eso le asigno el valor de inicio y fin proveniente de la variable de sistema '%TIMES'.
- La resta que realizo en la A4 la hago para restar los segundos de anteriormente obtenidos. De este modo seguría trabajando con segundos. Luego pasaría de segunfos a HH:MM:SS.
- Es lo que hago, o no? Utilizo %TIMES para trabajar con los tiempos iniciales directamente en segundos, de esta manera me evito el convertir de h-m-s a segundos.
- Ya pero tendría que sincronizar los segundos de la formula [%TIMES-(60*floor(%TIMES/60))], con el tiempo convertido a segundos de la variable %TME.
- Mmmm, me gustaría verlo. Estoy impaciente por ver tu trabajo. ;)
SmartPhoneLover
15/11/16, 12:44:49
Hola , ya se ha tratado, fijate si te sirve algo de esto
http://www.htcmania.com/showthread.php?t=739807
http://www.htcmania.com/showthread.php?t=571609
http://www.htcmania.com/showthread.php?t=637972
Saludos
Muchas gracias 'leromaro', les hecharé un vistazo.
A partir de ahora antes de preguntar, me mataré buscando por aquí, por la web y debajo de las piedras. Luego, si REALMENTE no encuentro nada, ni siquiera en chino mandarín, preguntaré xD
danko9696
15/11/16, 13:18:14
Muchas gracias 'leromaro', les hecharé un vistazo.
A partir de ahora antes de preguntar, me mataré buscando por aquí, por la web y debajo de las piedras. Luego, si REALMENTE no encuentro nada, ni siquiera en chino mandarín, preguntaré xD
Buscando antes probablemente habrías dado incluso con scripts completos, pero mucho más importante que eso o que saber crear bien la tarea a la primera es la metodología a la hora de depurar código. Tendrías que haber metido lineas de debug (mostrar resultados parciales de cálculos con acciones flash o popups) para averiguar donde falla, en qué linea los cálculos se desvían de lo que deberían ser (si es necesario usar datos iniciales fake para mayor facilidad) y vista esa linea concreta, si no sabes por qué falla entonces buscar.
WillyWeb
15/11/16, 14:24:42
- Las variables '%start' y '%end' estan, al menos eso creo, en formato SEGUNDOS. Por eso le asigno el valor de inicio y fin proveniente de la variable de sistema '%TIMES'.
Pues tienes razón :oh:
Me he quedado con la descripción que has hecho y no he prestado atención a las primeras acciones de la tarea. :(
Estando claro que manejas segundos desde el primer momento el problema tiene que estar en las operaciones posteriores. :rolleyes:
Las operaciones de las acciones A5/A6/A7 son correctas y hacen lo que se espera de ellas.
En las acciones A8 a A13 (para poner el cero a la izquierda) está el fallo. En A10 has usado %min en vez de %mmm. Por cierto, podías hacer lo mismo sólo con tres acciones.
Mmmm, me gustaría verlo. Estoy impaciente por ver tu trabajo. ;)
En lo que tenga un rato libre. :D
SmartPhoneLover
15/11/16, 14:50:57
Buscando antes probablemente habrías dado incluso con scripts completos, pero mucho más importante que eso o que saber crear bien la tarea a la primera es la metodología a la hora de depurar código. Tendrías que haber metido lineas de debug (mostrar resultados parciales de cálculos con acciones flash o popups) para averiguar donde falla, en qué linea los cálculos se desvían de lo que deberían ser (si es necesario usar datos iniciales fake para mayor facilidad) y vista esa linea concreta, si no sabes por qué falla entonces buscar.
Muchas gracias por el consejo, a partir de ahora seguiré tu metodología de ensayo-error. Y solo si no logro resolver el incoveniente entonces busco y pregunto. ;)
danko9696
15/11/16, 19:48:49
Muchas gracias por el consejo, a partir de ahora seguiré tu metodología de ensayo-error. Y solo si no logro resolver el incoveniente entonces busco y pregunto. ;)
No es que sea mi metodología. Si el error no resulta obvio fijándose en él no queda otra que ir ejecutando paso a paso y/o meter alertas. Resulta muy fácil cometer errores y si una tarea muy lineal como esta no eres capaz de depurarla cuando no sale bien a la primera imagina qué ocurrirá cuanto te pongas con una tarea que tenga varios bucles uno dentro de otro, arrays y llamadas a otras tareas, que puede que por el tiempo que lleve desanime a otros a echarte un cable.
Tienes que dar por hecho que la primera vez que ejecutes una tarea muy larga y complicada muy posiblemente no va a funcionar correctamente, debes estar preparado para ello. Incluso mientras creas la tarea puedes ir pensando qué alertas te pueden resultar útiles para depurar después el código o incluso crearlas de antemano y si luego resulta que no hacen falta (porque funciona a la primera), dejarlas (desactivadas) para facilitar posibles modificaciones posteriores que puedas querer hacer en el futuro. También es muy recomendable en la depuración tener comentado el código.
Y se me olvidaba, también en lugar de popups/flash puedes copiar al clipboard, cuando el contenido es muy extenso o escribir a un archivo cuando sea todavía más extenso, con sonidos, tts, led, etc...
Caravantes
16/11/16, 00:25:07
A8: Establecer variable [ Nombre:%hhh A:0%hhh Calcular:Apagado Añadir:Apagado ] Si (if) [ %hhh < 10 & %hhh > 0 ]
A9: Establecer variable [ Nombre:%hhh A:00 Calcular:Apagado Añadir:Apagado ] Si (if) [ %hhh = 0 ]
Puedes simplificar de esta forma:
A8: Establecer variable [ Nombre:%hhh A:0%hhh Calcular:Apagado Añadir:Apagado ] Si (if) [ %hhh < 10 ]
y de esta forma puedes suprimir la acción A9, que deja de ser necesaria. Más simple y más eficiente.
Aplica la misma estrategia para las acciones 10 (minutos) y 12 (segundos), y de ese modo puedes suprimir las acciones 11 y 13.
A partir de ahora antes de preguntar, me mataré buscando por aquí, por la web y debajo de las piedras...
No exageres. Te hubiera bastado con hacer un par de intentos con el buscador del foro. Te diré algo: Leromaro no se sabe las URLs de memoria. Él las ha puesto después de haber usado el buscador del foro. Y no te las ha dado como reproche ni nada parecido, solo te ha aportado pistas para que puedas tener mejor información sobre el tema. No hay ningún motivo para que le respondas como si te hubiera dicho algo negativo.
Igualmente, creo que Danko te está dando consejos excelentes. Muchos de nosotros pensamos que está bien ayudar a un compañero para resolver un problema puntual, pero también es válido dar a otro las indicaciones para que aprenda a resolver muchos problemas por sí mismo. Darte un pez está bien pero enseñarte a pescar es aún mejor. Y también parece que te estás tomando a mal las sugerencias de Danko, sin motivo. Es mi opinión.
SmartPhoneLover
08/12/16, 12:54:48
No es que sea mi metodología. Si el error no resulta obvio fijándose en él no queda otra que ir ejecutando paso a paso y/o meter alertas. Resulta muy fácil cometer errores y si una tarea muy lineal como esta no eres capaz de depurarla cuando no sale bien a la primera imagina qué ocurrirá cuanto te pongas con una tarea que tenga varios bucles uno dentro de otro, arrays y llamadas a otras tareas, que puede que por el tiempo que lleve desanime a otros a echarte un cable.
Tienes que dar por hecho que la primera vez que ejecutes una tarea muy larga y complicada muy posiblemente no va a funcionar correctamente, debes estar preparado para ello. Incluso mientras creas la tarea puedes ir pensando qué alertas te pueden resultar útiles para depurar después el código o incluso crearlas de antemano y si luego resulta que no hacen falta (porque funciona a la primera), dejarlas (desactivadas) para facilitar posibles modificaciones posteriores que puedas querer hacer en el futuro. También es muy recomendable en la depuración tener comentado el código.
Y se me olvidaba, también en lugar de popups/flash puedes copiar al clipboard, cuando el contenido es muy extenso o escribir a un archivo cuando sea todavía más extenso, con sonidos, tts, led, etc...
No no, solo lo tomé como ejemplo y llame, aunque erroneamente, lo que me comentaste como tu posible metodología. Simplemente quise dejar claro que para mi la forma de procesar una tarea el método de ensayo-error me parece bastante bueno.
Gracias por las recomendaciones de introducir avisos dentro de una tarea. Ahora he incluido esa forma de trabajar en mis proyectos y la verdad me facilita bastante las cosas, ya que ahora soy capaz de visualizar un poco mejor las posibles causas de mis errores al crear una tarea, aunque haya veces que tenga que recurrir a vuestra experiencia.
SmartPhoneLover
08/12/16, 13:02:23
Puedes simplificar de esta forma:
A8: Establecer variable [ Nombre:%hhh A:0%hhh Calcular:Apagado Añadir:Apagado ] Si (if) [ %hhh < 10 ]
y de esta forma puedes suprimir la acción A9, que deja de ser necesaria. Más simple y más eficiente.
Aplica la misma estrategia para las acciones 10 (minutos) y 12 (segundos), y de ese modo puedes suprimir las acciones 11 y 13.
Mmm gracias por la idea, pero mi cometido no era el que creo estas pensando.
Dicha tarea la uso para volcar (y escribir) la hora en un archivo TXT, pero como quería que Tasker me escribiese la hora correctamente por eso puse las demás acciones. Por defecto he visto que me lo pone como 0:01:00, pero yo prefiero que se vea: 00:01:00, por eso añadí esas tres tareas extras de establecer la variable a '00' cuando éstas coincidan con lo dicho.
No exageres. Te hubiera bastado con hacer un par de intentos con el buscador del foro. Te diré algo: Leromaro no se sabe las URLs de memoria. Él las ha puesto después de haber usado el buscador del foro. Y no te las ha dado como reproche ni nada parecido, solo te ha aportado pistas para que puedas tener mejor información sobre el tema. No hay ningún motivo para que le respondas como si te hubiera dicho algo negativo.
Igualmente, creo que Danko te está dando consejos excelentes. Muchos de nosotros pensamos que está bien ayudar a un compañero para resolver un problema puntual, pero también es válido dar a otro las indicaciones para que aprenda a resolver muchos problemas por sí mismo. Darte un pez está bien pero enseñarte a pescar es aún mejor. Y también parece que te estás tomando a mal las sugerencias de Danko, sin motivo. Es mi opinión.
No era en absoluto mi intención la de hacer un comentario/crítica negativos hacia él, simplemente comenté la forma de trabajo que me parece correcta.
Perdón si mi comentario tuvo un tono un tanto descarado, pero repito que no fue mi intención. Siempre agradezco vuestras réplicas y ayudas.
Y bueno, como ya he logrado solucionar el problema marco el tema como solucionado.
--> La tarea esta en el proyecto 'Grabador de Llamadas', encargada de volcar los registros al TXT de hora de la llamada, y duración de la misma.
Caravantes
08/12/16, 14:01:29
Mmm gracias por la idea, pero mi cometido no era el que creo estas pensando.
Dicha tarea la uso para volcar (y escribir) la hora en un archivo TXT, pero como quería que Tasker me escribiese la hora correctamente por eso puse las demás acciones. Por defecto he visto que me lo pone como 0:01:00, pero yo prefiero que se vea: 00:01:00, por eso añadí esas tres tareas extras de establecer la variable a '00' cuando éstas coincidan con lo dicho.
Desde el primer momento entendí cuál era tu intención: dos dígitos para la hora, dos dígitos para los minutos, dos dítigos para los segundos. Y creo que ese objetivo se puede conseguir de forma más simple, con menos acciones, como ya te dije, y te repito a continuación:
A8: Establecer variable [ Nombre:%hhh A:0%hhh Calcular:Apagado Añadir:Apagado ] Si (if) [ %hhh < 10 & %hhh > 0 ]
A9: Establecer variable [ Nombre:%hhh A:00 Calcular:Apagado Añadir:Apagado ] Si (if) [ %hhh = 0 ]
Puedes simplificar de esta forma:
A8: Establecer variable [ Nombre:%hhh A:0%hhh Calcular:Apagado Añadir:Apagado ] Si (if) [ %hhh < 10 ]
y de esta forma puedes suprimir la acción A9, que deja de ser necesaria. Más simple y más eficiente.
Aplica la misma estrategia para las acciones 10 (minutos) y 12 (segundos), y de ese modo puedes suprimir las acciones 11 y 13.
Pero a la larga el resultado va a ser el mismo, así que tal vez prefieras dejarlo como lo pensaste inicialmente, porque quizá sea más comprensible para ti.
SmartPhoneLover
08/12/16, 14:46:45
Vaya, ahora capto lo que dices. No lo miré con toda la atención. Thanks!
danko9696
08/12/16, 17:34:34
Simplemente quise dejar claro que para mi la forma de procesar una tarea el método de ensayo-error me parece bastante bueno.
Con el uso de alertas sigue siendo ensayo-error, solo que ahora tienes una idea de por donde está el error para poder hacer un cambio que tenga una buena oportunidad de dar resultado. Si no, ¿que vas a hacer, cambios al azar hasta que funcione?
vBulletin® v3.8.1, Copyright ©2000-2026, Jelsoft Enterprises Ltd.