Aus Datum Wochentag Kalenderwoche berechnen Wochentagsberechnung in C Code

OP #1343963
Lesenswert?

Hi,

im Anhang der C Code zur Ermittlung des Wochentages und der 
Kalenderwoche.

Der Algorithmus hält sich an den Gregorianische Kalender der ende des 16 
Jahrhunderts entwickelt wurde:

Schaltjahr alle 4 Jahre
Alle 100 Jahre keins
Alle 400 Jahre eins

Zykluszeit 400 Jahre.

http://de.wikipedia.org/wiki/Wochentagsberechnung

Für das Jahr steht ein 13Bit Wert zur Berechnung des JAhres 0000-7999 
zur verfügung, in der Software die diese Dateien nutzt, könnte man mit 
einem Offset von 2000 Jahren arbeiten.

Kalenderwoche nach DIN 1355 / ISO 8601

http://de.wikipedia.org/wiki/Woche

der erste Tag der K-Woche ist der Montag
der 4.1. eines Jahres liegt immer in der ersten KW
maximal 3 tage der 53igsten KW liegen im Folgejahr

Im Zip ist ein File mit der Lage der Kalenderwoche bezogen auf den 
28Jahr Rythmus. Die Verschiebungen die durch das Fehlende Schaltjahr im 
Jahrtausend entstehen werden mit berücksichtigt (Problemjahr %400 ->101)

Die Werte werden absolut berechnet, d.h die Daten werden aus der 
JAhresinformation errechnet, es wird nicht von Punkt X losgerechnet, und 
auch nicht ein JAhr X berechnet um die Rechnungen zu stützen. Nur 
innerhalb des JAhres werden ein paar Stützpunkte genommen um Code zu 
sparen.

Für die Wochentage gilt:

0=MO .... 6=SO

Viel Spass damit,
Whitenoise
Angehängte Dateien:
OP #1344432
Lesenswert?

Hallo Jörg,

ja, mit dem Zeller Algorithmus habe ich auch rumprobiert, ich hatte im 
Bereich März April manchmal Probleme mit dem Ergebnis, und da ich diese 
Lösung schon hatte, habe ich sie bevorzugt. Bei dem Zeller Algoritmus 
werden der Januar und der Februar des Jahres als 13 und 14 Monat das 
letzten Jahres gerechnet, wer spass daran hat, kann diesen auch hier 
einsetzen.

Was der Algorithmus nicht mitbringt ist die Berechnung der 
Kalenderwoche, welche hier auch enthalten ist.

Was wolltest du mir mit deinem Link sagen?

Gruß,
Whitenoise
Gast #1344435
Lesenswert?

Hier noch ein paar Varianten:
1
/***********************************************************************
2

3
 Day of Week:
4

5
 The result is an integer in the range 0-6, 
6
   where 0=Monday and 6=Sunday  (for the Zeller formular)
7

8
 Reference:
9
 - Chr. Zeller;
10
   Kalender-Formeln, Acta Mathematica, 9 (1887) 131-136
11

12
 - The Day of the Week for Gregorian Calendars (A. D. Bradley) ?? 82-87
13

14
 - A. Grassl;
15
   Kalenderrechnung: Wochentage im laufenden Jahr.
16
   (Calendar calculations: Days of the week in a year.)
17
   MNU. Der Mathematische und Naturwissenschaftliche Unterricht. 
18
   (Apr 1997) v. 50(3) p. 150-151.
19

20
 - Keith & Craver;
21
   The ultimate perpetual calendar?, JoRM 22:4 (1990) 280-282
22
   day of the week as a 44 character expression in C. (illegal use of --)
23
   The following 45 character C expression by Keith is correct.
24
   dow(y,m,d) { return (d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7; }
25

26
 - M. Oswalden;
27
   Wochentag und Osterdatum - im Kopf gerechnet.
28
   T. 1.  Gregorianischer Kalender (ab 15. Okt. 1582)
29
   T. 2.  Julianischer Kalender.
30
   Wiss. Nachr. (Jan 1990) (no.82) p. 41-44
31
   Wiss. Nachr. (Apr 1990) (no.83) p. 40-42.
32
   ZblD 1992h.00756 + 1992h.00760 
33

34
 - A. W. Butkewitsch, M. S. Selikson; 
35
   Ewige Kalender, Teubner (Leipzig) 1974
36
   Kleine Naturwissenschaftliche Bibliothek, Bd. 23, p98-113
37

38
 - Heinz Bachmann; 
39
   Kalenderarithmetik, 2nd Ed.,
40
   Juris Verlag, Z"urich, 1984, ISBN 3-260-05035-0, p26-42
41
-----------------------------------------------------------------------
42
   mailto:Torsten.Sillke@uni-bielefeld.de    1999-03-15
43
***********************************************************************/
44

45
#include <stdint.h>
46
#include <stdio.h>
47

48
int dayofweek(uint8_t day, uint8_t month, uint16_t year)
49
{
50
   /** Zeller's congruence for the Gregorian calendar. **/
51
   /** With 0=Monday, ... 5=Saturday, 6=Sunday         **/
52
   if (month < 3) {
53
      month += 12;
54
      year--;
55
   }
56
   return ((13*month+3)/5 + day + year + year/4 - year/100 + year/400) % 7;
57
}
58

59

60
int dayofweek0(int d, int m, int y)
61
{
62
   /** a 45 character C expression by Keith    **/
63
   /** With 0=Sunday, 1=Monday, ... 6=Saturday **/
64
   return (d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7;
65
}
66

67

68
int dayofweek1(int day, int month, int year)
69
{
70
   /** Variation of Sillke for the Gregorian calendar. **/
71
   /** With 0=Sunday, 1=Monday, ... 6=Saturday         **/
72
   if ((month -= 2) <= 0) {
73
      month += 12;
74
      year--;
75
   }
76
   return (83*month/32 + day + year + year/4 - year/100 + year/400) % 7;
77
}
Gast #1344510
Lesenswert?

DAS amüsiert mich am meisten
"Kalenderwoche nach DIN 1355 / ISO 8601"

es befassen sich wirklich leute damit sowas nach DIN zu formen ..
wo es doch weitaus andere problemchen in der welt gibt :(

ich bin glaube auf dem falschen planeten

sry for OT
Gast #1345144
Lesenswert?

Werner B. schrieb:
> Na ja, jedefalls Besser als Bananen und Gurken zu normieren!
>
> Auch Sorry, aber den Frust über unsere EU-Bürokraten muss man ab und zu
> mal loswerden. (Und unsere Volks(ver)treter segnen diesen Hirnsch... ähh
> -malz auch noch ab. Kopfschüttel!)

Bei den Gurken war es nur leider genau andersrum, Deutschland hatte das 
von der EU gefordert. Es ist leider bei den EU-Mitgliedern ueblich, die 
EU-Vorteile als nationale Erfolge zu verkaufen und nationale Probleme 
als EU-Nachteile zu deklarieren. Wie gut das funktioniert und was dabei 
rauskommt, hat man schoen bei Irland gesehen.
OP #1348175
Lesenswert?

Hallo,

ist eine windows app, sie lädt an die richtige Stelle im Fenster die 
passenden bmp Bilder (Foto Ausschnitt der originalhardware) in 
abhängigkeit eines Speichers, der ist genauso organisiert wie auf dem 
Atmega in der Originalhardware, so kann ich vieles auf dem Rechner 
entwickeln und ansehen und später nur ins Studio kopieren.

Gruß,
w.
Gast #1390668
Lesenswert?

...ja habe ich dort schonmal gepostet, wollte immer noch einen eigenen 
thread für dies ding aufmachen, aber dafür ist es noch nicht weit genug 
fortgeschritten.

Schaltplan ist noch in arbeit. Das ding soll mit IR Fernbedienung und 
einem joystick lokal am display bedienbar werden. Die Funktion 
(Blättern) gibts schon, das ist das geringste problem.

Das sind Matrixmodule von Samsung (SLM1606M).
Stromaufnahme pro Modul knapp 2A bei voller ausleuchtung (20 sind 
verbaut).

Momentan habe ich aber nur ein 4A Steckernetzteil angeschlossen, bei den 
paar strichen geht es noch gerade so.

Insgesamt sind es etwas mehr als 10000 LEDs.

Gruß,
Whitenoise

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren