Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datum zusammenbasteln mit Platzhalter ? (https://www.delphipraxis.net/118552-datum-zusammenbasteln-mit-platzhalter.html)

moelski 10. Aug 2008 08:54


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:

lbccaleb 10. Aug 2008 09:03

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 "Hier im Forum suchenFormat" verwenden!

moelski 10. Aug 2008 09:04

Re: Datum zusammenbasteln mit Platzhalter ?
 
Ok ich beantworte es mir selber :-D

Delphi-Quellcode:
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
Das tut ...
Aber wenn jemand noch was schnelleres hat ... Is immer willkommen.

moelski 10. Aug 2008 09:06

Re: Datum zusammenbasteln mit Platzhalter ?
 
Moin !

@lbccaleb : Ja die DateUtils kenne ich. Habe ja auch in meinem Beispiel was davon verwendet.

rollstuhlfahrer 10. Aug 2008 09:07

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 Delphi-Referenz durchsuchenFormatDateTime vorschlagen
EDIT: Mit deiner Variante gehts auch (... roter Kasten ...)

mkinzler 10. Aug 2008 09:07

Re: Datum zusammenbasteln mit Platzhalter ?
 
Wie schon geschrieben Format() oder hier FormatDateTime()

moelski 10. Aug 2008 09:10

Re: Datum zusammenbasteln mit Platzhalter ?
 
FormatDateTime werde ich mir noch ansehen.

Danke für den Tipp !

moelski 10. Aug 2008 09:12

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:
http://www.delphibasics.co.uk/RTL.as...FormatDateTime

Das erfüllt alle meine Anforderungen.

Nochmals vielen Dank für den Hinweis !!

:dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz