Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TDateOrder und GetDateOrder aus System.SysUtils nutzen (https://www.delphipraxis.net/188720-tdateorder-und-getdateorder-aus-system-sysutils-nutzen.html)

Sherlock 30. Mär 2016 15:37

TDateOrder und GetDateOrder aus System.SysUtils nutzen
 
Ich bin grad irgendwie unfähig. Ich bekomme von einem Webservice ein Datum im Format 'YYYY-MM-DD' das läßt sich unter Windows problemlos mit Delphi-Referenz durchsuchenVariants.VarToDateTime ins korrekte
Delphi-Quellcode:
TDate
konvertieren. Sobald ich zu Mac OS wechsle, klappt das nicht mehr, weil in den Tiefen der Delphi-Referenz durchsuchenSysUtils einiges nicht so implementiert ist, wie ich es erwarten würde. Unter Windows übernimmt offenkundig eine Betriebssystemfunktion die erfolgreiche Konvertierung. In anderen Systemen hat man diesen Komfort nicht und muß sich auf Embarcadero verlassen :D Man landet dann über kurz oder lang in der Funktion SysUtils.ScanDate, die leider, leider die Delphi-Referenz durchsuchenFormatSettings des Systems beim Umwandlungsversuch zu Rate zieht. Da findet sie dann in meinem deutschen System als Resultat von GetDateOrder ein doDMY an Stelle des nötigen doYMD und die Sache ist gelaufen, weil dann der String falsch ausgewertet wird. Nun dachte ich mir, ich könnte für den nicht Windows Fall das Datum selbst für die Umwandlung aufhübschen und wollte diese neckischen DateOrder Geschichten nutzen...aber das geht gar nicht. System.SysUtils ist im uses und dennoch kennt Herr Delphi weder TDateOrder noch GetDateOrder. Was mache ich falsch? Oder hat grad jemand eine bessere Datumskonvertierung (Plattformunabhängig!!) parat?

Grüßle,
Sherlock

Der schöne Günther 30. Mär 2016 15:51

AW: TDateOrder und GetDateOrder aus System.SysUtils nutzen
 
Das ist doch ISO8601.

Warum nicht einfach
http://docwiki.embarcadero.com/Libra....ISO8601ToDate

Uwe Raabe 30. Mär 2016 15:55

AW: TDateOrder und GetDateOrder aus System.SysUtils nutzen
 
Zitat:

Zitat von Sherlock (Beitrag 1334213)
System.SysUtils ist im uses und dennoch kennt Herr Delphi weder TDateOrder noch GetDateOrder.

Die kennt Herr Delphi schon, aber er meint, die gehen dich nichts an! Die sind halt nur im Implementation-Teil deklariert.

Was funktioniert denn bei StrToDate bzw. StrToDateTime nicht?

Sherlock 31. Mär 2016 06:59

AW: TDateOrder und GetDateOrder aus System.SysUtils nutzen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1334221)
Zitat:

Zitat von Sherlock (Beitrag 1334213)
System.SysUtils ist im uses und dennoch kennt Herr Delphi weder TDateOrder noch GetDateOrder.

Die kennt Herr Delphi schon, aber er meint, die gehen dich nichts an! Die sind halt nur im Implementation-Teil deklariert.

Gnah! Wenn ich nicht mal das weiss, dann verdiene ich die besagten Methoden auch nicht ;)
Zitat:

Zitat von Uwe Raabe (Beitrag 1334221)
Was funktioniert denn bei StrToDate bzw. StrToDateTime nicht?

Mit der Methode kommt sowohl auf Windows als auch auf dem Mac:
Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt DatumsTest ist eine Exception der Klasse EConvertError mit der Meldung ''1992-02-29' ist kein gültiges Datum' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Immerhin konnte unter Windows VarToDateTime korrekte Ergebnisse liefern.
:(

Aber unser Supermodell hat die Lösung: ISO8601ToDate funktioniert auf Windows und Mac erwartungskonform. :thumb:

Sherlock

Uwe Raabe 31. Mär 2016 07:18

AW: TDateOrder und GetDateOrder aus System.SysUtils nutzen
 
Zitat:

Zitat von Sherlock (Beitrag 1334279)
Mit der Methode kommt sowohl auf Windows als auch auf dem Mac:
Zitat:

---------------------------
...
Im Projekt DatumsTest ist eine Exception der Klasse EConvertError mit der Meldung ''1992-02-29' ist kein gültiges Datum' aufgetreten.
...

Hier nicht:
Delphi-Quellcode:
procedure Main;
var
  dt: TDateTime;
  fmt: TFormatSettings;
begin
  fmt := TFormatSettings.Create;
  fmt.ShortDateFormat := 'YYYY-MM-DD';
  fmt.DateSeparator := '-';
  dt := StrToDate('1992-02-29', fmt);
  Writeln(DateToStr(dt));
end;

Sherlock 31. Mär 2016 07:26

AW: TDateOrder und GetDateOrder aus System.SysUtils nutzen
 
Ich geh jetzt mal in die Ecke und mach eine Stunde: :wall:
Ich finde dennoch die ISO8610-Lösung charmant, da das Datum definitiv immer in dem Format von der Debian-Python-Lösung geschickt wird.

Sherlock

Uwe Raabe 31. Mär 2016 08:06

AW: TDateOrder und GetDateOrder aus System.SysUtils nutzen
 
Zitat:

Zitat von Sherlock (Beitrag 1334283)
Ich finde dennoch die ISO8610-Lösung charmant, da das Datum definitiv immer in dem Format von der Debian-Python-Lösung geschickt wird.

Klar! Wenn die Bediungungen nun mal so sind, dann ist das die eleganteste Lösung. Vor allem sieht man dann auch gleich, daß man da eben kein anderes Datumsformat reinstecken darf.

DeddyH 31. Mär 2016 08:30

AW: TDateOrder und GetDateOrder aus System.SysUtils nutzen
 
Ich habe mir dafür einen record helper geschrieben, das geht auch ganz gut. Einziger Nachteil: der record helper aus SysUtils wird dadurch ungültig, Dinge wie AsString funktionieren also nicht mehr.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz