Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-12-2009
Jose Roman Jose Roman is offline
Miembro
 
Registrado: jul 2006
Ubicación: Colombia
Posts: 361
Poder: 18
Jose Roman Va por buen camino
Question Funcion MinutesBetween...

Hola a todos..
Resulta que estoy realizando una comparacion entres dos TDateTime pero tengo una diferencia de un minuto (deberia dar 600 y no 599), habra fallas en esta funcion y que podria hacer para solucionar esto?, probe con HoursBetween y tambien hay una hora de diferencia deberia ser 10 y no 9.
Gracias por su ayuda dejo codigo fuente.

Código Delphi [-]
procedure TForm1.btn1Click(Sender: TObject);
begin
  lbl1.Caption := IntToStr(MinutesBetween(StrToDateTime('06/12/2009 19:00'),StrToDateTime('06/12/2009 09:00')));
end;
Responder Con Cita
  #2  
Antiguo 06-12-2009
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
esto.... ¿y los segundos en la hora?.... ¿y los milisegundos ?

Delito tiene decir que esas rutinas fallan
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 08-12-2009
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
Hombre, muy normal, muy normal, esto no es:

Código Delphi [-]
 Memo1.Lines.add(DateTimeToStr(StrtoTime('12:00'))+' - '+DateTimeToStr(StrtoTime('13:00')));
 Memo1.Lines.add(IntToStr(MinutesBetween(StrToTime('12:00'), StrToTime('13:00'))));
 Memo1.Lines.add(DateTimeToStr(StrtoTime('13:00'))+' - '+DateTimeToStr(StrtoTime('14:00')));
 Memo1.Lines.add(IntToStr(MinutesBetween(StrToTime('13:00'), StrToTime('14:00'))));

Resultado:
Cita:
30/12/1899 12:00:00 - 30/12/1899 13:00:00
59
30/12/1899 13:00:00 - 30/12/1899 14:00:00
60

Última edición por yapt fecha: 08-12-2009 a las 13:38:00. Razón: El resultado del Memo1, no se correspondia con el código (le había dado la vuelta para ver si influia en algo). :-)
Responder Con Cita
  #4  
Antiguo 08-12-2009
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Sí, tienes razón, para mi no es muy normal andar utilizando la fecha base del calendario para realizar diferencias de horas.

¿por qué no miras la diferencia entre las 23:00 y las 1:00 con tu código anterior? eso es más ameno

En resumen: Usa formato de fecha y hora siempre. No dejes los milisegundos en olvido si quieres precisión de 1 segundo (ten en cuenta que un milisegundo es el culpable de tener un segundo menos en el resultado, un minuto menos, una hora menos ... )

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 09-12-2009
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
Pues ya me ilustraras cuando tengas un rato, porque no te entiendo. :-) jejeje....

Como podemos hacer que esas funciones hagan lo que tienen que hacedr de forma correcta (desde un punto de vista "humano") ?

La verdad es que utilizo poco esas funciones. Siempre trabajo en minutos o segundos (para mí, habitualmente, las fechas no son necesarias, por eso guardo solo segundos o minutos -integer- y opero con ellos de forma directa y con mis propias funciones)

Salu2.
Responder Con Cita
  #6  
Antiguo 09-12-2009
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
ah, perdon.

Lo normal es usar la archifamosa función Now() para tenerlo todo, la fecha, hora y milisegundos, después si quieres cambiar un dato de la fecha, tiras de la unidad dateutils:
- recodeDate
- recodeTime
- encodeDateTime
- decodeDatetime

- dayOf
- monthOf
- yearOf

- incMonth
- incDay
- incHour
- incMinutes
- ...
(revisa la ayuda de DateUtils)

como ves tienes un monton de rutinas para trabajar cómodamente sin tener que codificar con string las fechas y horas.

Al grano en tu ejemplo:
Código Delphi [-]
var vieja, nueva :Tdatetime;
     min : int64; // creo este es el tipo que devuelve minutesbetween
begin
  vieja := now(); 
  vieja := RecodeTime(vieja, 12, 0, 0, 0); // Hora al mediodía; minutos, segundos y milisegundos a cero (porque me da la gana  )
  nueva := RecodeTime(vieja, 13, 0, 0, 0 );
  min := MinutesBetween(nueva, vieja);

Si no has tenido problemas hasta ahora, es porque no has calculado diferencias de horas estando de por medio el cambio de fecha, por ejemplo, desde las 23:00 hasta la 1:00 no van 2 horas de diferencia, Delphi te dirá que van 22 horas. Al no considerar la fecha, Delphi usa la misma fecha (30/12/1899 1:00 hasta el 30/12/1899 23:00) calculando la diferencia al revés, desde la 1 de la madrugada hasta las 23:00 horas de ese mismo día

Al principio crees que una rutina como incDay es una tontería, es sólo sumar un día a la fecha anterior pero,¿y si el año es bisiesto? ¿o no lo es?, obviamente todos esos "peros" están ya controlados en esas rutinas.

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 09-12-2009
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
Ok... acabaramos.

Entonces podemos resumir el asunto en que el problema está en la función
'StrtoTime', pero no en 'MinutesBetween' (que es, también, de dateutils).

Aclarado queda.

Salu2.
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
Funcion ABS brandolin SQL 5 24-01-2009 14:53:38
Función o q? Veanny Internet 2 21-02-2008 21:43:40
Funcion fafita Varios 7 25-01-2008 16:03:40
Problemas con MinutesBetween romansiux Varios 4 21-05-2005 14:27:56
funcion agora18 SQL 1 06-10-2003 07:18:30


La franja horaria es GMT +2. Ahora son las 18:10:18.


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