Forum: Projekte & Code Aus Datum Wochentag Kalenderwoche berechnen Wochentagsberechnung in C Code


von Thorsten S. (whitenoise)


Angehängte Dateien:

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

von Thorsten S. (whitenoise)


Angehängte Dateien:

Lesenswert?

..sie sind entstanden beim Bau meines aktuellen Projektes (LED Matrix 
Kalender mit 3 Farben)

Im Anhang ein Bild der Simulation des gesamten Displays auf dem Rechner.

Gruß,
whitenoise

von Jörg H. (idc-dragon)


Lesenswert?

Mit Verlaub, das geht viel einfacher, mit dem Zeller-Algorithmus. Die 
Berechnung braucht keine 10 Zeilen Code und keine Tabellen.
Auf die Schnelle ergoogelt:
http://c-buch.sommergut.de/Kapitel10/Verwendung-von-R%FCckgabewerten-und-Prototypen.shtml

Jörg

von Thorsten S. (whitenoise)


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

von Sven P. (Gast)


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
}

von gast (Gast)


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

von Werner B. (werner-b)


Lesenswert?

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!)

von P. S. (Gast)


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.

von Gast (Gast)


Lesenswert?

Wie funktioniert denn der Simulator?

von Thorsten S. (whitenoise)


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.

von whitenoise (Gast)


Angehängte Dateien:

Lesenswert?

so siehts auf dem display aus.

nur um mal einen vergleich zu zeigen.

gruß,
w.

von Philipp B. (philipp_burch)


Lesenswert?

whitenoise schrieb:
> so siehts auf dem display aus.
>
> nur um mal einen vergleich zu zeigen.

Hm, im Simulator spiegelt's aber weniger ;)

Im Ernst: Sieht toll aus! Das hattest du auch in den Kunstwerken 
schonmal gepostet, oder?

von Armin K. (-donald-) Benutzerseite


Lesenswert?

Das Gerät sieht super aus!
Wie viel Strom zieht denn das? Das ist bestimmt nicht wenig.
Darf man da mal den Schaltplan sehen?

Bei dem Gerät würde ich mir noch vier Tasten wünschen:
Voriger/nächster Monat
Voriges/nächstes Jahr.

Die könnte man neben der Monats- und Jahranzeige anbringen.

Armin

von Matthias L. (Gast)


Lesenswert?

@ White Noise (whitenoise)

Was ist das für ein Display?

Oder ist das einfach ne Matrix aus abermillionen von LEDs ?

von whitenoise (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.