Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Convertir fecha con formato sql a algo legible (https://www.clubdelphi.com/foros/showthread.php?t=42618)

Delphitest 18-04-2007 12:38:28

Convertir fecha con formato sql a algo legible
 
Buenos días a tod@s,

hacía mucho que no pasaba por el foro. He tenido que dejar de lado el programa que empece con tanta ilusión ya que me resulta imposible sacar tiempo para ello, a ver si en verano puedo reanudar el asunto.

Me surge una duda:

Trasteo con un foro PHPBB cuyas tablas estan en mysql, y dentro de alguna de ellas hay un campo fecha que está representado en segundos contados desde el 1 de enero de 1980.

Quiero hacer una utilidad sencilla que me convierta ese número en un formato de fecha legible, tipo dd/mm/aaaa hh:mm

Alguien me sabria decir como puedo hacer esta conversión ??

Lo que pretendo es algo muy básico, una casilla edit para insertar el número y una salida tipo label que me de la fecha convertida.

Gracias por vuestra ayuda,

un abrazo

Besto 18-04-2007 12:54:03

La función que tienes que usar es:

edit.text := DateToStr(UnixToDateTime(tabla.FieldByName('Fecha').value));

Para hacer el proceso contrario, es decir guardar en una tabla la fecha en formato Unix el proceso seria:

tabla.FieldbyName('Fecha').AsInteger := DateTimeToUnix(StrToDate(edit.Text));


Para obtener la fecha correcta desde sql seria:

select from_UnixTime(fecha,"%d/%m/%Y") as fec ...

Delphitest 18-04-2007 13:31:34

Veo que el foro sigue con la misma eficacia que antes ;) gracias Besto.

Lo de las funciones no acabo de entenderlo pese a mi cabezonería.

El dato que necesito convertir, para simplificarlo, no hace falta sacarlo de la tabla, me basta con escribirlo en un edit a mano. Solo necesito adaptar lo que me dices para que me diga la fecha normal pero no doy con ello.

Os pongo el simple codigo que tengo hasta ahora (es realmente simple como veis):

Código:

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Button1: TButton;
    procedure Edit1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;

implementation
{$R *.dfm}
procedure TForm1.Edit1Change(Sender: TObject);
begin
  label4.Caption := 'Aqui la fecha con el formato legible';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  application.Terminate;
end;
end.

Dentro de label4 es donde necesito poner la fecha convertida que introduzco en edit1 (he optado por que ese calculo se haga en cuanto cambie el contenido de edit1 aunque no me importa poner un botón si es mas cómodo)

Besto 18-04-2007 13:40:17

Si no he entendido mal la fecha en formato numérico la tienes en edit1 y quieres que en label4 aparezca en formato fecha. La funcion que tienes que aplicar sería:

label4.caption := DateToStr(UnixToDateTime(edit1.text));

Delphitest 18-04-2007 14:18:34

Gracias de nuevo Besto,

eso es lo que quiero hacer, si.

Lo que me indicas es la solución pero me da un error indicando (mas o menos lo entiendo así) que UnixToDateTime no está declarada.

Por eso me referia al tema de las funciones, por si hay que hacer algo mas.

(lo siento, supongo que es una pregunta un poco tonta pero no se que hay que hacer)

Delphitest 18-04-2007 17:54:03

Lo he medio solucionado dandole vueltas con otra función que he visto buscando en el foro. Os lo pongo por si le sirve a alguien:

Código:

procedure TForm1.Edit1Change(Sender: TObject);
var
dias : double;
begin
  dias := strtofloat(edit1.text)/86400;
  label4.caption := datetostr(EncodeDate(1970,1,1)+dias);
end;

No lo tengo al 100% como yo quería ya que ademas de la fecha quiero que me ponga hh:mm , sigo buscando ... :rolleyes:

Delphitest 18-04-2007 19:54:06

Bien, pues probando y probando... ya lo tengo

Asi queda el tema, ademas veo que los segundos se inician el 1/1/1970 y no en el 80 como yo pensaba.

Código:

procedure TForm1.Edit1Change(Sender: TObject);
var
dias : double;
begin
  if edit1.Text <> '' then begin
    dias := strtofloat(edit1.text)/86400 + encodedate(1970,1,1);
    label4.caption := datetimetostr(dias);
  end;
end;

Gracias de todos modos por vuestra colaboración, seguiré molestando de vez en cuando ;)

Besto 19-04-2007 10:04:38

Aunque ya has encontrado otra solución te indico que para que funcione la función hay que añadir a la clausula lo siguiente:

uses ..., DateUtils

no entendia bien a lo que te referias con el tema de las funciones, perdona.

Delphitest 19-04-2007 11:48:39

A eso me refería, exacto.

Muchas gracias de todos modos, tomo buena nota para otra vez.

Un abrazo

bitbow 29-05-2007 04:06:20

Intercambio de ideas.....
 
Saludos, tambien hace un tiempo he desarrollado un sistema de facturacion, quisiera ver la forma de contactarnos para intercambiar ideas y ver en que podemos colaborar.

Saludos y suerte.


La franja horaria es GMT +2. Ahora son las 09:04:17.

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