[fpc-devel] TimeReFormat in FormatDateTime

Michael Van Canneyt michael at freepascal.org
Tue Apr 8 17:23:04 CEST 2008



On Tue, 8 Apr 2008, petr.kristan at epos.cz wrote:

> 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.

Did you test it ? If you can confirm that hh:mm:ss works correctly, then
I'll apply the patch.

Michael.



More information about the fpc-devel mailing list