Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - StrToDate Ausgangsformat?? 02072008 => 02.07.2008
rob87 - Mi 02.07.08 13:40
Titel: StrToDate Ausgangsformat?? 02072008 => 02.07.2008
Hallo zusammen,
ich hab einen String der Art: '02072008'. Und ich will den String als Datum in einer DB abspeichern: 02.07.2008
Mach ich das nicht mit der Funktion StrToDate?? Braucht die unbedingt einen Separator. Denn bisher schreibt mir das System das nicht richtig rein???
g1o2k4 - Mi 02.07.08 13:44
also bei der uhrzeit gehts so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var a: TDateTime; s: string;
a := Time(); s := FormatDateTime('hh:nn:ss:zzz', a); |
vermutlich ist das mit dem datum soetwas wie:
Delphi-Quelltext
1:
| s := FormatDateTime('dd:mm:yy', a); |
aber ich brauchte es bisher nie, deswegen keine garantie.
rob87 - Mi 02.07.08 13:45
g1o2k4 hat folgendes geschrieben: |
also bei der uhrzeit gehts so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| var a: TDateTime; s: string;
a := Time(); s := FormatDateTime('hh:nn:ss:zzz', a); |
vermutlich ist das mit dem datum soetwas wie:
Delphi-Quelltext 1:
| s := FormatDateTime('dd:mm:yy', a); |
aber ich brauchte es bisher nie, deswegen keine garantie. |
Stimmt. Die Funktion kenn ich auch. Des test ich gleich mal.
rob87 - Mi 02.07.08 14:00
Haut irgendwie no ned so hin. Steh glaub ich grad auf der Leitung.....
Bergmann89 - Mi 02.07.08 14:16
HI,
das Datum muss mit Punkte im String stehen, also "02.07.2008"
dann kannst du StrToDate aufrufen und dann is der String ein Datum.
Und damit kannst du dann arbeiten: z.B kannst du dann einfach einen
Tag dazu zählen oder sowas...
Wenn du jetzt aus deinem String ein Datum machen willst, dann musst
du dir da selbst ne Funktion schreiben. Bsp:
Delphi-Quelltext
1:
| StringNeu := StrAlt[1]+StrAlt[2]+'.'+StrAlt[3]+StrAlt[4]+'.'+copy(StrAlt,5,4); |
oder so irgendwie ^^
MfG Bergmann.
Miri - Mi 02.07.08 14:25
Was für ne DB ist's denn?
Unter Oracle könnte man z.B. sowas machen:
Quelltext
1:
| TO_DATE('02072008','ddmmyyyy') |
rob87 - Mi 02.07.08 14:29
Miri hat folgendes geschrieben: |
Was für ne DB ist's denn?
Unter Oracle könnte man z.B. sowas machen:
Quelltext 1:
| TO_DATE('02072008','ddmmyyyy') | |
MS SQL Server. Aber so wie Bergmann89 es beschrieben hat funktionierts. ;-)
rob87 - Mi 02.07.08 14:47
Danke, aber so hats schon funktioniert. Mein String war ja ned zulang ;-)
baka0815 - Mi 27.08.08 15:32
Ich hab' ein ähnliches Problem.
Ich habe einen String, den ich nach einem bestimmten Muster in ein Datum umwandeln möchte. Das Muster ist nicht fix, kann also z.B.
MM/DD/YYYY, DD.MM.YYYY oder
DDMMYYYY sein.
Die ersten beiden funktionieren wunderbar wie folgt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| function GetDatum(Datum, Format: string, Trenner: Char): TDateTime; var FormatSettings: TFormatSettings; begin FormatSettings.ShortDateFormat := Format; FormatSettings.LongDateFormat := Format; FormatSettings.DateSeparator := Trenner;
Result := StrToDateTime(Datum, FormatSettings); end;
[...]
GetDatum('10/30/2008', 'MM/DD/YYYY', '/'); GetDatum('24.12.2007', 'DD.MM.YYYY', '.'); GetDatum('24122007', 'DDMMYYYY', #0); |
Nur das letzte Beispiel ohne Trenner schlägt fehl.
Gibt es irgendetwas, dass ich für den Trenner eingeben muss, damit es funktioniert? Gibt es eine andere Funktion, die damit klar kommt oder muss ich etwa selber einen Parser basteln?
baka0815 - Do 28.08.08 17:01
Sooo, 24 Stunden sind rum: *push*
Hat keiner 'ne Idee?
elundril - Do 28.08.08 17:05
probiers mal so:
Delphi-Quelltext
1:
| GetDatum('24122007', 'DDMMYYYY', ''); |
#0 ist nämlich schon ein zeichen aber du willst kein zeichen oder?
lg elundril
baka0815 - Do 28.08.08 17:19
Richtig, '' geht aber nicht, da das Feld ein Char ist und somit keinen Leerstring akzeptiert.
Sinspin - Do 28.08.08 18:17
Arbeite doch einfach mit einem beliebigen Trenner und entferne den danach via StringReplace.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function GetDatum(Datum, Format: string, Trenner: Char): TDateTime; var FormatSettings: TFormatSettings; begin FormatSettings.ShortDateFormat := Format; FormatSettings.LongDateFormat := Format; FormatSettings.DateSeparator := Trenner;
Result := StrToDateTime(Datum, FormatSettings); Result := StringReplace(result, Trenner, '', [rfReplaceAll]); end; |
baka0815 - Fr 29.08.08 13:11
Ich habe hier eine universelle Schnittstelle, die Daten in verschiedenen Formaten einliest.
Beim einen Kunden ist's "DD.MM.YYYY", beim anderen "MM/DD/YYYY" und bei wieder anderen halt "MMDDYYYY".
Nun würde ich das Format gerne im Programm konfigurierbar halten und eine generische Methode zum Umwandeln verwenden. Wenn ich einen Trenner habe, funktioniert es ja auch ohne weiteres.
Wie gesagt, ich bekomme das Datum bereits in "DDMMYYYY" und möchte es nicht in dieses Format, sondern in ein TDateTime, umwandeln.
Trotzdem schon mal Danke für eure Ideen.
Yogu - Fr 29.08.08 13:20
Wie wär's denn damit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| function GetDatum(Datum, Format: string, Trenner: Char): TDateTime; var FormatSettings: TFormatSettings; begin if (Trenner = #0) and (Length(Datum) >= 4) then begin Datum := Datum[1]+Datum[2] + '.' + Datum[3]+Datum[4] + '.' + Copy(Datum, 5, Length(Datum); Trenner := '.'; end;
FormatSettings.ShortDateFormat := Format; FormatSettings.LongDateFormat := Format; FormatSettings.DateSeparator := Trenner;
Result := StrToDateTime(Datum, FormatSettings); end; |
Die Lösung stand doch schon oben im Thread, du musst einfach die Trenner nachträglich einfügen. ;)
baka0815 - Fr 29.08.08 13:25
Dann kann ich auch mit Encode-Date arbeiten.
Nur kann ich nicht entscheiden was "01022008" ist, ob "DDMMYYYY" oder "MMDDYYYY". Dann müsste ich (wie ich schon geschrieben habe) einen eigenen Parser für das Datum basteln, was ich nach Möglichkeit vermeiden möchte.
Dass ich den Format-String nach "D", "M" und "Y" parsen kann und dann das ganze "zu Fuß" programmieren kann, ist klar. Dachte nur, dass es in Delphi evtl. schon was dafür gibt (was ja auch stimmt, sofern man einen Trenner hat).
iKilledKenny - Fr 29.08.08 13:53
Auch ein Parser kann den Unterschied zwischen "DDMMYYYY" oder "MMDDYYYY" bei einem Datum von "01022008" nicht erkennen. Das geht nämlich gar nicht... Wenn du solch einen String bekommst, muss dir irgendjemand schon sagen, wie das zusammengebaut wurde.
baka0815 - Fr 29.08.08 16:34
Den Format-String (also "DDMMYYYY" bzw. "MMDDYYYY") habe ich ja und dazu auch das Datum als String.
Was ich nur eben (mit Delphi-Mitteln) nicht hin bekomme ist aus diesen zwei Strings ein TDateTime Objekt zu erzeugen.
Yogu - Fr 29.08.08 16:48
Du könntest beide Strings parallel durchgehen, aus dem Format-String holst du dir den Typ des Zeichens und aus dem Datums-String das Zeichen selber. Dann brauchst du noch drei Variablen für Tag, Monat und Jahr, in die du dann schreibst. Zeichen außer D, M und Y im Format-String werden einfach ignoriert.
baka0815 - Mo 01.09.08 09:24
Ja und dann sind wir wieder beim Parser.
Gut, dann werd' ich das wohl "zu Fuß" basteln müssen. Schade, ich hatte gehofft, so eine Funktion bereits in Delphi zu finden. Aber, dann ist das Thema hier (für mich) vorerst erledigt.
Danke euch!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!