Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ISO 8601 Datum vergleichen (https://www.delphipraxis.net/203776-iso-8601-datum-vergleichen.html)

DieDolly 22. Mär 2020 21:41

ISO 8601 Datum vergleichen
 
Wie vergleicht man am besten ein iso8601 Datum?
TDateTimes konvertiere ich vorher immer in Timestamps und habe dann was zum Rechnen.

Luckie 22. Mär 2020 21:43

AW: ISO 8601 Datum vergleichen
 
Warum nicht, wenn es funktioniert?

DieDolly 22. Mär 2020 21:44

AW: ISO 8601 Datum vergleichen
 
Das ist ein Int64. Ich wüsste ohnehin nicht wie man es sonst vergleichen sollte. Ich dachte nur es gibt eine vernünftigere Methode dafür.

Uwe Raabe 22. Mär 2020 21:48

AW: ISO 8601 Datum vergleichen
 
Wenn die Werte als String vorliegen, warum dann nicht direkt die Strings vergleichen? Das Format ist ja extra so aufgebaut, daß es dies ermöglicht. Das ist auf jeden Fall schneller als eine vorherige Konvertierung.

DieDolly 22. Mär 2020 21:49

AW: ISO 8601 Datum vergleichen
 
Es liegt als Int64 vor. Der Vergleich soll keinen allgemeinen Unterschied festellen, sondern welcher der beiden Werte älter oder neuer ist.

Uwe Raabe 22. Mär 2020 22:20

AW: ISO 8601 Datum vergleichen
 
Wenn es als Int64 vorliegt, wie ist dann die binäre Darstellung des Datums? ISO 8601 beschreibt ein reines Textformat.

DieDolly 22. Mär 2020 22:22

AW: ISO 8601 Datum vergleichen
 
Von binären Darstellungen habe ich keine Ahnung. Ich verstehe nicht einmal die Frage.
Wenn man das nicht als Int64 darstellen darf, wie soll man dann prüfen welcher davon neuer ist?

Redeemer 22. Mär 2020 22:38

AW: ISO 8601 Datum vergleichen
 
Warum konvertierst du TDateTime in Timestamp? Man kann auch TDateTime vergleichen, die korrekte Art und Weise ist mit DateUtils.

himitsu 22. Mär 2020 22:40

AW: ISO 8601 Datum vergleichen
 
Direkte Vergleiche der gespeicherten Ausgangswerte ist zu 99.9999999% immer schneller, als eine vorherige Umrechnung, bei jedem einzelnen Wert/Vergleich.

Ausnahme bei Anzahl an Vergleiche, welche die Anzahl der Werte stark überschreite. (alles mit allem Vergleichen, Sortieren usw.)
Aus diesem Grund legen Datenbanken auch einen Index an, in dem die Daten in einem optimaleren Format vorliegen.

z.B. einen Wert in einer Liste suchen und überall erst umrechnen zu müssen ist natürlich langsamer, als wenn die Daten bereits in einem "optimalen" Format vorliegen, bzw, vorher umgewandelt wurden. (z.B. Integer bzw. Int64 anstatt vieler langer Strings ... ein orinaler Vergleich gegenüber dem Vergleich vieler kleiner Chars pro Wert)

Uwe Raabe 22. Mär 2020 22:45

AW: ISO 8601 Datum vergleichen
 
Zitat:

Zitat von DieDolly (Beitrag 1460329)
Von binären Darstellungen habe ich keine Ahnung. Ich verstehe nicht einmal die Frage.
Wenn man das nicht als Int64 darstellen darf, wie soll man dann prüfen welcher davon neuer ist?

Die Frage geht doch auf ISO 8601 und das ist ein Textformat für Datum und Uhrzeit. Mit Int64 hat das gar nichts zu tun. Wenn du also sagst, daß du ISO 8601 Daten als Int64 hast, dann ergibt diese Aussage erstmal keinen Sinn.

Weiterhin ist das ISO 8601 Format bewusst so aufgebaut, daß ein direkter Stringvergleich möglich ist.

Vielleicht wäre jetzt ein guter Zeitpunkt deinen bisherigen Code zu zeigen?

DieDolly 22. Mär 2020 22:51

AW: ISO 8601 Datum vergleichen
 
Zitat:

Vielleicht wäre jetzt ein guter Zeitpunkt deinen bisherigen Code zu zeigen?
Es gibt keinen? Deswegen frage ich doch hier.

Also kann man das alles als String lassen und so vergleichen? Wie vergleicht man dann ein Datum 1 und ein Datum 2?

Der Hintergrund ist ganz einfach: ich speichere aktuell verschiedene Werte als Timestamp. Und irgendwann demnächst ist der halt... zu Ende und würde überlaufen.
Deswegen möchte ich das schon frühzeitig alles abändern.
Ich vergleiche sehr oft Werte wie "Datum 1 > Datum 2" und rechne das vorher in Integer/Sekunden.

Oder sollte man intern nur mit TDateTime arbeiten und vergleichen und nur zum Speichern das lange Format nehmen?
Man lädt das Format ein, konvertiert es einmalig in TDateTime um und das wars.

Luckie 23. Mär 2020 01:50

AW: ISO 8601 Datum vergleichen
 
Wenn Datum 1 und Datum 2 als ISO 8601 vorliegen, kannst du sie genauso, wie Strings, vergleichen. Wo ist jetzt dein Problem oder Frage?

p80286 23. Mär 2020 07:09

AW: ISO 8601 Datum vergleichen
 
Das ISO-Datum in seiner vollen Ausprägung hat ja auch noch einen Zeit-Anteil incl. Zeitzone das ist dann etwas unübersichtlicher. TDatetime oder ein Timestamp sind immer vollständig, liegt es daran? Welche Daten liegen denn vor?

Gruß
K-H

Sherlock 23. Mär 2020 07:52

AW: ISO 8601 Datum vergleichen
 
Zitat:

Zitat von DieDolly (Beitrag 1460336)

Der Hintergrund ist ganz einfach: ich speichere aktuell verschiedene Werte als Timestamp. Und irgendwann demnächst ist der halt... zu Ende und würde überlaufen.

Nein. Jedenfalls nicht zu unseren Lebzeiten, es sei denn, Du hast ein eigenes Timestamp erfunden und nutzt darin SmallInt um Sekunden seit 01.01.2020 darzustellen :lol:. Seit man bis 2038 gedacht hat, haben Unix-Timestamps int64 als Datentyp... das reicht.

Sherlock

DieDolly 23. Mär 2020 12:28

AW: ISO 8601 Datum vergleichen
 
Heißt das die 2038 Grenze gibt es nicht mehr?

himitsu 23. Mär 2020 12:52

AW: ISO 8601 Datum vergleichen
 
Doch, aber nur wenn die Variable in 31 Bit vorliegt.
Und wenn doch, dann ist immernoch lange Zeit. (der Klimawandel ertränkt uns eh vorher)

Integer springt 2038 ins Negative und mit einem Unsigned-Integer hast sogar noch bis 2106 deine Ruhe.
* ab 2038 Probleme mit Integer-Vergleichen
* ab 2106 Datenverlust, bzw. Sprung in die Vergangenheit (1970), weil zuwenige Bit

DieDolly 23. Mär 2020 13:31

AW: ISO 8601 Datum vergleichen
 
Ich stelle alles auf 64bit Integer um das sollte erstmal reichen. Oder Cardinal? :lol:

p80286 23. Mär 2020 14:29

AW: ISO 8601 Datum vergleichen
 
Wenn Du keine negativen Timestamps benötigen solltest ist unsignedInt wohl Mittel der Wahl.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 05: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