[fpc-devel] TimeReFormat in FormatDateTime

petr.kristan at epos.cz petr.kristan at epos.cz
Tue Apr 8 17:16:09 CEST 2008


On Tue, Apr 08, 2008 at 04:32:30PM +0200, Michael Van Canneyt wrote:
> 
> 
> On Tue, 8 Apr 2008, petr.kristan at epos.cz wrote:
> 
> > I do no know exact reason use TimeReFormat (replacing 'm'->'n' in time
> > formating). But we cannot use this, because this breaks 'am/pm' and 'ampm' formating request.
> > And we get 'Illegal character in format string'.
> > 
> > Here is little patch, which disables this behaviour.
> 
> It should not be disabled, but fixed properly. 
> This code is there for a reason:
> 
> Normal time formatting is hh:nn (n = minutes). But Delphi explicitly
> allows also hh:mm for time, even though mm is the placeholder for month.
But this feature works without TimeReFormat hack. Here is piece of code
from dati.inc:

 'M': begin
       if lastformattoken='H' then
         begin
           if Count = 1 then
             StoreInt(Minute, 0)
           else
             StoreInt(Minute, 2);

         end
       else
         begin
           case Count of
              1: StoreInt(Month, 0);
              2: StoreInt(Month, 2);
              3: StoreString(ShortMonthNames[Month]);
              4: StoreString(LongMonthNames[Month]);
           end;
         end;
    end;

Next TimeReFormat cannot work correctly, because FormatString is case
insensitive and comparison "If Result[i]='m'" leaves this out of account.

Petr

> > Index: objpas/sysutils/dati.inc
> > ===================================================================
> > --- objpas/sysutils/dati.inc    (revision 10597)
> > +++ objpas/sysutils/dati.inc    (working copy)
> > @@ -569,13 +569,13 @@
> >  
> >     Function TimeReFormat(Const S : string) : string;
> >     // Change m into n for time formatting.
> > -   Var i : longint;
> > +   //Var i : longint;
> >  
> >     begin
> >       Result:=S;
> > -     For I:=1 to Length(Result) do
> > +     {For I:=1 to Length(Result) do //We cannot do that am/pm does not then work
> >         If Result[i]='m' then
> > -         result[i]:='n';
> > +         result[i]:='n';}
> >     end;
> >  
> >  var

-- 
Ing. Petr Kristan
.
EPOS PRO s.r.o., Bozeny Nemcove 2625, 530 02 Pardubice
tel: +420 466335223    Czech Republic (Eastern Europe) 
fax: +420 466510709



More information about the fpc-devel mailing list