Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Datumformatierung (https://www.delphipraxis.net/160114-datumformatierung.html)

Moony 28. Apr 2011 10:18

Datumformatierung
 
Hallo zusammen,

ich habe folgende Situation:

Ich habe ein Datum als String in folgendem Format: YYMMDD. Nun möchte ich die einzelnen Werte extrahieren. Das führe ich mit einem Decode(StrToDate(myString), y, m, d) aus.
Das Problem ist, dass das Datum vor der Umwandlung ins TDateTime Objekt eine 80 für 1980 hat und nach dem dekodieren eine 2080 fürs Jahr.

Gibt es irgendwelche Methoden oder sonstiges die dieses Problem mit dem Jahrtausendwechsel behandeln?

Gruß, Moony

DeddyH 28. Apr 2011 10:20

AW: Datumformatierung
 
Wenn da nur 80 steht, woher willst Du genau wissen, ob es 1980 oder 2080 sein soll? Soll es immer 1980 sein, setz halt vor der Umwandlung ein '19' davor.

[edit] Andere Möglichkeit: Datum wie gehabt umwandeln und wenn es in der Zukunft liegt, 100 Jahre abziehen
Delphi-Quellcode:
DateUtils.IncYear(Datum, -100);
[/edit]

Aviator 28. Apr 2011 10:31

AW: Datumformatierung
 
Willst du das Datum des aktuellen Tages auslesen?
Oder wer gibt dir den String vor, in dem dein Datum steht?

Lol @Detlef: Du hast die gleiche Signatur wie ich. :)

DeddyH 28. Apr 2011 10:34

AW: Datumformatierung
 
Vermutlich wird das Datum aus irgendeinem Datenbestand kommen, sonst wäre das ja einfach zu beheben.

P.S.: Meine Sig is öller :lol:

Aviator 28. Apr 2011 10:39

AW: Datumformatierung
 
Ja da wirste wohl recht haben, dass das Datum irgendwo aus evtl. einer DB o.Ä. ausgelesen wird. Dazu sollte sich der liebe Herr "Threadstarter" mal äußern. ^^

Moony 28. Apr 2011 10:49

AW: Datumformatierung
 
Das Datum wird aus dem maschinellen Code eines Reisepasses, Personalausweises, etc. ausgelesen und dort ist nach MRP das Jahr 2 stellig definiert.

Bei dem Geburtsdatum ist das kein Problem IncYear zu verwenden. Bei dem Ablaufdatum jedoch nicht möglich, da ich nicht wissen kann, wann der Ausweis abläuft.
Hätte ja sein können, dass vielleicht bereits jemand eine Allroundlösung dafür hat...

Gruß, Moony

DeddyH 28. Apr 2011 10:59

AW: Datumformatierung
 
Beim Ablaufdatum könnte man ja das nehmen, was am Nächsten am aktuellen Datum liegt. Es scheint mir recht unwahrscheinlich, dass Du es mit einem Ausweis zu tun bekommst, der bereits 80 Jahre abgelaufen ist :zwinker:

ConnorMcLeod 28. Apr 2011 11:01

AW: Datumformatierung
 
Genau, oder das Datum zwischen heute und dem Geburtsdatum.

DeddyH 28. Apr 2011 11:03

AW: Datumformatierung
 
Dann wäre aber jeder Ausweis bereits abgelaufen.

ConnorMcLeod 28. Apr 2011 11:10

AW: Datumformatierung
 
Ich gehe davon aus, dass zwischen heute und der Geburt weniger als 100 Jahre liegen. Dann kann es nur eine Möglichkeit (19.. oder 20..) für die beiden fehlenden Stellen im Jahr geben, oder? Die beiden anderen hat man ja schon vom Einlesen. Oder habe ich jetzt einen Knoten im Hirn? Kann schon sein ;-)

Aviator 28. Apr 2011 11:11

AW: Datumformatierung
 
Ich bin mir nicht mehr 100%ig sicher. Aber auf einem Reisepass wird doch das "Erstellungsdatum", also das Datum, an dem der Ausweiß gemacht wurde angegeben. Wird dieses Datum auch in dem Format angegeben, wie das Ablaufdatum? Wenn nicht könntest du es so machen wie DeddyH es beschrieben hat. Bzw. ähnlich.
Schau einfach nach, was das heutige Datum ist und vergleich den Datumswert mit dem Ablaufdatum. Streich halt die 20 oder die 19 aus dem Jahr weg, damit du es machen kannst. Sollte jetzt das Jahr des aktuellen Datums höher liegen, dann wird der Ausweiß wohl abgelaufen sein. Zumindest in den aktuellen Jahren. Wenn jetzt eine Jahrhundertwende kommen würde gäbs natürlich Probleme. Aber das wäre vlt. mal eine Vorablösung.

Moony 28. Apr 2011 13:23

AW: Datumformatierung
 
Nee, laut MRP (Machine Readable Passport) ist im Code das Geburtsdatum und das Ablaufdatum gegeben.
Beim Geb-Datum habe ich das IncYear verwendet bei allen Jahren die größer snd als heute.
Bei dem Ablaufdatum werde ich das erst mal lassen und somit wird automatisch das aktuelle Jahrtausend gesetzt.

Danke für eure Anregungen.

Gruß, Moony


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 Uhr.

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