![]() |
Delphi-Version: XE4
Maske für FormatMaskText
Hallo,
ich möchte Strings in der Form "2015-02-12_14-39-52" in "2015-02-12 - 14:39:52" umformatieren. Dazu würde ich gerne die FormatMaskText-Funktion nutzen. Leider scheitere ich grade am zusammenstellen der Maske. Was ich bisher habe (Testcode):
Delphi-Quellcode:
Mein Ergebnis sieht dann so aus: "2015-02-12 - : : "
s1 := '2015-02-12_14-39-52';
s2 := FormatMaskText('CCCC-CC-CC - CC:CC:CC;C;C', s1); ShowMessage(s2); Irgendwas läuft da also noch schief und ich habe grade keine Ahnung was genau. Hat jemand zufällig Erfahrungen beim Erstellen der Masken und kann mir hier grade auf die Sprünge helfen? |
AW: Maske für FormatMaskText
Muss es denn FormatMaskText sein?
Ich würde ein paar Zeilen Schreiben um den properitären String in ein TDateTime zu überführen und dann mit FormatDateTime das dan wieder ausgeben. |
AW: Maske für FormatMaskText
Dachte eigentlich das das der einfachste Weg wäre, aber scheinbar sieht es nicht danach aus. Wie würdest du denn den gegebenen String in ein TDateTimeFormat kriegen?
|
AW: Maske für FormatMaskText
FormatMaskText ist ja mega kompliziert? Man kann sich ja zum Beispiel eine eigene function erstellen (uses DateUtils):
Delphi-Quellcode:
function ExtractDate(const Value: string; const Default: TDateTime): TDateTime;
var AYear, AMonth, ADay, AHour, AMinute, ASecond: word; begin AYear := StrToIntDef(Copy(Value, 1, 4), 0); AMonth := StrToIntDef(Copy(Value, 6, 2), 0); ADay := StrToIntDef(Copy(Value, 9, 2), 0); AHour := StrToIntDef(Copy(Value, 12, 2), 0); AMinute := StrToIntDef(Copy(Value, 15, 2), 0); ASecond := StrToIntDef(Copy(Value, 18, 2), 0); if IsValidDateTime(AYear, AMonth, ADay, AHour, AMinute, ASecond, 0) then Result := EncodeDateTime(AYear, AMonth, ADay, AHour, AMinute, ASecond, 0) else Result := Default; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(DateTimeToStr(ExtractDate('2015-02-12_14-39-52', 0))); end; |
AW: Maske für FormatMaskText
Danke für eure Antworten. :)
Da ich den String nur zur besseren Lesbarkeit umformatiere, habe ich mich jetzt für diese Lösung entschieden:
Delphi-Quellcode:
Bin aber trotzdem noch an einer Lösung via FormatMaskText interessiert falls jemand noch eine Idee hat.s := '2015-02-12_14-39-52'; sDate := Copy(s, 1, Pos('_', s) - 1); sTime := Copy(s, Pos('_', s) + 1, Length(s)); sTime := StringReplace(sTime, '-', ':', [rfReplaceAll, rfIgnoreCase]); ShowMessage(sDate + ' - ' + sTime); |
AW: Maske für FormatMaskText
Findest du es nicht etwas seltsam, dass das Speichern eines Wertes abhängig von der Bearbeitung im UI ist?
Du hast einen Zeitwert, dann verarbeite/speicher den auch als solchen in einem
Delphi-Quellcode:
.
TDateTime
Für die Bearbeitung erstellt man sich dann einen Konverter, der die Daten für die Bearbeitung so aufbereitet, dass diese nun in der gewünschten Art und Weise bearbeitet werden können und eben auch wieder zurück in das eigentliche Datenformat. Das Speichern eines solchen Wertes erfolgt dann auf die gleiche Art und Weise (mit einem Konverter). Auf einmal wird das Handling der unterschiedlichsten Datentypen logisch, eindeutig und einfach. |
AW: Maske für FormatMaskText
Zitat:
Hier mal ein Beispiel für die richtige Verwendung:
Delphi-Quellcode:
ergibt
s1 := '2015-02-12_14-39-52';
{ alle Formatierungszeichen löschen } s1 := StringReplace(s1, '-', '', [rfReplaceAll]); s1 := StringReplace(s1, '_', '', [rfReplaceAll]); { s1 ist jetzt '20150212143952' } s2 := FormatMaskText('0000-00-00 - 00:00:00;0; ', s1);
Delphi-Quellcode:
'2015-02-12 - 14:39:52'
|
AW: Maske für FormatMaskText
Zitat:
Zitat:
|
AW: Maske für FormatMaskText
Zitat:
Code:
heisst, dann macht es bumm?
aaaa-aa-aa_aa-aa-aa
Ist es nicht eher so, dass du einen Ordner erwartest, der in seinem Namen einen Zeitpunkt verschlüsselt hat und somit eben doch ein
Delphi-Quellcode:
repräsentiert?
TDateTime
Das meinte ich mit dem Konverter beim Speichern ... |
AW: Maske für FormatMaskText
Nein, wenn ein Ordner nicht ins Schema passt wird im UI "Zeitpunkt unbekannt" angezeigt. Auch damit kann ich weiterarbeiten, da intern der reale Ordnername verwendet wird.
[EDIT] Aber in einem hast du Recht: Natürlich verwende ich den Ordnernamen um einen Zeitstempel zu speichern und später wieder auszulesen. So kann der Benutzer im Zweifelsfall den Ordner leichter im Dateisystem wiederfinden als bei einem kryptischen Namen wie "1234567890" der absolut nichtssagend ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 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 by Thomas Breitkreuz