PDA

Ver la Versión Completa : Requerimiento de una función para GH Freebrary.


TiammatMX
28-03-2013, 01:13:16
¿Y que te parecería una función que devuelva la hora en varios formatos (entero, flotante, string)?

Es decir, yo le enviaría la hora en el formato de la máquina y que devolviese el valor en distintas escalas. Se me ocurriría una llamada así:

ghGetHour(ghFormato,Now);

Donde ghFormato sea el formato de destino.
0 = Integer.
1 = Double.
2 = String corto (hh:mm) [formato 12 horas]
3 = String corto (HH:mm) [formato 24 horas]
4 = String largo (HH:mm.ss) [formato 24 horas con segundos]
5 = String largo (HH:mm.ss mmm) [formato 24 horas con segundos y milisegundos]

Ahí me platicas, compadre, si te "late" la idea como para ingresarla a tu librería.

Al González
28-03-2013, 01:43:07
Hola Felipe.

Es necesario más contexto para comprender el requerimiento. Las opciones de la 2 a la 5 se resuelven bien con la función nativa FormatDateTime.

En cuando a las opciones 0 y 1 te agradecería algunos ejemplos de valores de entrada con sus respectivos valores de salida.

Ahora, suponiendo que ya existiera la función que sugieres, ¿cómo la usarías? ¿Alguna pieza de código un poco más generosa para dar una idea? Resulta importante conocer el origen de este tipo de inquietudes.

Quedo a la espera de tu retroalimentación, saludos. :)

TiammatMX
28-03-2013, 16:12:54
Hola Felipe.

Es necesario más contexto para comprender el requerimiento. Las opciones de la 2 a la 5 se resuelven bien con la función nativa FormatDateTime.

En cuando a las opciones 0 y 1 te agradecería algunos ejemplos de valores de entrada con sus respectivos valores de salida.

Ahora, suponiendo que ya existiera la función que sugieres, ¿cómo la usarías? ¿Alguna pieza de código un poco más generosa para dar una idea? Resulta importante conocer el origen de este tipo de inquietudes.

Quedo a la espera de tu retroalimentación, saludos. :)

Te doy el ejemplo que utilizo diariamente. Cuando mi patrón diseñó la base de datos original sobre la que estamos trabajando, decidió que la hora debía ser expresada por un entero para determinar los minutos transcurridos desde la media noche, es decir de 0 a 1439, y en TODA la aplicación se maneja así.

Me he visto en muchos problemas para calcular horas/fechas, sumar la hora a una fecha y como éste número (la hora) es un número de punto flotante, es conveniente tenerlo presente para realizar sumar a un TDate un TTime (en formato de punto flotante) y obtener un TDateTime.

Espero haber sido claro, y si no lo fuí, avísame y te confundo más... :p

Ñuño Martínez
28-03-2013, 20:18:38
Yo creo que, en lugar de elegir el formato con números, usar una cadena al estilo de la función date de PHP (http://www.php.net/manual/es/function.date.php). En principio no debería ser muy difícil. Bastaría con un bucle que fuera recorriendo la cadena comprobando cada carácter. Si no puedes, la puedo hacer yo.

Al González
28-03-2013, 20:41:51
De entrada olvida los tipos TDate y TTime, que son tipos especiales de la VCL equivalentes a TDateTime, pero en esencia útiles para asuntos de RTTI, como el diseño de componentes que lleven propiedades de fecha u hora. Mientras no sea éste el caso, emplea el tipo estándar TDateTime para manejar fechas, horas y combinaciones de ambas.

[...] decidió que la hora debía ser expresada por un entero para determinar los minutos transcurridos desde la media noche, es decir de 0 a 1439, y en TODA la aplicación se maneja así.
Bien, a pesar de que esa decisión de tu patrón fue casi sin duda un error, cuentas con la función nativa MinuteOfTheDay para convertir cualquier hora TDateTime a un entero que indique la cantidad de minutos transcurridos desde la hora 0. ¿La usas actualmente? Y si no, ¿cómo estás haciendo la conversión TDateTime -> minutos Integer? Para hacer la conversión inversa (minutos Integer a TDateTime), lo único que necesitas es dividir ese entero entre la constante MinsPerDay. ¿Cómo lo haces actualmente?
Uses
DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
Var
I1, I2 :Integer;
begin
I1 := MinuteOfTheDay (Time); // Hora actual
I2 := MinuteOfTheDay (0.5); // Mediodía (720 minutos)
ShowMessage (IntToStr (I1));
ShowMessage (IntToStr (I2));
ShowMessage (TimeToStr (I1 / MinsPerDay));
ShowMessage (TimeToStr (I2 / MinsPerDay));
end;

Me he visto en muchos problemas para calcular horas/fechas, sumar la hora a una fecha [...]
¿Podrías detallar tales problemas y poner alguna muestra del código fuente de la aplicación donde se presentan esas dificultades? Si, por ejemplo, deseas sumar una cantidad de minutos Integer a una fecha TDateTime, sólo tienes que usar la función nativa IncMinute:
Uses
DateUtils;

procedure TForm1.Button2Click(Sender: TObject);
Var
FH :TDateTime;
I :Integer;
begin
I := 720; // Mediodía

// Sumamos a la fecha actual 720 minutos para obtener el mediodía de hoy
FH := IncMinute (Date, I);
ShowMessage (DateTimeToStr (FH));
end;

Espero haber sido claro, y si no lo fuí, avísame y te confundo más... :p
Más confusión, por favor. Hasta que lleguemos al meollo del asunto y determinemos qué convendría agregar a GHF. Si lo anterior no satisface del todo tus necesidades para manejo de fechas y horas, permíteme entender estas a fondo, no escatimes en texto y código para explicarlas. :)

Gracias, seguimos por aquí.

Al González
28-03-2013, 20:49:03
[...] en lugar de elegir el formato con números, usar una cadena al estilo de la función date de PHP (http://www.php.net/manual/es/function.date.php).
Hola Ñuño, precisamente es lo que le comentaba anteriormente a Felipe:
Las opciones de la 2 a la 5 se resuelven bien con la función nativa FormatDateTime.
Es decir, que para dar formato a una fecha / hora, ya se tiene la función FormatDateTime de Delphi, cuya operación es muy parecida a la de esa función de PHP. :)

Ñuño Martínez
29-03-2013, 12:30:12
Hola Ñuño, precisamente es lo que le comentaba anteriormente a Felipe:

Es decir, que para dar formato a una fecha / hora, ya se tiene la función FormatDateTime de Delphi, cuya operación es muy parecida a la de esa función de PHP. :) No se me ocurrió que la función podría existir ya. :o

Al González
16-04-2013, 22:56:11
Compadre Felipe, esta semana liberaré la versión de abril. ¿Qué has pensado respecto a las respuestas anteriores? ¿Persiste la necesidad que planteabas al inicio? Ayúdame a comprenderla del todo, no estaría mal anexar un miniprograma de ejemplo al requerimiento. :)

Saludos.

TiammatMX
18-04-2013, 00:14:38
Compadre Felipe, esta semana liberaré la versión de abril. ¿Qué has pensado respecto a las respuestas anteriores? ¿Persiste la necesidad que planteabas al inicio? Ayúdame a comprenderla del todo, no estaría mal anexar un miniprograma de ejemplo al requerimiento. :)

Saludos.

Pues no, después de la explicación tan puntual respecto al uso (o abuso, según sea el caso :mad::confused: ) de cómo se maneja la fecha/hora acá en el trabajo, la necesidad desapareció...

Pero con todo gusto revisamos qué de nuevo traen las librerías, cómo de que no... :p:D

Al González
18-04-2013, 05:41:14
[...] la necesidad desapareció...
Enterado, Felipe. Que haya sido provechosa la explicación. :) ^\||/