Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-02-2007
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 22
acertij022 Va por buen camino
Exclamation resta entre fecha !!

Hola delphiano me surgio un problema interesante que no le ecuentro la vuelta
resulta que tengo que indicar si existe mas de x segundos de diferencia entre 2 fechas que se encuentra en string con el formato yyyymmddhhnnss parecia tonto lo 1º que se me ocurrio es pasarlo los 2 string a entero y hacer la resta grabe error no contemple el siguiente ejemplo:
a='20070228100003';
b='20070228095958';

esto tendria que darme 5 segundos

a alguien se le ocurre como solucionarlo
Responder Con Cita
  #2  
Antiguo 28-02-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Yo te recomendaría pasar los strings a un TDateTime y utilizar la función SecondsBetween .

PD: Es importante tener la premisa que para trabajar con fechas lo mejor es que estas sean fechas y no cadenas!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 28-02-2007
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 22
acertij022 Va por buen camino
tenes razón pero lo veo algo engorroso porque no se como estara el formato en la Pc del cliente y esta funcion se basa en el formato de Windows, igualmente gracias
Responder Con Cita
  #4  
Antiguo 02-03-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por delphi.com.ar
Yo te recomendaría pasar los strings a un TDateTime y utilizar la función SecondsBetween .

PD: Es importante tener la premisa que para trabajar con fechas lo mejor es que estas sean fechas y no cadenas!
Hola, yo estoy totalmente de acuerdo contigo.

Cita:
Empezado por acertij022
Lamentablemente no es la socucion supon que hay que calcular la diferncia entre:

20070302000001
20070301235959

Igualmente muchas gracias
Lo que yo creo es que tu problema es que no sabes como 'pasar' de un string a un DateTime, aqui te pongo un ejemplo de como hacerlo.

Código Delphi [-]
// Requieres la Unit DateUtils

var
  Inicial,Final: String;
  FInicial,FFinal: TDateTime;
  Duracion: Int64;

:::::::::

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  Inicial  := '20070301235946';
  Final    := '20070302000006';

  //Aqui se convierte tu string a TDateTime
  FInicial := StrtoDateTime(Copy(Inicial,7,2)+'/'+
                            Copy(Inicial,5,2)+'/'+
                            Copy(Inicial,1,4)+' '+
                            Copy(Inicial,9,2)+':'+
                            Copy(Inicial,11,2)+':'+
                            Copy(Inicial,13,2));
  FFinal   := StrtoDateTime(Copy(Final,7,2)+'/'+
                            Copy(Final,5,2)+'/'+
                            Copy(Final,1,4)+' '+
                            Copy(Final,9,2)+':'+
                            Copy(Final,11,2)+':'+
                            Copy(Final,13,2));

  Duracion := SecondsBetween(FFinal,FInicial);

  Label1.Caption := DateTimetoStr(FInicial);
  Label2.Caption := DateTimetoStr(FFinal);
  Label3.Caption := InttoStr(Duracion);
end;

Esto puede no ser lo mejor ni muy elegante pero funciona, estuve usando diferentes variables y en algunos casos hay una diferencia de 1 segundo, quizas por cuestiones de redondeo, no se.

Saludos y espero te ayude.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #5  
Antiguo 03-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Cita:
Empezado por egostar
en algunos casos hay una diferencia de 1 segundo, quizas por cuestiones de redondeo, no se.
No has tenido en cuenta los milisegundos de un formato TDateTime, casi seguro que viene por ahí el fallito.

Formato de fecha y hora: 23/01/2007 23:59:59.999 (falta 1 milisegundo para que desencadene el cambio de fecha).

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 01-03-2007
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
lo mas facil convierte los valores a TDatetime
haces la resta, la parte entera es la cantidad de dias que hay de diferencia y luego la parte decimal son las horas, para eso usas el formatDateTime
algo asi como FormatDateTime('hh:nn:ss', VariableDiferenciaFecha) eso te mostrara la diferencia en horas minutos y segundos como no especificas AM/PM no tendras problemas
Responder Con Cita
  #7  
Antiguo 02-03-2007
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 22
acertij022 Va por buen camino
Lamentablemente no es la socucion supon que hay que calcular la diferncia entre:
20070302000001
20070301235959
Igualmente muchas gracias
Responder Con Cita
  #8  
Antiguo 02-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
El trabajo de fechas en delphi no tiene que ver con el formato usado en windows.

Bien es verdad que usando las variables ShortDateFormat de la unidad SysUtils, puedes mostrar una fecha del mismo modo que hace windows, pero también puedes usar tu método particular de mostrar una fecha como te ha dicho luisgutierrezb.

EncodeDateTime de la unidad DateUtils, te ayudará a crear las fechas y la respuesta de delphi.com.ar es la mejor.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 14-06-2007
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
Cita:
Empezado por Lepe
El trabajo de fechas en delphi no tiene que ver con el formato usado en windows.

Bien es verdad que usando las variables ShortDateFormat de la unidad SysUtils, puedes mostrar una fecha del mismo modo que hace windows, pero también puedes usar tu método particular de mostrar una fecha como te ha dicho luisgutierrezb.

EncodeDateTime de la unidad DateUtils, te ayudará a crear las fechas y la respuesta de delphi.com.ar es la mejor.

Saludos
Hola buen dia yo tengo un problema utilizando las fechas y quiero saber si alguien me puede dar una solucion mira estoy tratando de aumentar un mes cierta fecha por ejemplo 06/20/2007 al utilizar la funcion incmonths() el resultado que me da 07/18/2007 y yo lo que quiero que haga es que me incremente el mes y vuelva a caer en el mismo dia osea que el resultado debe ser 07/20/2007 si alguien me puede decir como solucionarlo gracias.
Responder Con Cita
  #10  
Antiguo 14-06-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por richy08
Hola buen dia yo tengo un problema utilizando las fechas y quiero saber si alguien me puede dar una solucion mira estoy tratando de aumentar un mes cierta fecha por ejemplo 06/20/2007 al utilizar la funcion incmonths() el resultado que me da 07/18/2007 y yo lo que quiero que haga es que me incremente el mes y vuelva a caer en el mismo dia osea que el resultado debe ser 07/20/2007 si alguien me puede decir como solucionarlo gracias.
Si no te funciona IncMonth pues podemos hacerlo a mano...
Coloca la siguiente función:
Código Delphi [-]
 
function IncMes(Fecha :TDate) :TDate;
var
  mes, dia, ano :Word;
begin
  decodedate(Fecha, ano, mes, dia);
  Inc(mes);
  Result := encodedate(ano, mes, dia);
end;
Luego podras usarla asi:
Código Delphi [-]
Fecha := IncMes(Fecha);
Y Listo, espero te sirva .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Resta de horas didier Varios 24 18-11-2010 23:11:54
REsta Fechas Juanito-Kun Firebird e Interbase 2 11-10-2005 20:52:23
Resta equivocada... jhonny Varios 6 26-09-2005 18:43:20
Resta de Tablas con SQL agova SQL 8 24-11-2003 21:20:25
Dias entre una fecha y la fecha del sistema afarenas Firebird e Interbase 1 30-09-2003 17:36:53


La franja horaria es GMT +2. Ahora son las 15:14:06.


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
Copyright 1996-2007 Club Delphi