String in TDatetime per Format umwandeln

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

String in TDatetime per Format umwandeln

Beitragvon charlytango » 9. Okt 2018, 11:54 String in TDatetime per Format umwandeln

Hi

möchte einen String
Code: Alles auswählen
2008-11-09T17:36:59Z
in ein Datum umwandeln.
Dazu gibt es zahlreiche Funktionen in den units sysutils und dateutils, alles ok
Natürlich kann ich den String auch zerlegen und daraus ein Datum formen.

Wollte bloß wissen ob ich irgendwo eine existierende elegante Methode übersehen habe bei der man einfach einen Formatstring mit übergibt?

thx
charlytango
 
Beiträge: 133
Registriert: 12. Sep 2015, 11:10
Wohnort: Wien
OS, Lazarus, FPC: Laz 1.8 | 
CPU-Target: Win 32Bit, 64bit
Nach oben

Beitragvon marcov » 9. Okt 2018, 12:10 Re: String in TDatetime per Format umwandeln

marcov
 
Beiträge: 1035
Registriert: 5. Aug 2008, 08:37
Wohnort: Eindhoven (Niederlande)
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk) | 
CPU-Target: 32/64,PPC(+64), ARM
Nach oben

Beitragvon Timm Thaler » 9. Okt 2018, 21:41 Re: String in TDatetime per Format umwandeln

Dann aber https://www.freepascal.org/docs-html/rtl/sysutils/trystrtodatetime.html. Das gibt ein False bei falscher Formatierung, auf das man reagieren kann, das andere wirft nur eine Exception - nagut, auf die kann man auch reagieren... ;-)
Timm Thaler
 
Beiträge: 730
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon wp_xyz » 9. Okt 2018, 22:41 Re: String in TDatetime per Format umwandeln

Die StrToDateTime-Routinen helfen hier nicht, weil diese nur DateSeparator, Timeseparator und Reihenfolge der Datums-/Zeitbestandteile berücksichtigen, aber keine zusätzlichen Zeichen, so wie sie mit FormatDateTime eingebaut werden können. In der Unit DateUtils gibt es ScanDateTime, das man mit demselben FormatString aufrufen kann, der bei FormatDateTime verwendet wurde. Es ist quasi die Umkehrung von FormatDateTime.

Code: Alles auswählen
uses
  DateUtils;
var
  dt: TDateTime;
begin
  dt := ScanDateTime('yyyy-mm-dd"T"hh:nn:ss"Z', '2008-11-09T17:36:59Z')

Beachte, dass die ISO-Trennzeichen T und Z "gequotet" sein müssen. Allerdings scheint die Routine einen Bug zu haben, weil das abschließende Anführungszeichen für das "Z" einen Fehler verursacht.

[EDIT] Der Buf in ScanDateTime wurde inzwischen in fpc-trunk behoben.
Zuletzt geändert von wp_xyz am 10. Okt 2018, 09:36, insgesamt 1-mal geändert.
wp_xyz
 
Beiträge: 2694
Registriert: 8. Apr 2011, 08:01

Beitragvon Timm Thaler » 10. Okt 2018, 00:35 Re: String in TDatetime per Format umwandeln

TryStrToDateTime kann doch FormatSettings: https://www.freepascal.org/docs-html/rtl/sysutils/tformatsettings.html

Und da geht ShortDateFormat und ShortTimeFormat. Sollte das nicht reichen?
Timm Thaler
 
Beiträge: 730
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon wp_xyz » 10. Okt 2018, 05:40 Re: String in TDatetime per Format umwandeln

Timm Thaler hat geschrieben:TryStrToDateTime kann doch FormatSettings: https://www.freepascal.org/docs-html/rtl/sysutils/tformatsettings.html

Und da geht ShortDateFormat und ShortTimeFormat. Sollte das nicht reichen?

Hast du das ausprobiert?
wp_xyz
 
Beiträge: 2694
Registriert: 8. Apr 2011, 08:01

Beitragvon charlytango » 11. Okt 2018, 09:06 Re: String in TDatetime per Format umwandeln

Erstmal ein herzliches Danke an alle Poster. Das zeigt mir dass ich trotz langer Beschäftigung mit (früher) Delphi und nun Lazarus nur an der Oberfläche kratze ;)

Hast du das ausprobiert?


Mangels Zeit kann ich es mir erst am WE bzw Wochenbeginn vornehmen.
charlytango
 
Beiträge: 133
Registriert: 12. Sep 2015, 11:10
Wohnort: Wien
OS, Lazarus, FPC: Laz 1.8 | 
CPU-Target: Win 32Bit, 64bit
Nach oben

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste

porpoises-institution
accuracy-worried