wochentag eines datums berechnen

Neue Frage »

3.Oktober Auf diesen Beitrag antworten »
wochentag eines datums berechnen
hallo, ich muss in informatik ein programm schreiben, welches mir berechnet, was für ein wochentag mein eingegebenes datum war. ich hab mir da überlegt, da man ja auch schon daten hatte, bevor das jahr 1901 anfing (irgendwie logisch) wollte ich das datum in die anzahl von tagen umrechnen, die seit dem 1.1.1600 vergangen sind. 1600 darum, weil ja davor noch irgendwann der julianische kalender galt und der mit den schaltjahren doof is! jedenfalls dachte ich mir, ich rechne von dieser tagesanzhal immer so lange 7 runter, bis ich mit meinem ergebnis zwischen 1 und 7 liege (oder anders: divisionsrest bei ganzzahliger division mit 7) und würde dann den zu der zahl gehörenden wochentag erhalten. dummer weise funzt das aber nich bei daten von 1601 bis 1753. was darüber hinausgeht habsch noch nich getestet! aber stimmt denn meine überlegung so? die formeln von gauss und so nem andern typ (sorry, namen vergessen!) willsch nich benutzen!
Thomas Auf diesen Beitrag antworten »

Hi,

deine Überlegung klingt logisch. Hast du die Schaltjahre auch mit drin? Der Fehler wird vielleicht in der Berechnung der Tage liegen - kannst ja mal den bisherigen Quelltext posten.

Gruß,
Thomas
fALK dELUXE Auf diesen Beitrag antworten »

Hallo,

hab grad die Lösung von meinem Kumpel, der das schon in Inf gemacht hat, hier. Wenn du unbedingt willst, dann kann ich seine Lösung posten.
3.Oktober Auf diesen Beitrag antworten »

code:
1:
2:
3:
4:
5:
6:
7:
PROCEDURE dayofweek(d:DATE):CARDINAL; (* 0 = SAMSTAG *) 
BEGIN
IF (d<7) THEN d:=d+3; 
IF (d>7) THEN d:=d-7; END; END; 
d:=d MOD 7; 
RETURN d; 
END dayofweek; 

is in modula-2 geschrieben! die erste zeile is komischer weise nötig, damit ich in der ersten woche auch auf mein richtigen wochentag komme. leider gehts aber trotzdem nich. und die lösung deiner freundes, falk deluxe, würde mich interessieren.
tut mir leid, dass ich erst so spät reagiere! hatte ine paar probleme mit meinem rechner...
fALK dELUXE Auf diesen Beitrag antworten »

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
procedure TForm1.wochentag(Sender: TObject);
var j,m,t,c,y,w:longint; tag:string;
begin
t:=spinedit1.Value;
m:=spinedit2.Value;
j:=spinedit3.value;
if m<= 2 then
begin
  m:=m+12;
  j:=j-1;
end;
y:= j mod 100;
c:= j div 100;
w:= (((t + (13*(m + 1)) div 5 + y + (y div 4) + (c div 4) - (2 * c))) + 7)mod 7;
case w of
  0 : tag:='Samstag';
  1 : tag:='Sonntag';
  2 : tag:='Montag';
  3 : tag:='Dienstag';
  4 : tag:='Mittwoch';
  5 : tag:='Donnerstag';
  6 : tag:='Freitag';
else
tag:= 'fehlerhafter Wert!';
end;
label6.caption:=tag
end;


Tag, Monat, Jahr ist ja klar. w entspricht dann deinem 'd' im modulo2 code. Vllt klappt das bei Delphi/Pascal auch, ich guck mal kurz. hmm, scheint es nicht zu geben.

Naja, ich versteh die Formel jedenfalls nicht. smile Hab mir auch noch nicht die mühe gemacht, dass zu durchschauen.
3.Oktober Auf diesen Beitrag antworten »

