Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Datum anhand Format umwandeln (https://www.delphipraxis.net/174762-datum-anhand-format-umwandeln.html)

Hausmarke 8. Mai 2013 14:49

Datum anhand Format umwandeln
 
Hallo Liebe Gemeinde :)

ich habe das problem, das ich aus einer datei einen string auslese die ein Datum enthält, dazu ist auch jeweils das Format hinterlegt:
beispiel:
datum: 20130705
format: yyyymmdd

Wenn das Format immer gleich bleiben würde, könnte man das mit einer einfachen stringmanipulation handhaben.
Dem ist aber nicht so :lol: wäre ja auch langweilig.

Deshalb übergebe ich das hinterlegte Format und möchte nun anhand dessen, das datum einlesen und in einem anderen Format wieder ausgeben.

Wie könnte man dies umsetzen?

Mein ansatz ist folgender:
Delphi-Quellcode:
var datum : TDatetime;
content : string;
.
.
shortdateformat := yyyymmdd;
Datum := strtodate(content); <- hier kommt jetzt der fehler, das 20130705 kein Datum ist

DeddyH 8. Mai 2013 15:00

AW: Datum anhand Format umwandeln
 
AFAIK brauchst Du zwingend einen DateSeparator in Deinem String. Etwas umständlich, aber das hier klappt:
Delphi-Quellcode:
var
  Settings: TFormatSettings;
  d: TDate;
  s: string;
begin
  s := '20130705';
  Insert('/', s, 5);
  Insert('/', s, 8);
  Settings.ShortDateFormat := 'yyyy/mm/dd';
  Settings.DateSeparator := '/';
  d := StrToDate(s, Settings);
  ShowMessage(FormatDateTime('dd.mm.yyyy', d));
end;

Hausmarke 8. Mai 2013 15:14

AW: Datum anhand Format umwandeln
 
danke für die schnelle antwort.

leider löst das mein problem nicht ganz.
durch stringmanipulation einen separator einzufügen und dann umzuwandeln hatte ich schon durch gespielt.

Allerdings hatte ich mich nicht spezifisch dazu geäußert, dass das Format des eingelesenen Datums variieren kann.

beispiel:
datum: 20130705
format: yyyymmdd

und in einer anderen zeile/spalte steht dann
Datum: 130225
format: yymmdd

deshalb funktioniert die variante mit der Stringmanipulation hier nicht.
Im grunde könnte man jetzt diese beiden varianten statisch programmieren. Allerdings muss ich davon ausgehen, das sich das Format in einer anderen zeile/spalte ändert.
deshalb wäre meine idee:
man liest das datum in dem vorgegebenen Format ein, und gibt es dann im gewünschten format wieder aus.

ich schätze jetzt wirds noch umständlicher.

p80286 8. Mai 2013 15:14

AW: Datum anhand Format umwandeln
 
Zitat:

Zitat von Hausmarke (Beitrag 1214728)
Wenn das Format immer gleich bleiben würde, könnte man das mit einer einfachen stringmanipulation handhaben.
Dem ist aber nicht so :lol: wäre ja auch langweilig.

Ich denke umgekehrt wird ein Schuh daraus. Wenn das Datumsformat in der Datei mehrfach wechselt würde ich entsprechend der Formatangabe Jahr, Monat, Tag auslesen und dann einen gültigen Datumsstring zusammensetzen.
Dieser wird dan mit strtodate, trystrtodate oder was auch immer Du nutzen willst zu einem Datum gemacht.

Gruß
K-H

DeddyH 8. Mai 2013 15:31

AW: Datum anhand Format umwandeln
 
So hatte ich auch gedacht. Da das Format ja in dem Moment bekannt ist, muss man eben den String manipulieren und das ShortDateFormat entsprechend setzen. Etwas anderes fällt mir auch nicht ein.

p80286 8. Mai 2013 15:48

AW: Datum anhand Format umwandeln
 
Zitat:

Zitat von DeddyH (Beitrag 1214735)
... und das ShortDateFormat entsprechend setzen.

Warum? wenn ich den string schon in den Fingern habe, dann kann ich auch gleich das "richtige" Format basteln.
Jedes Mal das Datumsformat anpassen scheint mir zu aufwendig?

Gruß
k-H

DeddyH 8. Mai 2013 16:23

AW: Datum anhand Format umwandeln
 
Ob ich String-Manipulationen am Eingangsstring oder am FormatString vornehme, sollte sich im Aufwand nicht unterscheiden, oder?

Sir Rufo 8. Mai 2013 18:58

AW: Datum anhand Format umwandeln
 
Nur mal so als Hinweis: Einfach mal den Source zu Delphi-Referenz durchsuchenStrToDate anschauen und man spart sich jede Überlegung mit den FormatSettings irgendwelche exotischen Datums Formatierungen zu übergeben :mrgreen:

Hausmarke 14. Mai 2013 08:22

AW: Datum anhand Format umwandeln
 
leider habe ich nichts vordefiniertes gefunden was mein Problem lösen konnte.
Ich habe mir nun eine eigene kleine function gebastelt die mir das Ausgabeformat auseinander nimmt und das Datum dann dementsprechend zusammensetzt und umwandelt.

besten dank an alle Helfer

mkinzler 14. Mai 2013 08:45

AW: Datum anhand Format umwandeln
 
Zitat:

leider habe ich nichts vordefiniertes gefunden was mein Problem lösen konnte.
Zitat:

Zitat von Sir Rufo
Nur mal so als Hinweis: Einfach mal den Source zu Delphi-Referenz durchsuchenStrToDate anschauen und man spart sich jede Überlegung mit den FormatSettings irgendwelche exotischen Datums Formatierungen zu übergeben

Es gibt eine überladene Version von StrToDate mit dem zusätzlichen Parameter FormatSettings, in welchem man das Format übergeben kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:02 Uhr.
Seite 1 von 2  1 2      

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