AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

String in Datum umwandeln

Ein Thema von ngott2 · begonnen am 27. Jan 2020 · letzter Beitrag vom 27. Jan 2020
Antwort Antwort
ngott2

Registriert seit: 26. Aug 2013
77 Beiträge
 
Delphi 10 Seattle Professional
 
#1

String in Datum umwandeln

  Alt 27. Jan 2020, 12:20
Hallo zusammen,
ich bekomme von einer API diesen schönen String zurück. 2017-12-07T09:23:19.542+0000
Diesen würde ich gerne in ein TDateTime verwandeln. StrToDateTime Funktioniert leider nicht. Wird es funktionieren, wenn ich eine TFormatSettings mit übergebe?
Wenn ja gibt es irgend eine Webseite die mir gleich den richtigen String für TFormatSettings ausgeben kann. Weil ich kennne mich mit TFormatSettings überhaupt nicht aus.

Gruß,
ngott2
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.525 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: String in Datum umwandeln

  Alt 27. Jan 2020, 12:34
Handelt sich um ein Datum im ISO-Format.

ISO8601ToDate()
Markus Kinzler
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
185 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: String in Datum umwandeln

  Alt 27. Jan 2020, 12:34
Delphi-Quellcode:
uses
  XSBuiltIns;

DelphiDateTime := XMLTimeToDateTime('2017-10-19T15:10:33.424Z'); // GMT

DelphiDateTime := XMLTimeToDateTime('2017-12-07T09:23:19.542+0000'); // eigene Timezone
ISO8601ToDate() kommt mit deinem String leider nicht zurecht. Da passt ihm der Timezone Offset in disem Format nicht.

Geändert von Rolf Frei (27. Jan 2020 um 12:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.127 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: String in Datum umwandeln

  Alt 27. Jan 2020, 12:35
System.DateUtils: ISO8601ToDate
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
7.353 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: String in Datum umwandeln

  Alt 27. Jan 2020, 13:04
ISO8601ToDate() kommt mit deinem String leider nicht zurecht. Da passt ihm der Timezone Offset in disem Format nicht.
In 10.3.3 schon: DecodeISO8601Time fails if no colon in the time zone offset
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
ngott2

Registriert seit: 26. Aug 2013
77 Beiträge
 
Delphi 10 Seattle Professional
 
#6

AW: String in Datum umwandeln

  Alt 27. Jan 2020, 13:08
Hey danke für die Antworten.
Leider funktionieren beide Funktionen mit meinem String nicht. Sind noch bei Delphi Seattle.

Der String den ich jetzt zum Testen genommen habe: '2020-01-24T10:56:47.850+0100'

Bei der ISO601ToDate Funktion bekomme ich:
---------------------------
Anwendungsfehler
---------------------------
Ungültiger Zeit-Offset-String: 10:56:47.850+0100.

Bei XMLTimeToDateTime bekomme ich

---------------------------
Anwendungsfehler
---------------------------
Exception EConvertError in Modul *******.exe bei 0002C9CA.

Ungültiges Argument zum Codieren der Uhrzeit.


Hat jemand noch eine Idee bzw. Lohnt es sich es zu versuchen mit TDateFormat?
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
185 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: String in Datum umwandeln

  Alt 27. Jan 2020, 13:38
XMLTimeToDateTime gibt es seit D7 und funktioniert da leider mit dem Offset "+0000" auch nicht. Das Z Format, also GMT, geht hingegen fehlerfrei. In 10.2.3 geht das aber auch mit dem +xxxx Format ohne Fehler.

Geändert von Rolf Frei (27. Jan 2020 um 13:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
7.353 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: String in Datum umwandeln

  Alt 27. Jan 2020, 13:39
Lohnt es sich es zu versuchen mit TDateFormat?
Eher nicht.

Ich würde einen Wrapper um ISOISO601ToDate machen, der bei Bedarf den Doppelpunkt im Zeit-Offset ergänzt:
Delphi-Quellcode:
function ISO8601ToDate(const AISODate: string; AReturnUTC: Boolean = True): TDateTime;
var
  idxSign: Integer;
  S: string;
begin
  S := AISODate;
  idxSign := S.LastIndexOfAny(['+', '-']);
  if S.LastIndexOf(':') < idxSign then
    S := S.Insert(idxSign + 3, ':');
  Result := System.DateUtils.ISO8601ToDate(S, AReturnUTC);
end;
Bei einem Update auf 10.3.3+ kannst du den ja wieder rausnehmen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.126 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: String in Datum umwandeln

  Alt 27. Jan 2020, 13:42
Grade mit 10.0 Seattle ausprobiert, Soap.XsBuiltIns.XMLTimeToDateTime(..) geht problemlos.
  Mit Zitat antworten Zitat
ngott2

Registriert seit: 26. Aug 2013
77 Beiträge
 
Delphi 10 Seattle Professional
 
#10

AW: String in Datum umwandeln

  Alt 27. Jan 2020, 13:56
Lohnt es sich es zu versuchen mit TDateFormat?
Eher nicht.

Ich würde einen Wrapper um ISOISO601ToDate machen, der bei Bedarf den Doppelpunkt im Zeit-Offset ergänzt:
Delphi-Quellcode:
function ISO8601ToDate(const AISODate: string; AReturnUTC: Boolean = True): TDateTime;
var
  idxSign: Integer;
  S: string;
begin
  S := AISODate;
  idxSign := S.LastIndexOfAny(['+', '-']);
  if S.LastIndexOf(':') < idxSign then
    S := S.Insert(idxSign + 3, ':');
  Result := System.DateUtils.ISO8601ToDate(S, AReturnUTC);
end;
Bei einem Update auf 10.3.3+ kannst du den ja wieder rausnehmen.
Danke damit funktioniert es bei mir. Das ist für mich als Lösung ausreichend.

Danke euch allen.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf