Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda para comparar Horas (https://www.clubdelphi.com/foros/showthread.php?t=25338)

JerS 20-09-2005 06:07:33

Ayuda para comparar Horas
 
Amigos estoy haciendo una aplicacion de ingreso de personal por medio de un horario! ya los datos del horario estan en una tabla, la cual esta previamente relacionada con el personal!, Ahora mi pregunta es como hago para comparar dos Horas para ver si el empleado llego temprano ejm:

If now>adodatase1.recordset.fields.item['horallegada'].value then
Retardado;

pero no me sirve porque si por ejemplo son las 8:00 pm y la hora de llegada es a las 10:00 am me toma el 10:00 am como mayor :S porfavor ayudenme o aclarenme un poco la situacion

marcoszorrilla 20-09-2005 07:53:11

Para las horas tienes que utilizar el formato de 24 horas, llamado "militar", o "ferroviario", además te recomiendo que utilices tambien la fecha, pues alguien que comience a trabajar a las 22h y finalice al dia siguiente por ejemplo a las 06h, te daría problemas de comparación.

En conclusión si utilizas un campo fecha/hora, puesto que hablas de Access, puedes almacenar ambos a la vez y luego hacer la comparación que proceda.

Un Saludo.

JerS 20-09-2005 16:48:16

Cita:

Empezado por marcoszorrilla
Para las horas tienes que utilizar el formato de 24 horas, llamado "militar", o "ferroviario", además te recomiendo que utilices tambien la fecha, pues alguien que comience a trabajar a las 22h y finalice al dia siguiente por ejemplo a las 06h, te daría problemas de comparación.

En conclusión si utilizas un campo fecha/hora, puesto que hablas de Access, puedes almacenar ambos a la vez y luego hacer la comparación que proceda.

Un Saludo.

Gracias amigo, pero oestoy utilizando Mysql!, y como hago para utilizar el formato de hora militar??

marcoszorrilla 20-09-2005 22:12:57

Cita:

2 Tipos fecha:

A la hora de almacenar fechas, hay que tener en cuenta que Mysql no comprueba de una manera estricta si una fecha es válida o no. Simplemente comprueba que el mes esta comprendido entre 0 y 12 y que el día esta comprendido entre 0 y 31.
Date: tipo fecha, almacena una fecha. El rango de valores va desde el 1 de enero del 1001 al 31 de diciembre de 9999. El formato de almacenamiento es de año-mes-dia

DateTime: Combinación de fecha y hora. El rango de valores va desde el 1 de enero del 1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y 59 segundos. El formato de almacenamiento es de año-mes-dia horas:minutos:segundos

TimeStamp: Combinación de fecha y hora. El rango va desde el 1 de enero de 1970 al año 2037. El formato de almacenamiento depende del tamaño del campo:

Tamaño
Formato
14
AñoMesDiaHoraMinutoSegundo aaaammddhhmmss
12
AñoMesDiaHoraMinutoSegundo aammddhhmmss
8
ñoMesDia aaaammdd
6
AñoMesDia aammdd
4
AñoMes aamm
2
Año aa


Time: almacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838, 59 minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS'

Year: almacena un año. El rango de valores permitidos va desde el año 1901 al año 2155. El campo puede tener tamaño dos o tamaño 4 dependiendo de si queremos almacenar el año con dos o cuatro dígitos.

Tipo de Campo
Tamaño de Almacenamiento
DATE
3 bytes
DATETIME
8 bytes
TIMESTAMP
4 bytes
TIME
3 bytes
YEAR
1 byte

Enlace:

Un Saludo.

adlfv 21-09-2005 17:06:31

Hola.

Creo recordar que para ese tipo de cosas viene bien DateUtils...

Yo me hice unas funciones hace tiempo a mano, pero creo que en DateUtils hay funciones para hacer eso, y más... De todas formas si no consigues, aquí te adjunto el código que hice...

Código:

// Devuelve true sii F1 representa la misma fecha que F2
 function Iguales(F1, F2: TDate): Boolean;
 begin
  Result := (Abs(StrToInt(FormatDateTime('YYYY', F1)) - StrToInt(FormatDateTime('YYYY', F2))) = 0) and
                    (Abs(StrToInt(FormatDateTime('M', F1)) - StrToInt(FormatDateTime('M', F2))) = 0) and
                    (Abs(StrToInt(FormatDateTime('D', F1)) - StrToInt(FormatDateTime('D', F2))) = 0)
 end;
 
 // Devuelve true sii F1 representa una fecha mayor que la fecha F2
 function Mayor(F1, F2: TDate): Boolean;
 begin
  Result := (StrToInt(FormatDateTime('YYYY', F1)) - StrToInt(FormatDateTime('YYYY', F2)) > 0) or
                    ((StrToInt(FormatDateTime('YYYY', F1)) - StrToInt(FormatDateTime('YYYY', F2)) = 0) and
                          (DateToJuliana(F1) - DateToJuliana(F2) > 0));
 end;
 
 // Devuelve true sii F1 representa una fecha menor que la misma fecha F2
 function Menor(F1, F2: TDate): Boolean;
 begin
  Result := Mayor(F2, F1);
 end;

Espero que te sirva.

Un saludo...


La franja horaria es GMT +2. Ahora son las 21:13:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi