![]() |
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 |
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; |
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. |
AW: Datum anhand Format umwandeln
Zitat:
Dieser wird dan mit strtodate, trystrtodate oder was auch immer Du nutzen willst zu einem Datum gemacht. Gruß K-H |
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.
|
AW: Datum anhand Format umwandeln
Zitat:
Jedes Mal das Datumsformat anpassen scheint mir zu aufwendig? Gruß k-H |
AW: Datum anhand Format umwandeln
Ob ich String-Manipulationen am Eingangsstring oder am FormatString vornehme, sollte sich im Aufwand nicht unterscheiden, oder?
|
AW: Datum anhand Format umwandeln
Nur mal so als Hinweis: Einfach mal den Source zu
![]() |
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 |
AW: Datum anhand Format umwandeln
Zitat:
Zitat:
|
AW: Datum anhand Format umwandeln
wenn ich das richtig verstehe kann ich bei der überladenen version das format mit angeben. Allerdings bezieht sich dies nur auf das Ausgabeformat.
Das problem liegt nicht in der Ausgabe der Daten, sondern im auslesen nach vorgegebenen Format. korrigiert mich wenn ich das falsch interpretiert habe. noch eine frage am rande: wie bekomme ich eine 2 stellige jahreszahl bsp: 67 in eine 4 stellige jahreszahl bsp: 1967? |
AW: Datum anhand Format umwandeln
Das Zielformat ist immer ein Datetime. Das Format bezieht sich auf das Format im String (Input)
|
AW: Datum anhand Format umwandeln
wie muss ich die format variable deklarieren?
unten stehender quellcode bringt mir den fehler, das die eingelesene Zahl kein Datum ist. Ich schätze das ich das format der falschen variable übergebe. [DP] var format : Tformatsettings; begin format.shortdateformat:=edit2.text; edit3.text:= datetostr(strtodate(edit1.Text,format)); end; [/DP] |
AW: Datum anhand Format umwandeln
Wie DeddyH schon erwähnte, geht Tformatsettings nicht ohne DateSeparator, deswegen ist das so für dich unbrauchbar.
|
AW: Datum anhand Format umwandeln
Ungetestet und unoptimiert:
Delphi-Quellcode:
function MyStrToDate(Str, Format: String): TDate;
var Settings: TFormatSettings; i: integer; const SEPARATOR = '/'; begin assert(length(Str) = length(Format)); i := 2; while i <= length(Format) do begin if Format[i] <> Format[i-1] then begin Insert(SEPARATOR, Format, i); Insert(SEPARATOR, Str, i); inc(i); end; inc(i); end; Settings.ShortDateFormat := Format; Settings.DateSeparator := SEPARATOR; Result := StrToDate(Str, Settings); end; MyStrToDate('20130705', 'yyyymmdd'); |
AW: Datum anhand Format umwandeln
jepp, der fehlende separator macht mir den strich durch die rechnung.
in dem fall bleibe ich bei meiner function. Danke für eure ideen und mühen :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:07 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