Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   IncYear mit 29.02.2004 (https://www.delphipraxis.net/167015-incyear-mit-29-02-2004-a.html)

hoika 9. Mär 2012 11:31

IncYear mit 29.02.2004
 
Hallo #,

IncYear(EncodeDateTime(2004,2,29)) ergibt 28.2.2005.
So steht es auch in der Hilfe.
Ist denn nicht der 01.03.2005 richtig ?


Heiko

Progman 9. Mär 2012 11:36

AW: IncYear mit 29.02.2004
 
Am letzten Tag des Monats Februar incrementierst du das Jahr und erhältst den letzten Tag im Februar des Folgejahres. So gesehen, wäre es korrekt. Abhilfe würde eine Prüfung auf Schaltjahr bringen, wobei man im Falle eines Schaltjahres den Tag noch um 1 erhöht.

Morphie 9. Mär 2012 11:41

AW: IncYear mit 29.02.2004
 
Wenn du ein Jahr addierst, addierst du ja 365 Tage. (außer das nächste Jahr ist ein Schaltjahr)
Addierst du also zum 29.02.2004 deine 365 Tage, erhälst du den 28.02.2005.

hoika 9. Mär 2012 11:47

AW: IncYear mit 29.02.2004
 
Hallo,

naja, die Funktion ruft intern IncMonths (oder so ähnlich) mit 12 auf ...

Progman:
Wir sind uns hier nicht so wirklich sicher.
Ich habe erst mal beides eingebaut, wird per Random umgeschaltet ;)

Heiko

Wolfgang Mix 9. Mär 2012 11:53

AW: IncYear mit 29.02.2004
 
Wie schon einmal beschrieben, gehen die Jahresfunktionen von Delphi davon aus, dass ein Jahr 365,25 Tage hat, was ja falsch ist.
Siehe auch in der Hilfe für YearsBetween. Da musst du schon selber korrigieren.

himitsu 9. Mär 2012 12:32

AW: IncYear mit 29.02.2004
 
IncYear und InMonth, genauer IncAMonth geht nicht von 365,25 Tagen aus.
Dort werden indirekt die Schaltjhre korrekt behandelt. Geht der errechnete Tag aber über das Ende des Monats hinaus, so wird auf dessen Ende abgerundet.


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