Calcular tiempo en HH:MM:SS basado en segundos

De acuerdo a una longitud de un texto determiné que se leen 163 caracteres en 12 segundos.
Luego, en base a ese resultado calculo cuánto tomará leer X cantidad de caracteres (siendo X = txtArg)

Int((Len(txtArg) * 12) / 163)

Luego debo convertir esos X segundos en horas, minutos y segundos. Conseguí un código que no siempre da bien:

aHOR = SEGS / 3600
aMIN = (SEGS Mod 3600) / 60
ASEG = ((SEGS Mod 3600) Mod 60)

El problema viene cuando la duración de la lectura supera los 200 segundos. A veces me suma un minuto, otras lo resta y otras da bien.
¿Cómo puedo hacer para que me calcule de manera correcta?

2 respuestas

Respuesta
1

Puedes intentarlo de alguna de estas formas:

1º/ Con la función CDate(), pasándole como argumento el número de segundos que quieres convertir entre 86400 (segundos que tiene un día). Por ejemplo:

CDate(Len(txtArg)*12/86400)

2º/ Con la función Format(), pasándole como argumentos el número de segundos/86400 y el formato de salida:

Format(Len(txtArg)*12/86400,"hh:nn:ss")

Un saludo.


Un nuevo foro de access, visítanos: http://nksvaccessolutions.com/Foro/ 

Con ambos ejemplos, para una longitud de 799 caracteres, una lectura calculada en 58 segundos me da como resultado 02:39:48.

¿Qué se puede estar calculando mal? ¿No estaré obteniendo mal la cantidad de segundos o estará mal el formato de la variable?

Dim SEGS As Integer, aHOR As Integer, aMIN As Integer, aSEG As Integer, FMIN As String

Sus usos son:
SEGS: Para obtener la cantidad X de segundos de demora.
aHOR: La demora en horas.
aMIN: La demora en minutos.
aSEG: La demora en segundos
FMIN: Un concatenado de aHOR:aMIN:aSEG.
(Aclaro, en el ejemplo que me pasas cambié FMIN a Date).

Fallo mío con la fórmula:

CDate((Len(txtArg)*12/163)/86400) ó Format((Len(txtArg)*12/163)/86400,"hh:nn:ss")

Si sólo quieres mostrar el dato con el formato "hh:mm:ss", no te hacen falta las variables parciales (incluso tampoco FMin)

Sólo tienes que asignarle a tu cuadro de texto, el resultado de la expresión, por ejemplo:

Me.txtResultado=CDate((Len(txtArg)*12/163)/86400)

ó:

Me.txtResultado=Format((Len(txtArg)*12/163)/86400,"hh:nn:ss")

Es increíble las vueltas que dí al tema para dar con la solución.
Malo en matemática, amateur en todo esto, aprendiendo de tutoriales y el famoso 'qué pasa si'. Pero siempre surge el genio que te salva.
¡Gracias es poco para lo que me has ayudado!
MILLÓN DE GRACIAS.

Respuesta
1

Otra forma. Vamos a suponer que en el formulario tiene un cuadro de texto llamado SEGUN, donde aparecen los segundos que has calculado con la formula(que no la he probado) y quieres que en otro cuadro de texto, por ejemplo Texto44 te aparezca el formato hh;mm:ss. En el evento, por ejemplo, Al recibir el enfoque de texto44 pon

Dim Minutos As Integer, Segundos As Integer, minutosr As Integer, Horas As Integer
Segundos = segun - Int([segun] / 60) * 60
Minutos = Int([segun] / 60)
minutosr = Minutos - Int(Minutos / 60) * 60
Horas = Int(Minutos / 60)
Texto44 = Horas & ":" & minutosr & ":" & Segundos

¡Gracias por la respuesta!
Pero como verás en mi pregunta, esto fue lo que usé y no me dio resultado. Lo único que cambié fueron los nombres de las variables.
Igual gracias por responder.

Pues antes de ponerlo yo lo probé y funciona.

El problema que me resultó a mí es que a veces me sumaba un minuto y otras me restaba un minuto al tiempo real. No sé de qué dependía.
Quizá para el tipo de dato que necesitas obtener o la forma en que obtienes esos X segundos a convertir fueron lo que te dieron el valor correcto.
De todos modos, prueba con lo que me ha pasado Sveinbjorn El Rojo y con menos código obtienes un mismo resultado.
¡GRACIAS POR TU RESPUESTA!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas