Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   [GH Freebrary] (https://www.clubdelphi.com/foros/forumdisplay.php?f=54)
-   -   Requerimiento de una función para GH Freebrary. (https://www.clubdelphi.com/foros/showthread.php?t=82642)

TiammatMX 28-03-2013 00:13:16

Requerimiento de función que devuelva hora en varios formatos
 
¿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í:

Código Delphi [-]
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 00: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 15:12:54

Cita:

Empezado por Al González (Mensaje 457696)
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 19: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. 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 19: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.

Cita:

Empezado por tiammat (Mensaje 457744)
[...] 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?
Código Delphi [-]
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;

Cita:

Empezado por tiammat (Mensaje 457744)
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:
Código Delphi [-]
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;

Cita:

Empezado por tiammat (Mensaje 457744)
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 19:49:03

Cita:

Empezado por Ñuño Martínez (Mensaje 457757)
[...] en lugar de elegir el formato con números, usar una cadena al estilo de la función date de PHP.

Hola Ñuño, precisamente es lo que le comentaba anteriormente a Felipe:
Cita:

Empezado por Al González (Mensaje 457696)
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 11:30:12

Cita:

Empezado por Al González (Mensaje 457760)
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 21: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 17-04-2013 23:14:38

Cita:

Empezado por Al González (Mensaje 458707)
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 04:41:14

Cita:

Empezado por tiammat (Mensaje 458808)
[...] la necesidad desapareció...

Enterado, Felipe. Que haya sido provechosa la explicación. :) ^\||/


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

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