Конференция "KOL" » Time2StrFmt - глюк или сам дурак? [Delphi, Windows]
 
  • roms (19.10.11 17:43) [0]
    В общем столкнулся с тем, что Time2StrFmt('HH:mm:ss', mD) вместо часов ставит минуты.
    Отладка показала, что виновник - DateTime2SystemTime( D, ST ) которая на acm.
    По крайней мере минуты, которые были в mD, в ST становились часами...
    Поправьте, если что не так.
  • Vladimir Kladov © (20.10.11 18:34) [1]
    Проверка показала, что все в порядке, приведите, пожалуйста, минимальное приложение, в котором воспроизводится неверное поведение.
  • roms (21.10.11 15:02) [2]
    В приложении есть такие функции:

    const
     { Units of time }
     SecPerDay = 86400;
     SecPerHour = 3600;
     SecPerMinute = 60;
     HoursPerDay   = 24;
     MinsPerHour   = 60;
     SecsPerMin    = 60;
     MSecsPerSec   = 1000;
     MinsPerDay    = HoursPerDay * MinsPerHour;
     SecsPerDay    = MinsPerDay * SecsPerMin;
     MSecsPerDay   = SecsPerDay * MSecsPerSec;
    //==============================================================================
    function EncTime(Hour, Min, Sec, MSec: Word): TDateTime;
    Var
    Time: TDateTime;
    begin
     if (Hour < HoursPerDay) and (Min < MinsPerHour) and (Sec < SecsPerMin)
         and (MSec < MSecsPerSec) then
     begin
       Time := (Hour * (MinsPerHour * SecsPerMin * MSecsPerSec) +
                Min * (SecsPerMin * MSecsPerSec) +
                Sec * MSecsPerSec +
                MSec) / MSecsPerDay;
       Result := Time;
     end;
    end;
    //==============================================================================
    function SecondToTime(const Seconds: Cardinal): Double;
    var
     ms, ss, mm, hh: Cardinal;
    begin
     hh := (Seconds mod SecPerDay) div SecPerHour;
     mm := ((Seconds mod SecPerDay) mod SecPerHour) div SecPerMinute;
     ss := ((Seconds mod SecPerDay) mod SecPerHour) mod SecPerMinute;
     ms := 0;
     Result := EncTime(hh, mm, ss, ms);
    end;
    //==============================================================================



    Надо было результат SecondToTime(sC) получить в текстовом виде.
    Выражение типа:

    Time2StrFmt('HH:mm:ss', SecondToTime(sC))


    и выдавало такой результат...
  • Vladimir Kladov © (21.10.11 20:03) [3]

    program Project1;

    uses
     KOL;

    begin
       ShowMessage( Time2StrFmt( 'HH:mm:ss', Now ) );
    end.



    Вот такой код выше время показывает правильно.

    Попробуйте

    Time2StrFmt( 'HH:mm:ss', SecondToTime( sC ) + Trunc(Now) )

  • roms (21.10.11 21:29) [4]
    ОК. Хотя и сделал уже по другому, но попробую обязательно.
  • Teobaldo (25.11.15 02:46) [5]
    Удалено модератором
 
Конференция "KOL" » Time2StrFmt - глюк или сам дурак? [Delphi, Windows]
Есть новые Нет новых   [118621   +7][b:0][p:0.002]