Autor |
Beitrag |
rob87
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Mi 02.07.08 13:40
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
      
Beiträge: 493
|
Verfasst: 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 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Mi 02.07.08 13:45
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Mi 02.07.08 14:00
Haut irgendwie no ned so hin. Steh glaub ich grad auf der Leitung.....
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: 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
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: 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') |
_________________ Anonymes Eckenkind
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Mi 02.07.08 14:29
|
|
g1o2k4
      
Beiträge: 493
|
Verfasst: Mi 02.07.08 14:34
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Mi 02.07.08 14:47
Danke, aber so hats schon funktioniert. Mein String war ja ned zulang 
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: 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
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Do 28.08.08 17:01
Sooo, 24 Stunden sind rum: *push*
Hat keiner 'ne Idee?
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Do 28.08.08 17:19
Richtig, '' geht aber nicht, da das Feld ein Char ist und somit keinen Leerstring akzeptiert.
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: 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; |
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: 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
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: 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
      
Beiträge: 394
Erhaltene Danke: 8
Win XP
D5 Prof, C# Express 2005
|
Verfasst: 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
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: 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.
|
|