danke, aber genau das is die formel des zweiten typen, die ich gefunden habe. den namen des "erfinders" weiss ich nichmehr, aber seltsamer weise funzt diese formel nich mit meinen daten, also vor 1900 jedenfalls ging sie da bei mir nich! warum die gehen soll weiss ich auch nich, aber in pascal geht sie, wenn man sie etwas umschreibt und ein paar variablen nich so genau betrachtet. nunja, dann muss ich also nochma weiter dran rum basteln. oder ich sage einfach, dass die formel nur ab dem jahr 1800 funzt. vorher bracuht man doch eh keine wochentage, oder? aber da wir grade bei sowas sind, in linux gibts ja so eine schicke datums-kalender-funktion. das ding gibt mir auch die daten vom jahre 0 bis 9999 wider. wie die das gemacht haben will ich wissen, das würde ich acuh nehmen! naja, also trotzdem danke!
 
 
fALK dELUXE Auf diesen Beitrag antworten »

gib mal ein beispiel an, weil im groben test funktioniert ja die Formel auch mit sehr frühen Daten.
3.Oktober Auf diesen Beitrag antworten »

hab grade feststellen dürfen, es sind nich die selben prozeduren, aber ähnlich. mit meiner konnte man nur die 1900-er berechnen, aber mit deiner/die deines freundes scheint es zu gehn!! ich verstehe es zwar nich, aber ich werde die mal austesten und dann mal etwas intensiver! kann also noch ein zwei stunden oder länger dauern bis ich weiss, ob sie geht! aber die is schonmal (auf den ersten blick zumindest) nich übel. danke!
3.Oktober Auf diesen Beitrag antworten »

also bei mir is der 13.4.2004 ne 3 (3 würde also ein dienstag sein), aber der 16.12.1605 is ne 6, was aber rein mathematisch nich geht. weiter hab ich noch nix probiert, is mir nur so aufgefall, weil von dienstag zu samstag mehr als nur 3 tage vergehen! demnach glaub ich nich, dass das alles so stimmt!
juergen Auf diesen Beitrag antworten »

Guckst Du da:
http://www.ortelius.de/kalender/calc_de.php

EDIT:
Einige Programme und Informationen zur Kalenderberechnung gibt es unter:
http://www.computus.de/
3.Oktober Auf diesen Beitrag antworten »

danke juergen, aber ich sehe da nich so ganz durch! ich wollte ja nur nen wochentag berechnen und nich von julianisch in gregorianisch und andersrum und hi und her rechnen. um das jetzt alles darauf umzustellen würde ich wohl länger als eine woche brauchen, damit ich alle fehler raus habe. hat ja so schon lange genug gedauert. ausserdem würde ich das dann nichmehr erklären können, was ja sinn und zweck der übung is! ich werds mir trotzdem nochma ganz in ruhe ansehen, aber ich werds wohl nich für men programm nutzen! aber schön, dass es sowas gibt Big Laugh , also DANKE!
fALK dELUXE Auf diesen Beitrag antworten »

Zitat:
Original von 3.Oktober
also bei mir is der 13.4.2004 ne 3 (3 würde also ein dienstag sein), aber der 16.12.1605 is ne 6, was aber rein mathematisch nich geht. weiter hab ich noch nix probiert, is mir nur so aufgefall, weil von dienstag zu samstag mehr als nur 3 tage vergehen! demnach glaub ich nich, dass das alles so stimmt!


Stimmt nicht, der 16.12.1605 ist ein Freitag, wie du auch auf der Seite, die Juergen angegeben hat berechnen kannst.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Gregorianischer Kalender:	16. Dezember 1605	
julianischer Kalender:	6. Dezember 1605	
römischer (julian.) Kalender:	ANTE DIEM VIII IDIBVS DECEMBRIS MMCCCLVIII A. V. C.	
jüdischer Kalender:	6. Tewet 5366	
Julianisches Datum (12h UT):	2307624	
Franz. Revolutionskalender:	außerhalb des gültigen Bereichs	
Maya-Kalender:	0 Pictun 11 Baktun 19 Katun 7 Tun 1 Uinal 1 Kin (13 Imix; 19 Mol)	
altägypt. Kalender:	22. Tybi	
OF-Kalender:	21. Schlaf 598 vor OF (11. Osman)	
Wochentag:	Freitag
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »