Einzelnen Beitrag anzeigen

CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#1

Bug in XE-RTL bzgl. russischem LongDateFormat.

  Alt 10. Okt 2012, 16:24
Hallo,

Könnte mal kurz eure Hilfe brauchen, einen Bug zu verifizieren, bevor ich ihn ins QC stelle. Ich habe nur XE, und wenn ich ihn nicht als auch in XE3 vorhanden einstelle, passiert meiner Erfahrung nach eh nichts damit...

Es geht um das russische LongDateFormat. Das Betriebssystem gibt das korrekt wieder, aber die SysUtils verpfuscht in FixDateSeparator ein Zeichen. Ausgabe des Testprogrammes unten unter Delphi XE:

Zitat:
dddddd: 10 Октябрь 2012 г/
LongDateFormat: d MMMM yyyy 'г/'
EnumDateFormats: d MMMM yyyy 'г.'
Klar ist die RTL-Version (ersten beiden Zeilen) falsch und unterscheidet sich von der API-Version (dritte Zeile).


Delphi-Quellcode:
function EnumDateFormatsProc(lpDateFormatString: PChar): boolean; stdcall;
begin
   Form1.memo2.Lines.Add('EnumDateFormats: ' + lpDateFormatString);
end;

procedure TForm1.FormShow(Sender: TObject);
var
   fs: TFormatSettings;
   i: integer;
   sLocale: string;
   l: LCID;
begin
   for i := 0 to 2 do begin
      case i of
         0: sLocale := 'en-US';
         1: sLocale := 'de-DE';
         2: sLocale := 'ru-RU';
      end;
      fs := TFormatSettings.Create(sLocale);
      l := LocaleNameToLCID(PChar(sLocale), 0);
      memo2.Lines.Add(sLocale);
      memo2.Lines.Add(IntToHex(l, 8));
      memo2.Lines.Add('dddddd: ' + FormatDateTime('dddddd', Now, fs));
      memo2.Lines.Add('LongDateFormat: ' + fs.LongDateFormat);
      EnumDateFormats(@EnumDateFormatsProc, l, DATE_LONGDATE);
      memo2.Lines.Add('');
   end;
end;
  Mit Zitat antworten Zitat