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: 21
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: 26
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: 21
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 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
  #5  
Antiguo 02-03-2007
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 21
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
  #6  
Antiguo 02-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
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
  #7  
Antiguo 02-03-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
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
  #8  
Antiguo 03-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
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
  #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: 29
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
  #11  
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 jhonny
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 .

muchas gracias si me sirvio pero ahora tengo otro problema como saber si un numero es multiplo de 4 y cuantos dias trae el mes en el que esta la fecha
Responder Con Cita
  #12  
Antiguo 14-06-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
La función DaysInAMonth que se encuentra en la unidad DateUtils a partir de Delphi6 y DateUtil en Delphi5 te devolvera los dias de un mes indicándole también el año.

Así:
Código Delphi [-]
DiasDelMes := DaysInAMonth(2007, 6); //Esto te devolvera 30.

Esa función sabrá de antemano cuales son los años bisiestos de manera pues que no necesitaras calcular por aparte, si el año en curso es o no es bisiesto.
Pero en caso de que obligatoriamente necesites saber si es o no Bisiesto podrás usar la función IsInLeapYear que devuelve True en caso de que si lo sea y False en caso contrario.
__________________
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
  #13  
Antiguo 14-06-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
A bueno y si la cuestión no es de año bisiesto y todo el asunto, si no que solo quieres saber si un numero es multiplo de 4 o no, pues bastara con averiguar si ese numero dividido por 4 arrojara un resto de 0, un ejemplo:

Código Delphi [-]
 
if (16 mod 4 = 0) then
  ShowMessage('Es Multiplo de 4');
else
  ShowMessage('No es Multiplo de 4');
__________________
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
  #14  
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 jhonny
A bueno y si la cuestión no es de año bisiesto y todo el asunto, si no que solo quieres saber si un numero es multiplo de 4 o no, pues bastara con averiguar si ese numero dividido por 4 arrojara un resto de 0, un ejemplo:


Código Delphi [-]
if (16 mod 4 = 0) then
ShowMessage('Es Multiplo de 4');
else
ShowMessage('No es Multiplo de 4');



Muchas gracias jhonny me sirvio de mucha tu ayuda
Responder Con Cita
  #15  
Antiguo 03-08-2007
JAI_ME JAI_ME is offline
Miembro
 
Registrado: ene 2006
Posts: 188
Poder: 19
JAI_ME Va por buen camino
Restar fechas en formato numerico 20070701

Perdon por la intromicion en el foro pero tengo un problema similar

expongo mi caso

tengo un archivo .bdf el cual administro desde database desktop y uso un sql del mismo para hacer consultas, puedo hacer las consultas a mi gusto... hasta aqui muy bien...

Pero el problema surge cuando tengo que restar dos fechas en esta tabla
dentro del mismo sql ( el formato de la fecha que maneja la tabla es numerico osea "20070701 - 20070805", Fecha 1 y 2 respectivamente )

Eso da como resultado numerico dentro del sql 104 muy bien es el resultado numerico, pero me intereza el resultado de la resta entre las fechas osea 35 dias, alguien sabe como hacerlo en el mismo sql.... les agradeceria mucho su ayuda....
__________________
JaiMelendez
Responder Con Cita
  #16  
Antiguo 03-08-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Yo haría una conversión de esos números a variables de tipo TDateTime y usaría la función DaysBetween();

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #17  
Antiguo 03-08-2007
JAI_ME JAI_ME is offline
Miembro
 
Registrado: ene 2006
Posts: 188
Poder: 19
JAI_ME Va por buen camino
creo que esa seria una buena idea...
pero... no uso delphi, si no solamente sql y todas las operaciones las tengo que hacer con este...

muchas gracias por su ayuda
__________________
JaiMelendez
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 11:05:04.


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