Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Datum im richtigen Format


NetSpider - Mi 07.02.07 21:39
Titel: Datum im richtigen Format
Hi,

ich arbeite im Moment an einem Datenbank-Progamm. Es koennen auch Textdateien importiert werden - in dem sich auch ein Datum befindet. Dieses Datum liegt im Format 'mmm dd, yyyy' vor. Wie bekomme ich das jetzt in ein richtiges (von den Systemeinstellungen/Spracheinstellungen) abhaengiges Datumsformat?

Mittlerweile bin ich soweit, dass ich die einzelnen Bestandteile in Strings zerlegt hab.

Delphi-Quelltext
1:
var Day, Month, Year: String;                    


In Day steht dd
in Month steht mmm
und in Year kommt yyyy

Leider kann ich Month nicht direkt in einen Integer umwandeln (da 'Jan', 'Feb')...
Wie kann ich das jetzt elegant in einen Integer-Wert umwandeln?

Klar koennte ich eine Abfrage machen, allerdings bin ich mir nich sicher, ob alle Windows-Versionen 'mmm' gleich interpretieren/ausgeben...
z.B. Deutsch: mmm = Dez, Englisch: mmm = Dec
somit waere eine If-Abfrage mehr als unvorteilhaft, da ja alles noch mit einer Datenbank gekoppelt ist.

Gibt es eine Date-Funktion die 'Jan' nach '01', 'Feb' nach '02', usw. umwandelt (systemabhaengig)?

Vielen Dank - NetSpider


NetSpider - Do 08.02.07 05:40

Habs jetzt irgendwie auf eigene Faust gemacht...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function TImportRecord.DateToFormat(ImportDate: string): String;
var Day, Month, Year, i: Integer;
    Buffer: String;
begin
Month := 1;
Buffer := Unit1.MainForm.GetWord(ImportDate, 1' ');
Day := StrToInt(Copy(Unit1.MainForm.GetWord(ImportDate, 2' '), 1, Length(Unit1.MainForm.GetWord(ImportDate, 2' '))-1));
Year := StrToInt(Unit1.MainForm.GetWord(ImportDate, 3' '));

for i := 1 to 12 do
if UpperCase(ShortMonthNames[i]) = UpperCase(Buffer) then begin
Month := i;
Break;
end;   // hier koennte man noch: else if i = 12 then begin Result := ''; exit; end;

Result := DateToStr(EncodeDate(Year, Month, Day));
end;


Das Eingabeformat ist: 'mmm dd, yyyy' -> raus kommt ein Systemabhaeniges Datum (hoffe ich mal!)

Und die Funktion GetWord ist folgende:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Function GetWord(Text: String; WordPos: Word; Seperator: String): String;
var
 p  : PChar;
begin
  p  := PChar(Text);
  repeat
    Dec(WordPos);
    while p^ <> Seperator do
    begin
      if WordPos = 0 then
       Result := Result + p^;
      Inc(p);
    end;
    if WordPos = 0 then Exit;
    Inc(p);
  until p^ = Seperator;
end;


Viele Gruesse, NetSpider
(Ja, manchmal muss man nur ne Nacht drueber schlafen!)