Autor Téma: Nepresne DateUtils.MinutesBetween  (Přečteno 1246 krát)

zokzok

  • Host
Nepresne DateUtils.MinutesBetween
« kdy: 28-06-2012, 11:35:02 »
Pouzivam DateUtils.MinutesBerween na zistenie poctu minut medzi dvoma casmi, ale vracia to nepresne udaje (75,75,76,78). Naproti tomu moja vlastna verzia vracia spravne udaje (75,76,77,78). Co s tym? Tesil som sa ze budem moct pouzit standardnu funkciu z dateutils. Ale na co je taka zakladna kniznica ked nevracia spolahlive vysledky, clovek aby sa potom patlat so vsetkym. Inak Delphi7 / win 7 64 bit, neviem ci to ma suvis.


function MyMinutesBetween(const ANow : TDateTime; const AThen : TDateTime) : integer;
begin
  result := round( (ANow - AThen) * 24 * 60 );
end;

... testovaci kod:

  ShowMessageFmt(
    'dateutils.MinutesBetween: %d %d %d %d',[
    MinutesBetween(EncodeDateTime(2009,3,22,8,0,0,0),EncodeDateTime(2009,3,22,6,45,0,0)), // 06:45-08:00 = 75 minut
    MinutesBetween(EncodeDateTime(2009,3,22,8,1,0,0),EncodeDateTime(2009,3,22,6,45,0,0)), // 06:45-08:01 = 75 minut
    MinutesBetween(EncodeDateTime(2009,3,22,8,2,0,0),EncodeDateTime(2009,3,22,6,45,0,0)), // 06:45-08:02 = 76 minut
    MinutesBetween(EncodeDateTime(2009,3,22,8,3,0,0),EncodeDateTime(2009,3,22,6,45,0,0))  // 06:45-08:03 = 78 minut
  ]);

  ShowMessageFmt(
    'moja implementacia: %d %d %d %d',[
    MyMinutesBetween(EncodeDateTime(2009,3,22,8,0,0,0),EncodeDateTime(2009,3,22,6,45,0,0)), // 06:45-08:00 = 75 minut
    MyMinutesBetween(EncodeDateTime(2009,3,22,8,1,0,0),EncodeDateTime(2009,3,22,6,45,0,0)), // 06:45-08:01 = 76 minut
    MyMinutesBetween(EncodeDateTime(2009,3,22,8,2,0,0),EncodeDateTime(2009,3,22,6,45,0,0)), // 06:45-08:02 = 77 minut
    MyMinutesBetween(EncodeDateTime(2009,3,22,8,3,0,0),EncodeDateTime(2009,3,22,6,45,0,0))  // 06:45-08:03 = 78 minut
  ]);



Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1127
  • Karma: 42
    • Verze Delphi: 7, 2010
Re:Nepresne DateUtils.MinutesBetween
« Odpověď #1 kdy: 28-06-2012, 12:51:01 »
zda se, ze tento bug je znamy v QC a nejmin do D2010 nebyl odstranen :(
nevim, jak v novejsich, zrejme v XE by to melo byt opravene

pokud pridas k 2. casu 1 milisekundu, tak je to ok,
duvodem chyby je asi Trunc
« Poslední změna: 28-06-2012, 12:52:43 od <z> »

zokzok

  • Host
Re:Nepresne DateUtils.MinutesBetween
« Odpověď #2 kdy: 28-06-2012, 14:16:14 »
Co je to QC?

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1127
  • Karma: 42
    • Verze Delphi: 7, 2010
Re:Nepresne DateUtils.MinutesBetween
« Odpověď #3 kdy: 28-06-2012, 16:44:27 »
QualityCentral od Embarcadero produktu
http://qc.embarcadero.com/wc/qcmain.aspx

hlasi se tam bugy ;)

tj. budes muset pouzivat svoji funkci nebo nejaky workaround,
pod D7 to jinak spravne nebude
« Poslední změna: 28-06-2012, 16:45:59 od <z> »