Comparar Horas.! En Delphi.

German ..!
Mi pregunta es la siguiente, como puedo comparar dos variables de tipo String
una es HoraActual y la otra es HoraAviso
HoraActual, almacena la hora del sistema y HoraAviso está en file.txt, el caso es que cuando trazo linea a linea en valor de estas variables osea la String las dos cargan los valores correctos .. Pero nunca llegan a ser iguales .. Sin embargo cuando hago esto HoraActual <> HoraAviso
entonces si funciona.. ¿cuál es la solución? .. Tengo entendido que detrás de una String existe un carácter especial que indica el final de esta..
Ayudame ... Te lo agradecería.. Muchísimo..

1 respuesta

Respuesta
1
No me dices el formato exacto de cada string, así que doy por hecho que guarda el formato "hh:mm:ss", incluyendo los caracteres de separación, por ejemplo "05:29:30". Si es así, para comparar esa dos horas lo correcto seria StrToTime(HoraActual) <> StrToTime(HoraAviso). Puedes utilizar también "igual a" (=), "mayor que" (>) y "menor que" (<) para realizar la comparación.
Problemas:
-Cuidado si la aplicación se va a utilizar en un ordenador diferente, pues podría ser que ese ordenador utilizara otro "separador de hora" que no fueran los dos puntos ":". Lo mejor seria utilizar un campo de tiempo, pero si el valor lo has de guardar en un archivo de texto, no guardes el "separador", por ejemplo, la hora de antes podrías guardarla como "052930" (ancho fijo). Luego se lo añades en el momento de comparar, puedes obtener el separador configurado en Windows con la constante TimeSeparator. Ej. StrToTime(copy(HoraActual,1,2)+TimeSeparator+copy(HoraActual,3,2)+TimeSeparator+copy(HoraActual,5,2)). El ejemplo daría como resultado la hora 05:29:30.
- Otro problema es si HoraAviso es igual a 23:00 y HoraActual son las 05:29 del día siguiente (por ejemplo). El resultado de comparar esas 2 horas seria erróneo, ya que la hora del aviso fueron las once pm del día anterior. Para solventar este tema deberías utilizar un DateTime, que es un valor compuesto por la fecha y la hora. StrToDateTime('01/05/2004 05:29:30'). Igualmente ten cuidado con los separadores. Podrías guardar en el archivo de texto "01052004052930" y luego añadir los separadores cuando cargues el valor del archivo. Para obtener el separador de fechas, puedes utilizar la constante DateSeparator. Y para obtener un DateTime de la fecha y hora actuales puedes utilizar Now.
Nota:
Te seria más fácil tener el valor directamente en una variable DateTime, por si has de comparar los valores varia veces. Un ejemplo, suponiendo que guardes fecha y hora sin separadores ("01052004052930") y cargas este valor en HoraAviso (tipo String):
---------------------------
...
var HoraAvisoReal, HoraActualReal: tDateTime;
...
HoraAvisoReal := StrToDateTime(copy(HoraAviso,1,2)+DateSeparator+copy(HoraAviso,3,2)+DateSeparator+copy(HoraAviso,5,4)+' '+copy(HoraAviso,9,2)+TimeSeparator+copy(HoraAviso,11,2)+TimeSeparator+copy(HoraAviso,13,2));
HoraActualReal := Now;
if HoraAvisoReal = HoraActualReal then ....(lo que sea)
else if HoraAvisoReal < HoraActualReal ....(lo que sea);
---------------------------
Podrias cargar el valor directamente del archivo al DateTime. Evidentemente, deberás adaptar este código a tu aplicación. Si tienes alguna duda, ya dirás.
Gracias German ...!
La verdad te estoy muy agradecido, tu atención y explicación son, yo diría las de un experimentado profesor y experto... de veras gracias de nuevo, ojala mucha gente en este mundo fuera como ud..
Por otra parte esta demás decirte que si te puedo ayudar en algo y esta en mis manos, cuenta conmigo.. no soy programador de mucha experiencia, pero si necesitas otro tipo de ayuda aquí estoy..
Chao nos pillamos ah y gracias de nuevo..!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas