Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - zuviele Tage


Schokolade - Sa 28.11.20 00:36
Titel: zuviele Tage
Hallo,
entweder habe ich riesige Tomaten auf den Augen oder es gibt ein riesiges Problem.
Folgende Aufgabe: wandle den String: '2020.07.23' mittels einer Function um in: 23.07.2020.
Man sollte meinen das ist einfach, aber ich bekomme immer den fehlerhaften String 23.07.23.2020 wieder, die Tagesnummer 23 ist doppelt.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
FUNCTION DateOfInternationalDate(iDate: String): String;
// internationalen Datumsstring umwandeln: 2020.07.23 -> 23.07.2020
// fehlerhaftes Resultat ist: 23.07.23.2020
var
  year, month, day: String;
Const
  Dot='.';
BEGIN
  year  := Copy(iDate,1,4);
  month := Copy(iDate,6,7);
  day   := Copy(iDate,9,10);
  Result:=day+Dot+month+Dot+year;
END;

procedure TForm1.Button1Click(Sender: TObject);
begin
  label2.caption:=DateOfInternationalDate(label1.Caption); //  bzw probiert label2.caption:=DateOfInternationalDate('2020.07.23')
end;

Ich habe diverse Dinge ausprobiert, googeln bringt da auch nicht weiter. Eure Meinung ist geschätzt
Rolf

Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt


Schokolade - Sa 28.11.20 00:45

hier noch ein Nachtrag, ein Screenshot.


Ralf Jansen - Sa 28.11.20 00:49

Du solltest dir einfach mal den Inhalt der Variablen year, month, day ansehen. Dann kommst du wahrscheinlich selbst drauf.

Hint: Du hast falsche Erwartungen an den 3.ten Parameter von Copy. Man sollte seine Erwartungen immer durch debuggen prüfen. Und wenn dann was nicht erwartungskonformes passiert weiß man relativ genau aus welcher Ecke das kommt und kann die Doku zu rate ziehen.


Schokolade - Sa 28.11.20 09:38

Danke, Du hattest vollkommen recht, ich aber auch, mit den Tomaten auf den Augen!
Interessant ist, wie meine Erwartungshaltung zustande kam. Ich war einige Zeit mit grafischen Befehlen beschäftigt, wo eine absolute Positionierung üblich war.
Schönes Wochenende wünscht
Rolf


jaenicke - Sa 28.11.20 11:29

Viel einfacher ist schlicht die internen Funktionen zu verwenden:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  MyFormatSettings: TFormatSettings;
begin
  MyFormatSettings := TFormatSettings.Create('DE-de');
  MyFormatSettings.ShortDateFormat := 'yyyy.mm.dd';
  ShowMessage(DateToStr(StrToDate('2020.07.23', MyFormatSettings)));
end;