![]() |
Datum zusammenbasteln mit Platzhalter ?
Moins !
In unserer Anwendung hats ne Zeitachse die in verschiedenen Varianten dargestellt werden kann also z.B. mm:ss oder hh:mm:ss oder dd:hh:mm oder oder ... Wir haben da so knapp 30 Presets aus denen man wählen kann. Nun wäre es aber eigentlich viel schöner wenn man dem User die Möglichkeit geben würde, selbst sein Format zu definieren. So nach dem Motto "%Y.%M %MM:%SS" und das Ergebnis wäre dann "2008.08 50:57" (Macht keinen Sinn, is abba auch nur nun Beispiel). Nun hat ich mir gedenkt das man das mittels Format ja lösen könnte. Aber da hatte ichmich zu früh gefreut denn Format hat ja seine definierten Platzhalter und keine selbst ausgedachten. Läuft das nun wirklich auf einen kleinen Parser hinaus, der die Zeile "%Y.%M %MM:%SS" Stück für Stück analysiert und dann in einen passenden String umschreibt? Oder hat jemand evtl. eine einfachere Idee? Es müsste nur recht universell sein, denn es sollte auch sowas gehen: "Du bist im Jahr %Y und es hat im Moment %HH Stunden ..". Und jetzt wo ich das schreibe fällt mir gerade ein ... Sollte das nicht mit StringReplace machbar sein !? :gruebel: |
Re: Datum zusammenbasteln mit Platzhalter ?
Hast du schon mal die Unit: "DateUtils" durchgestöbert ob da was für dich dabei ist???
Um eine Datumsausgabe nach eigenem ermessen zu formatieren, kannst du die Funktion " ![]() |
Re: Datum zusammenbasteln mit Platzhalter ?
Ok ich beantworte es mir selber :-D
Delphi-Quellcode:
Das tut ...
var erg : String;
begin erg := Edit1.Text; { %Y4 - Jahr (2008) %Y2 - Jahr (08) %M - Monat (04) %ML - Monat (April) %D - Tag (28) %h - Stunden %m - Minuten %s - Sekunden %ms - Millisekunden } erg := StringReplace(erg, '%Y4', FloatToStr(YearOf(Now)), [rfReplaceAll]); erg := StringReplace(erg, '%M', FloatToStr(MonthOf(Now)), [rfReplaceAll]); erg := StringReplace(erg, '%D', FloatToStr(DayOf(Now)), [rfReplaceAll]); erg := StringReplace(erg, '%h', FloatToStr(HourOf(Now)), [rfReplaceAll]); erg := StringReplace(erg, '%m', FloatToStr(MinuteOf(Now)), [rfReplaceAll]); erg := StringReplace(erg, '%s', FloatToStr(SecondOf(Now)), [rfReplaceAll]); erg := StringReplace(erg, '%ms', FloatToStr(MilliSecondOf(Now)), [rfReplaceAll]); Label1.Caption := erg Aber wenn jemand noch was schnelleres hat ... Is immer willkommen. |
Re: Datum zusammenbasteln mit Platzhalter ?
Moin !
@lbccaleb : Ja die DateUtils kenne ich. Habe ja auch in meinem Beispiel was davon verwendet. |
Re: Datum zusammenbasteln mit Platzhalter ?
HI,
das sollte alles über StringReplace machbar sein. Du solltest aber darauf achten, dass du im Eingangsstring alle FormateDateTime-Platzhalter in irgendwelche anderen Zeichenketten umwandelst um keine ungewünschten ergebnisse zu bekommen. Danach solltest du diese auch wieder zurückersetzen, sodass der User wieder seinen String zu sehen bekommt. Bernhard PS: Ich würde ![]() EDIT: Mit deiner Variante gehts auch (... roter Kasten ...) |
Re: Datum zusammenbasteln mit Platzhalter ?
Wie schon geschrieben Format() oder hier FormatDateTime()
|
Re: Datum zusammenbasteln mit Platzhalter ?
FormatDateTime werde ich mir noch ansehen.
Danke für den Tipp ! |
Re: Datum zusammenbasteln mit Platzhalter ?
Nachtrag ... Ach du meine Güte ...
FormatDateTime kann ja noch viel mehr als ich mir hätte wünschen können :thumb: :thumb: :thumb: ![]() Das erfüllt alle meine Anforderungen. Nochmals vielen Dank für den Hinweis !! :dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz