![]() |
Schaltjahr
So kannst du heraus finden ob die eingegebene Jahreszahl ein Schaltjahr ist:
Delphi-Quellcode:
Beispiel:
function Schaltjahr(year:Integer):Boolean;
var v:Integer; x:Real; begin x := year / 4; v := trunc ( x ); if ((x > v)and(x < v+1)) then Schaltjahr := False else Schaltjahr := True; end;
Delphi-Quellcode:
...
if Schaltjahr(2004) = True then Label1.Caption := '2004 ist ein Schaltjahr!'; ... |
Re: Schaltjahr
Aus der Delphi Hilfe:
Delphi-Quellcode:
function IsLeapYear(Year: Word): Boolean;
Zitat:
|
Re: Schaltjahr
Das hatte ich hier schon mal verbrockt.
Und wenn du dir mal die Berechnung für Februar anschaust, wirst du bemerken, das nicht jedes durch 4 teilbare Jahr ein Schaltjahr ist. :mrgreen: Zitat:
|
Re: Schaltjahr
wie war das noch alle 2000 jahre ist ein schaltjahr alle 200 nicht alle 100 wieder oder wie war das ?
|
Re: Schaltjahr
:warn: Alle 4 Jahre ist eins, es sei denn das Jahr ist durch 100 teilbar.
Aber wenn es auch noch duch 400 teilbar ist, ist es wieder eins, daher war das Jahr 2000 auch ein Schaltjahr, während das Jahr 1900 kein's war. :mrgreen: |
Re: Schaltjahr
Aufgrund dessen, daß obiger Code die beiden Ausnahmen (alle 100 Jahre, alle 400 Jahre) nicht berücksichtigt, schiebe ich den mal aus der CodeLib raus. Ausserdem gibt es ja noch IsLeapYear, wie Luckie schon angemerkt hat ;-)
...:cat:... |
Re: Schaltjahr
Wie Luckie schon sagte gibt es die Funktion in Delphi bereits, die folgendermassen aussieht:
Delphi-Quellcode:
Und das ist meine etwas schnellere Lösung:
Result := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0));
Delphi-Quellcode:
Result := ((Year and 3) = 0) and ((Year mod 100 > 0) or (Year mod 400 = 0));
|
Re: Schaltjahr
Und warum ist deine schneller? Ich muss allerdings zu geben, dass sich beide nicht richtig verstehe... :gruebel:
|
Re: Schaltjahr
Hab bei mir 'nen kleine Fehler entdekt. :oops:
(DIV zu MOD geändert)
Delphi-Quellcode:
Function TageImMonat(Monat, Jahr: Integer): Integer;
Begin Case Monat of 1, 3, 5, 7, 8, 10, 12: Result := 31; 4, 6, 9, 11: Result := 30; 2: If ((Jahr mod 4 = 0) and (Jahr mod 100 <> 0)) or (Jahr mod 400 = 0) Then Result := 29 Else Result := 28; Else Result := -1; End; End; |
Re: Schaltjahr
Das find ich schicker:
Delphi-Quellcode:
uses SysUtils;
function TageImMonat(const Monat, Jahr: integer): integer; const TageImSchaltMonat: array[1..12] of integer = (31,29,31,30,31,30,31,31,30,31,30,31); TageImMonat: array[1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31); begin if isLeapYear(Jahr) then result := TageImSchaltMonat[Monat] else result := TageImMonat[Monat]; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 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 by Thomas Breitkreuz