For nyligt var der et par indlæg på DAPUG omkring datoformat og om hvordan man sikrede sig at en streng-værdi blev konverteret til en dato - uanset hvilken landeindstiling den pågældende Windows har.
Efter som min blog er på dansk, må jeg formode at flertallet af mine læsere har dansk som deres sprog i Windows, så mit eksempel vil omhandle håndtering af en streng, der som udgangspunkt er formateret efter den engelske standard for datoformatering.
Det første vi har brug for, er en implementering af C++ macroen MAKELANGID. Den findes i nyere versioner af Delphi (2009 og frem ,tror jeg), men her kommer den for en sikkerheds skyld:
function MAKELANGID(Language : Word; SubLanguage: WORD = SUBLANG_DEFAULT): WORD; inline;begin
Result := WORD(SubLanguage shl 10) or Language;
end;
|
Derefter skal vi have fat i den "engelske version" af TFormatSettings og have den brugt. I mit lille eksempel viser jeg blot resultatet med en ShowMessage:
procedure TFormMain.FormCreate(Sender: TObject);var
aDate: TDateTime;
Locale: TFormatSettings;
begin;
{$IF CompilerVersion > 18.5} // Delphi 2007
Locale := TFormatSettings.Create(MAKELANGID(LANG_ENGLISH));
{$ELSE}
GetLocaleFormatSettings(MAKELANGID(LANG_ENGLISH), Locale);
{$IFEND}
aDate := StrToDate('10/28/2011', Locale);
ShowMessage(FormatDateTime(FormatSettings.LongDateFormat, aDate, Locale));
end;
|
Her er resultatet så :
Variable "Locale: TFormatSettings;" kan således bruges i alle Delphis funktioner til at konvertere tal og datoer til- og fra en streng.
Jens Borrisholt
Ingen kommentarer:
Send en kommentar