AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfe Datum ob älter als ein Jahr

Ein Thema von LokutusvB · begonnen am 15. Jul 2009 · letzter Beitrag vom 16. Jul 2009
Antwort Antwort
Seite 2 von 2     12   
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#11

Re: Prüfe Datum ob älter als ein Jahr

  Alt 15. Jul 2009, 20:12
Zitat von Wolfgang Mix:
Code fuer den julianischen Tag sind mit Vorsicht zu geniessen.
Man muss prüfen, ob der Ubergang vom 4.10.1582 auf 15.10.1582 korrekt behandelt wird.
Bei durchgängiger Tageszählung gelten noch die älteren Schaltjahresregeln.
Somit ist mein Code sicherer
Ja, wenn es ums Jahr geht. Ich habe sowas benutzt für so schwierige Berechnungen wie 15 Tage Skonto, 30 Tage Zahlungsziel. Dabei kann mir auch Jungsteinzeit, Römisches Reich und Mittelalter egal sein.

Vor allem wollte ich drauf hinweisen, dass man Sachen wie Datumsberechnungen nicht ständig neu erfinden muss, das haben i.A. schon frühere Generationen gelöst. Irgendwo im Internet gibt es Algorithmen für fast jedes Kalendersystem, das die Menschheit erfunden hat, nötigenfalls auch vom jüdischen Kalender in den der Azteken.

Gruss Reinhard
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Prüfe Datum ob älter als ein Jahr

  Alt 15. Jul 2009, 20:31
Zitat von Reinhard Kern:
Ja, wenn es ums Jahr geht.
Post #1 lässt mich vermuten, genau darum geht es

Die Methode von Wolfgang Mix ist ja auch schon von vor 1992 und zumindest was Schaltjahre angeht, angenehm resistent.
  Mit Zitat antworten Zitat
GreenHorn3600

Registriert seit: 24. Jun 2007
165 Beiträge
 
#13

Re: Prüfe Datum ob älter als ein Jahr

  Alt 15. Jul 2009, 22:23
Hallo Jungs,

sagt mal, gibt es da nicht eine Funktion IsLeapYear oder so ähnlich, im Standard, welche angibt ob es sich um ein Schaltjahr handelt oder auch nicht?

Grüße
Euer GreenHorn
  Mit Zitat antworten Zitat
Stormy

Registriert seit: 8. Okt 2005
Ort: LPZ
73 Beiträge
 
Delphi 6 Enterprise
 
#14

Re: Prüfe Datum ob älter als ein Jahr

  Alt 16. Jul 2009, 08:57
Hi,

wozu so eine Funktion wenn es Mod gibt?
Einfach den 4. Modulus des Jahres ausrechnen also zum Beispiel 1996 mod 4.
Wenn dann 0 raus kommt war wie in diesem Fall 1996 ein Schaltjahr.

...
1996 mod 4 = 0 <- Schaltjahr
1997 mod 4 = 1
1998 mod 4 = 2
1999 mod 4 = 3
2000 mod 4 = 0 <- Schaltjahr
2001 mod 4 = 1
...


Gruß
Stormy
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#15

Re: Prüfe Datum ob älter als ein Jahr

  Alt 16. Jul 2009, 09:28
Zitat von Stormy:
wozu so eine Funktion wenn es Mod gibt?
Einfach den 4. Modulus des Jahres ausrechnen also zum Beispiel 1996 mod 4.
weil das nicht so einfach ist?

ein Erdenjahr ist nunmal nicht genau 365,25 Tage lang, (so war es noch im Julianischen Kalender)
sondern, laut Definition des gregorianischen Kalenders (welchen wir aktuell nutzen) 365,2425 Tage.

der Julianische Kalender ist mit 365,25 Tagen etwa 11 Minuten länger als das astromomische Jahr

alle 100 Jahre (mod 100) ist es kein Schaltjahr ... also 1800 und 1900 waren Keine, aber da es alle 400 Jahre (mod 400) dennoch ein Schaltjahr ist, war das Jahr 2000 zufällig eines.

und da es so immernoch nicht ganz mit dem astronomischen Erdenjahr übereinstimmt, schmuggeln die Herren der Zeit jedes Jahr mehrere Schaltminuten und Schaltsekunden in unserer Zeit rein.
(also laschen ganze Minuten und Sekunden einfach weg oder lassen mal eine doppelt ablaufen, bei den Atomuhren und keiner merkt es )
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Stormy

Registriert seit: 8. Okt 2005
Ort: LPZ
73 Beiträge
 
Delphi 6 Enterprise
 
#16

Re: Prüfe Datum ob älter als ein Jahr

  Alt 16. Jul 2009, 09:43
Gut soweit vor oder zurück wollte ich nicht gehen.
Wers braucht muss das dann eben auch noch abfangen z.B. mit mod 400.

...
1600 mod 400 = 0 <- Schaltjahr
1700 mod 400 = 100
1800 mod 400 = 200
1900 mod 400 = 300
2000 mod 400 = 0 <- Schaltjahr
2100 mod 400 = 100
...

Aber danke für den Hinweis!

Gruß
Stormy
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#17

Re: Prüfe Datum ob älter als ein Jahr

  Alt 16. Jul 2009, 10:38
und genau das mach die Funktion isLeakYear aus der SysUtils

Delphi-Quellcode:
function IsLeapYear(Year: Word): Boolean;
begin
  Result := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0));
end;

wobei diese Funktion natürlich auch nur innerhalb des Zeitraumes des "aktuellen" gregorianischen Kalenders korrekt wäre ... also z.B. würde hier behauptet, daß des Jahr 100 nach Christi kein Schaltjahr wäre, was zwar stimmt, aber auch nur, weil es damals noch keine Schlatjahre gab.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Stormy

Registriert seit: 8. Okt 2005
Ort: LPZ
73 Beiträge
 
Delphi 6 Enterprise
 
#18

Re: Prüfe Datum ob älter als ein Jahr

  Alt 16. Jul 2009, 10:44
Dachte mir schon das die Funktion es ähnlich macht aber habe sie dennoch nie benutzt.
Ist ja auch wie man sieht schnell selber geschrieben.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:58 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